基于STM32的温湿度监控系统

news2024/10/3 8:17:23

目录

  1. 引言
  2. 环境准备工作
    • 硬件准备
    • 软件安装与配置
  3. 系统设计
    • 系统架构
    • 硬件连接
  4. 代码实现
    • 初始化代码
    • 主循环代码
  5. 应用场景
    • 家居环境监控
    • 工业环境监控
  6. 常见问题及解决方案
    • 常见问题
    • 解决方案
  7. 结论

1. 引言

在智能家居和工业自动化中,温湿度监控系统是一个非常重要的组成部分。本文将介绍如何使用STM32微控制器设计和实现一个温湿度监控系统,通过DHT11温湿度传感器实时监测环境温度和湿度,并通过LCD显示屏显示数据。

2. 环境准备工作

硬件准备

  1. STM32开发板(例如STM32F103C8T6)
  2. DHT11温湿度传感器
  3. 16x2 LCD显示屏
  4. 面包板和连接线
  5. USB下载线

软件安装与配置

  1. Keil uVision:用于编写、编译和调试代码。
  2. STM32CubeMX:用于配置STM32微控制器的引脚和外设。
  3. ST-Link Utility:用于将编译好的代码下载到STM32开发板中。
步骤:
  1. 下载并安装Keil uVision。
  2. 下载并安装STM32CubeMX。
  3. 下载并安装ST-Link Utility。

3. 系统设计

系统架构

温湿度监控系统的基本工作原理是通过DHT11传感器实时采集温度和湿度数据,并将数据通过LCD显示屏显示出来。具体来说,系统包括温湿度数据采集模块和显示模块。

硬件连接

  1. 将DHT11温湿度传感器的VCC引脚连接到STM32的3.3V引脚。
  2. 将DHT11温湿度传感器的GND引脚连接到STM32的GND引脚。
  3. 将DHT11温湿度传感器的数据引脚连接到STM32的某个GPIO引脚(例如PA0)。
  4. 将16x2 LCD显示屏的VCC引脚连接到STM32的5V引脚。
  5. 将16x2 LCD显示屏的GND引脚连接到STM32的GND引脚。
  6. 将16x2 LCD显示屏的RS、RW、E引脚连接到STM32的GPIO引脚(例如PA1, PA2, PA3)。
  7. 将16x2 LCD显示屏的数据引脚(D4-D7)连接到STM32的GPIO引脚(例如PA4-PA7)。

4. 代码实现

初始化代码

#include "stm32f1xx_hal.h"
#include "dht11.h"
#include "lcd.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  
  LCD_Init();
  DHT11_Init();
  
  while (1) {
    DHT11_DataTypedef DHT11_Data;
    DHT11_ReadData(&DHT11_Data);
    
    char tempStr[16];
    char humStr[16];
    sprintf(tempStr, "Temp: %d.%d C", DHT11_Data.Temperature, DHT11_Data.TemperatureDecimal);
    sprintf(humStr, "Humidity: %d.%d", DHT11_Data.Humidity, DHT11_Data.HumidityDecimal);
    
    LCD_Clear();
    LCD_SetCursor(0, 0);
    LCD_Print(tempStr);
    LCD_SetCursor(1, 0);
    LCD_Print(humStr);
    
    HAL_Delay(2000);
  }
}

void SystemClock_Config(void) {
  // 配置系统时钟
}

static void MX_GPIO_Init(void) {
  // 初始化GPIO
  __HAL_RCC_GPIOA_CLK_ENABLE();
  
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 |
                        GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

static void MX_USART1_UART_Init(void) {
  // 初始化USART1
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 9600;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart1) != HAL_OK) {
    Error_Handler();
  }
}

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

主循环代码

上面的代码已经包括了主循环代码,主要通过DHT11_ReadData函数获取温湿度数据,并通过LCD显示屏显示。

5. 应用场景

家居环境监控

本系统可以应用于家居环境的温湿度监控,实时监测室内温湿度,并通过LCD显示屏显示数据,便于用户掌握室内环境状况。

工业环境监控

本系统还可以应用于工业环境的温湿度监控,实时监测生产环境的温湿度,防止设备过热或湿度过高,提高生产安全性和效率。

6. 常见问题及解决方案

