在智能家居、工业自动化及环境监测领域,基于STM32的智能模块凭借其高性能、低功耗和丰富的外设接口,成为集成温湿度、人体感应等传感器的理想平台。通过实时数据采集与智能控制,可实现环境自适应调节、安全预警等功能。本文将详细解析STM32智能模块的开发流程,涵盖传感器选型、硬件设计、软件编程及实际应用案例,助力开发者快速构建高效可靠的传感控制系统。
一、核心传感器选型与原理
1.1 温湿度传感器:DHT11/DHT22 vs SHT3x
DHT11/DHT22:
数字输出,集成温湿度传感与信号处理电路,接口简单(单总线协议)。
DHT11:精度±2℃(湿度±5%),测量范围0-50℃(20-90%RH),价格低廉。
DHT22:精度±0.5℃(湿度±2%),测量范围-40~80℃(0-100%RH),适合高精度场景。
SHT3x:
选型建议:
1.2 人体感应传感器:PIR与毫米波雷达
选型建议:
二、STM32智能模块硬件设计
2.1 最小系统设计
以STM32F103C8T6为例,核心电路包括:
电源管理:LDO(如AMS1117-3.3)将5V输入转换为3.3V,为MCU及传感器供电。
时钟电路:8MHz外部晶振提供主时钟,32.768kHz晶振用于RTC实时时钟。
调试接口:SWD接口连接ST-Link,支持程序下载与调试。
2.2 传感器接口电路
DHT22连接:
DATA引脚通过4.7kΩ上拉电阻连接至STM32的PA0引脚,确保信号稳定性。
示例代码(基于HAL库):
c#include "dht22.h"DHT22_DataTypeDef dht22_data;if (DHT22_Read(&dht22_data) == DHT22_OK) { printf("Temp: %.1f℃, Humi: %.1f%%\r\n", dht22_data.Temperature, dht22_data.Humidity);}
PIR传感器连接:
OUT引脚连接至STM32的PA1(外部中断引脚),检测到人体时触发中断。
中断服务函数示例:
cvoid EXTI1_IRQHandler(void) { if (EXTI->PR & EXTI_PR_PR1) { HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 检测到人体时翻转LED状态 EXTI->PR |= EXTI_PR_PR1; // 清除中断标志 }}
2.3 扩展功能设计
无线通信:通过ESP8266(Wi-Fi)或CC1310(Sub-1GHz)实现数据上传至云端。
本地存储:外接W25Q128(16MB Flash)存储历史数据,支持断网续传。
人机交互:集成OLED屏幕(SSD1306驱动)实时显示温湿度及人体检测状态。
三、软件架构与控制逻辑
3.1 分层架构设计
硬件抽象层(HAL):封装传感器驱动(如DHT22_Read、PIR_Init)。
业务逻辑层:实现环境阈值判断与控制策略(如温湿度超标时启动风扇)。
应用层:提供用户接口(如手机APP、Web端)配置参数并查看数据。
3.2 智能控制算法示例
温湿度联动控制:
cvoid Env_Control(float temp, float humi) { if (temp > 30.0) { HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, GPIO_PIN_SET); // 启动风扇 } else if (temp < 25.0) { HAL_GPIO_WritePin(HEATER_GPIO_Port, HEATER_Pin, GPIO_PIN_SET); // 启动加热器 } else { FAN_OFF(); HEATER_OFF(); // 关闭所有设备 } if (humi > 70.0) { HAL_GPIO_WritePin(DEHUMIDIFIER_GPIO_Port, DEHUMIDIFIER_Pin, GPIO_PIN_SET); // 启动除湿机 } else { DEHUMIDIFIER_OFF(); }}人体感应防盗报警:
cuint8_t alarm_enabled = 1;void PIR_Callback(void) { if (alarm_enabled) { HAL_UART_Transmit(&huart1, (uint8_t*)"ALARM: Intruder detected!\r\n", 28, 100); // 可扩展:发送短信/推送通知至用户手机 }}
四、实际应用案例
4.1 智能温室监控系统
4.2 办公区域智能照明