
1. 项目背景与核心功能现代生活中温湿度、光照强度和空气质量等环境参数直接影响居住舒适度。传统环境监测设备往往功能单一且成本高昂而基于STM32的智能终端能同时采集多维度数据并通过本地显示屏实时反馈。我曾用STM32F103搭配DHT11、GP2Y1010AU等传感器搭建过一套监测系统实测发现这种方案不仅成本可控整套硬件成本约200元还能实现分钟级的数据刷新。这个项目的核心在于多传感器协同同时监测PM2.5、温湿度、光照强度低功耗设计采用STM32的睡眠模式待机电流仅2mA实时可视化通过2.8寸TFT LCD显示数据和曲线图模块化设计传感器可灵活更换例如用SHT30替代DHT11提升精度2. 硬件选型与电路设计2.1 主控芯片选择STM32F103C8T6是最佳选择原因有三性价比突出零售价约15元具备72MHz主频和64KB Flash外设丰富内置12位ADC可用于光敏电阻和PM2.5模拟信号采集开发便利标准库和HAL库支持完善我在调试时发现其GPIO驱动能力可直接驱动LCD背光注意若需要WiFi上传数据可换用ESP8266作协处理器通过UART与STM32通信2.2 传感器选型对比传感器类型型号接口测量范围精度单价温湿度DHT11单总线0-50℃, 20-90%RH±2℃, ±5%RH8元PM2.5GP2Y1010AU模拟量0-500μg/m³±10%35元光照GL5528模拟量10-1000 Lux±15%2元实际使用中发现DHT11响应较慢约2秒但对家居环境已足够。若需要更高精度可换用I2C接口的SHT30精度±1.5%RH但价格约40元2.3 关键电路设计要点PM2.5传感器供电需增加100μF电容稳压避免电机工作时电压波动输出端接1kΩ上拉电阻到3.3V光敏电阻分压电路// 计算公式Lux 10^( (log10(Rldr) - 3) / -0.7 ) float Rldr (3.3f * 10.0f) / (adc_value * 3.3f / 4096) - 10.0f;LCD背光控制 通过PWM调节亮度夜间可自动降低亮度节能3. 软件实现与优化技巧3.1 传感器数据采集DHT11的驱动要注意时序问题这里分享一个稳定读取的代码片段void DHT11_Start(void) { GPIO_InitTypeDef gpio {0}; gpio.Pin DHT11_PIN; gpio.Mode GPIO_MODE_OUTPUT_PP; HAL_GPIO_Init(DHT11_PORT, gpio); HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_RESET); HAL_Delay(18); // 保持至少18ms低电平 HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_SET); delay_us(30); // 主机拉高20-40us }3.2 数据滤波算法PM2.5传感器容易受干扰采用移动平均滤波#define FILTER_LEN 10 uint16_t pm25_filter_buf[FILTER_LEN]; uint16_t filter_pm25(uint16_t new_val) { static uint8_t idx 0; pm25_filter_buf[idx] new_val; if(idx FILTER_LEN) idx 0; uint32_t sum 0; for(uint8_t i0; iFILTER_LEN; i) { sum pm25_filter_buf[i]; } return sum / FILTER_LEN; }3.3 低功耗优化通过RTC唤醒实现间歇工作正常模式72MHz全速运行电流约50mA睡眠模式仅RTC工作电流约2mAvoid enter_stop_mode(void) { HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后需要重新配置时钟 SystemClock_Config(); }4. 数据可视化实现4.1 LCD界面设计使用u8g2图形库构建交互界面主页面实时数值柱状图历史页面最近12小时曲线设置页面报警阈值调整4.2 动态刷新优化采用局部刷新策略避免闪烁void refresh_pm25_value(uint16_t val) { char buf[10]; sprintf(buf, %4d, val); // 只更新数值区域x60,y30,w40,h20 LCD_DrawRect(60, 30, 40, 20, WHITE); LCD_ShowString(60, 30, buf, BLACK, WHITE); }5. 常见问题解决方案DHT11无响应检查上拉电阻建议4.7kΩ时序误差需控制在us级多次读取失败后应重置总线PM2.5数值跳变增加硬件滤波在输出端并联104电容避免安装在空调出风口附近定期清洁传感器光学窗口LCD显示异常检查FSMC时序配置尤其地址建立时间背光电压需稳定在3.3V±5%尝试降低SPI时钟频率如从18MHz降至8MHz这套系统在连续运行测试中表现稳定后续可扩展SD卡存储或蓝牙数据传输功能。实际部署时建议将PM2.5传感器与主控板分离安装避免电路发热影响测量精度。