常见问题

  1. 温湿度数据不准确
    • 检查DHT11传感器的连接是否正确。
    • 确认DHT11传感器的校准是否正确。
  2. LCD显示屏不显示
    • 检查LCD显示屏的连接是否正确。
    • 确认LCD初始化代码是否正确。

解决方案

  1. 校准传感器
    • 使用已知温湿度环境校准DHT11传感器。
  2. 检查LCD设置
    • 确认STM32和LCD显示屏的连接无误。
    • 检查LCD显示屏初始化代码是否与硬件连接一致。

7. 结论

本文介绍了如何使用STM32微控制器和DHT11温湿度传感器实现一个温湿度监控系统,从硬件准备、环境配置到代码实现,详细介绍了每一步的操作步骤。通过本文的学习,读者可以掌握基本的嵌入式开发技能,并将其应用到实际项目中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 进程优先级、程序地址空间、进程控制

个人主页:仍有未知等待探索-CSDN博客 专题分栏: Linux 目录 一、进程优先级 1、什么是进程优先级? 2、为什么要有优先级? 3、Linux的优先级特点、查看方式 4、命令行参数和环境变量 1.命令行参数 2.环境变量 获取环境变量的…

Unity强化工程 之 SpriteEditer Multiple

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1. SpriteEditer Multiple Automatic slicing - Unity 手册 这是用于裁剪图集的模式 应用之后精灵编辑器会看到Slice亮…

云计算第二阶段:----监控与服务安全SECURITY

本模块内容,主要讲述 服务器的安全防护与配置软件相关知识。分为网络防护软件介绍、配置与使用用,网络安全相关知识浅度解析。 涉及软件有prometheus ,graphna,zabbix。 网络安全方面涉及基于debian linux系统的kali版本liunx的介绍与简单使用。 SECUR…

c++----内存管理

okk,大家好。我们大家学习了鄙人的前面前面几篇博客,并且还稍微使用了一些c的基础知识。并且我们前面都说过,我们前面学习的知识都说过。我们前面的几篇博客都是我们以后使用c基础。但是我们大家都知道现在代码都关注什么时间啊,内…

强光照射对半导体材料在紫外线下稳定性的影响

引言 半导体材料在光电器件中的应用日益广泛,其稳定性直接影响到器件的性能和寿命。特别是对于那些需要在户外或强光环境下工作的半导体器件,紫外线的照射会对材料的稳定性带来严峻挑战。因此,对半导体材料在紫外线照射下的稳定性进行深入研究…

模型实战(25)之 基于LoFTR深度学习匹配算法实现图像拼接

模型实战(25)之 基于LoFTR深度学习匹配算法实现图像拼接 图像拼接在全景图、大图或者多目场景下经常会被使用,常用的方法有传统图像处理算法和深度学习直接获取对应点的算法传统图像处理算法过程繁琐,阈值少且整体算法结果对调参比较敏感,其主要通过形状、特征点等描述子对…

【解决error】安装torch 1.1.0

第一步 当云服务器上没有指定版本的torch可以选择 先确定指定torch符合的python版本号 例如这里&#xff0c;我需要安装torch1.1.0&#xff0c;所以需要python>3.6 且 python<3.7 根据python版本&#xff0c;确定服务器安装torch的版本配置 第二步 新建conda虚拟环境…

搞DDR必懂的关键技术笔记:Initialization, Training , Calibration

初始化、训练和校准 引言 当一个带有DRAM子系统的设备上电时,DRAM达到可操作状态之前会发生一系列事件。以下是根据JEDEC规范中的状态机所显示的DRAM从上电到可操作状态所经历的各种状态。 这可不是我们平时就一句Training阶段就能概述。 本质上,初始化过程包括四个不同的阶…

【Redis】全局命令/内部编码/浅谈单线程模型

目录 前言 两个核心命令 GET和SET 全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 数据结构的内部编码 Redis的5中数据类型 Redis数据结构和内部编码 单线程架构 前言 Redis 提供了 5 种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维⾮常重要&a…

easyrecovery和diskgenius哪个好 easyrecovery好用吗 diskgenius值得买吗

