基于stm32F429的温湿度监测系统
基于stm32F429的温湿度监测系统
以下是一个基于STM32F429的温湿度监测系统的设计方案,包含硬件选型、软件实现和关键代码:
一、系统组成
- 核心控制器:STM32F429ZIT6(带FPU和DSP指令,内置LCD控制器)
- 温湿度传感器:DHT22(AM2302)
- 测量范围:温度-40~80℃ ±0.5℃,湿度0~100%RH ±2%
- 单总线数字接口
- 显示模块:2.4寸TFT LCD(320x240分辨率,通过FSMC接口驱动)
- 报警模块:LED指示灯 + 蜂鸣器
- 通信接口:USB转串口(用于PC数据监控)
二、硬件连接
| 外设 | STM32F429引脚 | 功能说明 |
|---|---|---|
| DHT22 | PG9 | 单总线数据线 |
| TFT LCD | FSMC接口 | 使用Bank1区域 |
| LED报警灯 | PG13 | 温度超标指示 |
| 蜂鸣器 | PG14 | 湿度超标报警 |
| USB转串口 | PA9/PA10 | USART1通信 |
三、软件设计(使用HAL库)
1. DHT22驱动代码
// dht22.h
typedef struct {
float temperature;
float humidity;
} DHT22_Data;
void DHT22_Init(void);
uint8_t DHT22_Read(DHT22_Data *data);
// dht22.c
#include "dht22.h"
#include "tim.h" // 使用TIM2做精确延时
#define DHT22_PIN GPIO_PIN_9
#define DHT22_PORT GPIOG
void DHT22_Init() {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOG_CLK_ENABLE();
GPIO_InitStruct.Pin = DHT22_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(DHT22_PORT, &GPIO_InitStruct);
HAL_GPIO_WritePin(DHT22_PORT, DHT22_PIN, GPIO_PIN_SET);
}
uint8_t DHT22_Read(DHT22_Data *data) {
uint8_t bytes[5] = {0};
uint32_t timeout;
// 主机启动信号
HAL_GPIO_WritePin(DHT22_PORT, DHT22_PIN, GPIO_PIN_RESET);
HAL_Delay(1); // 至少1ms低电平
HAL_GPIO_WritePin(DHT22_PORT, DHT22_PIN, GPIO_PIN_SET);
// 切换输入模式
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = DHT22_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(DHT22_PORT, &GPIO_InitStruct);
// 等待响应
timeout = 0;
while (HAL_GPIO_ReadPin(DHT22_PORT, DHT22_PIN)) {
if (++timeout > 100) return 1; // 超时
HAL_Delay(1);
}
// 数据采集(省略具体时序代码)
// ... 实现40位数据读取逻辑
// 校验和验证
if (bytes[4] != (bytes[0] + bytes[1] + bytes[2] + bytes[3]))
return 2;
// 数据转换
data->humidity = (bytes[0] << 8 | bytes[1]) / 10.0;
data->temperature = (bytes[2] << 8 | bytes[3]) / 10.0;
return 0;
}
2. 主程序逻辑
// main.c
#include "stm32f4xx_hal.h"
#include "lcd.h"
#include "dht22.h"
#include "usart.h"
#define TEMP_THRESHOLD 35.0 // 温度报警阈值
#define HUM_THRESHOLD 80.0 // 湿度报警阈值
int main(void) {
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
LCD_Init();
DHT22_Init();
// 报警灯初始化
__HAL_RCC_GPIOG_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_13 | GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
DHT22_Data sensor_data;
char disp_buf[40];
while (1) {
if (DHT22_Read(&sensor_data) == 0) {
// LCD显示
sprintf(disp_buf, "Temp: %.1fC", sensor_data.temperature);
LCD_DisplayString(10, 50, (uint8_t *)disp_buf);
sprintf(disp_buf, "Hum: %.1f%%", sensor_data.humidity);
LCD_DisplayString(10, 70, (uint8_t *)disp_buf);
// 串口输出
printf("Temperature: %.1fC\tHumidity: %.1f%%\r\n",
sensor_data.temperature, sensor_data.humidity);
// 报警判断
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13,
(sensor_data.temperature > TEMP_THRESHOLD) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14,
(sensor_data.humidity > HUM_THRESHOLD) ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
HAL_Delay(2000); // 每2秒采集一次
}
}
四、关键实现要点
-
精确时序控制:
- 使用硬件定时器(TIM2)实现微秒级延时
- 单总线通信期间关闭中断保证时序
-
数据显示优化:
// 在LCD上绘制温度曲线 static int16_t temp_history[120]; static uint8_t index = 0; // 存储并绘制 temp_history[index] = (int16_t)(sensor_data.temperature * 10); LCD_DrawGraph(10, 100, temp_history, 120, LCD_COLOR_RED); index = (index + 1) % 120; -
低功耗设计:
- 采集间隔期间进入STOP模式
- 使用RTC唤醒功能
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
五、系统功能扩展
- 添加SD卡存储:使用FATFS记录历史数据
- 网络传输:通过ESP8266模块上传云平台
- 手机APP监控:开发蓝牙/BLE连接应用
- 多节点组网:通过RS485构建分布式监测网络
六、调试建议
- 使用逻辑分析仪验证DHT22时序
- 通过STM32-STLINK实时监测变量
- 添加看门狗防止死机
IWDG_HandleTypeDef hiwdg; void IWDG_Init(void) { hiwdg.Instance = IWDG; hiwdg.Init.Prescaler = IWDG_PRESCALER_256; hiwdg.Init.Reload = 4095; HAL_IWDG_Init(&hiwdg); } // 主循环中定期喂狗 HAL_IWDG_Refresh(&hiwdg);
实际开发中需注意:
- DHT22需加10K上拉电阻
- 长距离传输时使用屏蔽线
- 避免阳光直射传感器
- LCD显示使用双缓冲防止闪烁
这个系统可实现高精度环境监测,采样率2秒/次,温度分辨率0.1℃,湿度分辨率0.1%RH,适合温室大棚、仓库、实验室等场景。
库房温湿度监测系统
不适宜的温湿度条件不仅影响货物品质,还可能引发安全事故。例如,湿度过高可能导致霉菌滋生,电路短路,或温度过低引起的液体冻结膨胀等,都可能对仓库设施及货物造成损害。库房
2025-01-06 16:37:32
【STM32F429开发板用户手册】第14章 STM32F429的电源,复位和时钟系统
【STM32F429开发板用户手册】第14章 STM32F429的电源,复位和时钟系统
资料下载
佚名
2021-12-08 15:51:10
【STM32F429开发板用户手册】第8章 STM32F429的终极调试组件Event Recorder
【STM32F429开发板用户手册】第8章 STM32F429的终极调试组件Event Recorder
资料下载
佚名
2021-12-04 14:06:04
【STM32F429开发板用户手册】第1章 初学STM32F429的准备工作
【STM32F429开发板用户手册】第1章 初学STM32F429的准备工作
资料下载
麻酱
2021-12-04 13:51:04
大型冷库温湿度监测系统方案
这是一个无线WIFI遍布社会大小角落的时代,小到居民楼,大到工厂,甚至在公交上都有随时可连的WIFI。 大型冷库温湿度监测系统是一个专门用于保障
2023-09-14 16:22:00
基于STM32的温湿度采集系统设计
①利用stm32对DHT11模块进行数据采集②将采集到的温湿度数据上云(本次实验并未成功上云)二、实验环境硬件:STM32F407ZGT6、DH
库房无线温湿度监控方案 无线温湿度监控系统 仓储物流无线温湿度
数据传输得到广泛的应用,GPRS通信技术以其不需要架设通信线路、组网灵活方便、覆线数据传输系统中越来越被重视。为此,盛世科技提出了一种基于GPRS的环境温湿度
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机