随着数据存储重要性的不断增加&#xff0c;数据丢失问题变得让人越来越担忧。当文件因为操作不慎、存储文件的介质损坏或其他原因导致数据丢失时&#xff0c;人们迫切需要一种强大的数据恢复工具来帮助他们找回丢失的文件。在这篇文章中&#xff0c;我们将比较两款知名的数据恢…

[Bugku] web-CTF靶场系列系列详解④!!!

平台为“山东安信安全技术有限公司”自研CTF/AWD一体化平台&#xff0c;部分赛题采用动态FLAG形式&#xff0c;避免直接抄袭答案。 平台有题库、赛事预告、工具库、Writeup库等模块。 --------------------------------- eval 开启环境&#xff1a; 进入页面发现是一道php题&…

axios请求响应拦截器

目录 axios-拦截器 拦截器的作用 请求拦截器-基本写法: axios请求拦截器-统一设置token 需求: 核心步骤: 关键代码: 响应拦截器-基本写法: axios响应拦截器-统一处理token失效 需求: 核心步骤: 关键代码: axios响应拦截器-数据剥离 需求: 核心步骤: 关键代码: ax…

试用AWS全新神器:Amazon Bedrock的「Open Artifacts」版Claude.ai Artifacts

Claude.ai的Artifacts真是太方便了。 GitHub上的AWS Samples仓库中有一个仿制Artifacts的应用程序。 Open Artifacts for Amazon Bedrock https://github.com/aws-samples/open_artifacts_for_bedrockhttps://github.com/aws-samples/open_artifacts_for_bedrock本文将介绍「…

【Java算法专场】前缀和(下)

目录 和为 K 的子数组 算法分析 算法步骤 算法代码 算法示例 和可被 K 整除的子数组 算法分析 同余定理 负数取余 算法步骤 算法代码 算法示例 连续数组 算法分析 算法步骤 算法代码 算法示例 矩阵区域和 算法分析 算法步骤 算法代码 算法示例 算法分析 …

1008 Elevator(Java)

题目 解释 输入数字N&#xff0c;数字N后面跟着N个数字代表着目的楼层&#xff0c;起始点是0层&#xff0c;每上升一层花费6秒&#xff0c;每下降一层花费4秒&#xff0c;每达到一个目的楼层&#xff0c;电梯会停5秒。问你一共花费多少秒&#xff1f; 解题思路 这道题不难&a…

【论文笔记】Matching Anything by Segmenting Anything

【引用格式】&#xff1a;Li S, Ke L, Danelljan M, et al. Matching Anything by Segmenting Anything[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2024: 18963-18973. 【网址】&#xff1a;https://openaccess.thecvf.com/co…

【Python】把list转换成json文件(list中为字典,元素按行写入)

0.前言 数据需要处理成与大模型输入相同类型的数据&#xff0c;从csv文件读出后&#xff0c;想要转换成json文件&#xff0c;看了好多资料都是把整个list写入了json&#xff0c;并不是我想要的格式&#xff0c;这里记录一下最后的按行写入的格式。 1.list转json import json …

Camtasia怎么自动加字幕 Camtasia怎么设置字幕

为了防止观众听不清楚视频中的解说声音&#xff0c;在进行视频编辑时&#xff0c;往往需要添加字幕。但是&#xff0c;你是否觉得一个一个添加字幕有些麻烦&#xff1f;使用Camtasia时&#xff0c;有没有什么能够快速、方便添加字幕的方法呢&#xff1f;添加字幕后&#xff0c;…

Docker 环境下使用 Traefik 3 的最佳实践:快速上手

Traefik 最近终于发布了大版本升级后的第一个修正版本&#xff0c;或许是时候正式迁移程序到新版本了。 写在前面 最近 Traefik 发布了 3.1 版本。作为从 Traefik 1.x 开始使用的用户&#xff0c;Traefik 每个大版本升级都会出现一些配置不兼容的情况&#xff0c;这次 3.x 的正…

DC-DC芯片:MT2492说明

文章目录 一. MT2492介绍1. 特点2. 应用3. 额定值4. 电气特性5. 引脚说明6. 典型应用电路 二. 功能说明内部调节器过电流保护和打嗝模式误差放大器启动和关闭内部软启动设置输出电压电感器的选择输入电容器的选择输入电容器的选择PCB布局建议 一. MT2492介绍 MT2492是一款完全…