1. 项目概述与硬件选型
温湿度监测是物联网领域最基础也最实用的应用场景之一。想象一下,你可以在办公室通过手机查看家里的温湿度,或者在农业大棚里远程监控作物生长环境,这就是我们要实现的功能。这个项目适合有一定嵌入式开发基础的朋友,也欢迎初学者跟着教程一步步操作。
核心硬件选择上,我推荐使用STM32F103系列开发板作为主控,这个系列性价比高,资料丰富,正点原子的精英板自带丰富外设接口。ESP8266模块负责WiFi通信,建议选择AT指令固件版本,稳定性更好。传感器方面,DHT11虽然精度一般(±2℃和±5%RH),但胜在价格便宜、接线简单,适合入门学习。如果对精度要求高,可以升级到DHT22或SHT30。
硬件清单具体包括:
- STM32F103ZE精英开发板(带USB转串口芯片)
- ATK-ESP8266 WiFi模块(已刷安信可AT固件)
- DHT11温湿度传感器(四针封装)
- 杜邦线若干(建议使用不同颜色区分电源和信号线)
- 5V/2A电源适配器(长时间运行建议外接电源)
这里有个容易踩坑的地方:ESP8266模块的供电。很多人在调试时直接用开发板的3.3V引脚供电,但当WiFi传输数据时瞬时电流可能超过300mA,会导致模块频繁重启。我的经验是单独给ESP8266接5V电源,或者使用大电流LDO稳压芯片。
2. 硬件连接与电路设计
正确的硬件连接是项目成功的第一步。先来看DHT11与STM32的连接:VCC接3.3V,GND接地,DATA引脚接PC6(可根据实际代码调整)。注意DHT11是单总线协议,需要在DATA线上加一个4.7K上拉电阻,这个细节很多教程会忽略,导致传感器无法正常读数。
ESP8266的连接稍微复杂些:
- VCC接5V电源(切记不要接3.3V)
- GND接地
- TX接STM32的PA3(USART2_RX)
- RX接STM32的PA2(USART2_TX)
- RST引脚可悬空或接MCU控制复位
- IO0在烧录时需要接地,正常工作时悬空
实际接线时我建议先用万用表检查所有连接,特别是GND要确保共地。曾经有个诡异的问题困扰我半天,最后发现是面包板上某个GND插孔接触不良。如果使用杜邦线,最好用热熔胶固定接头,避免松动。
电路设计上要注意几个关键点:
- 电源部分:建议在ESP8266的VCC引脚附近加100μF电解电容和0.1μF陶瓷电容滤波
- 信号线:ESP8266的TX/RX线长度不要超过15cm,过长可能导致通信失败
- 防反接:可以在电源输入端加SS34二极管防止电源反接烧毁模块
3. ESP8266网络配置实战
ESP8266的AT指令配置是项目的第一个难点。我建议先用USB转TTL模块直接连接电脑调试,确认模块正常工作后再接入STM32。打开串口调试助手(波特率115200),依次发送以下指令:
AT AT+CWMODE=1 AT+CWJAP="你的WiFi名称","密码" AT+CIPSTART="TCP","open.lewei50.com",80每个指令发送后应该收到"OK"响应。如果遇到超时,检查:1) WiFi名称密码是否正确 2) 模块是否供电不足 3) 波特率设置是否正确。有个小技巧:在AT+CWJAP指令后加个延时,我实测发现等待3秒再发下条指令成功率更高。
透传模式配置是关键步骤:
AT+CIPMUX=0 AT+CIPMODE=1 AT+CIPSEND进入透传后,模块会直接转发所有数据到服务器。这里有个大坑:退出透传需要发送"+++",但切记不要带回车!很多串口工具默认勾选"发送新行",这会导致退出失败。我建议先用网络调试工具测试TCP连接,确认能正常收发数据后再进行下一步。
4. STM32驱动开发详解
STM32端的代码主要分为三部分:DHT11驱动、ESP8266通信处理和主逻辑控制。先来看DHT11的驱动实现要点:
void DHT11_Start(void) { SET_OUTPUT(); // 配置为输出模式 OUTPUT_LOW(); // 拉低总线 delay_ms(18); // 保持18ms低电平 OUTPUT_HIGH(); // 释放总线 delay_us(30); // 等待30us SET_INPUT(); // 切换为输入模式 }这个时序非常关键,误差超过5us就可能导致读取失败。我在调试时用逻辑分析仪抓取了波形,发现DHT11对时序要求确实严格。建议在代码中加入超时判断,避免程序卡死:
uint8_t DHT11_Wait_State(GPIO_PinState state, uint32_t timeout) { uint32_t t = 0; while(DHT11_READ() != state) { if(t++ > timeout) return 1; delay_us(1); } return 0; }ESP8266的通信处理要复杂些。建议封装几个基础函数:
void ESP8266_SendCmd(char *cmd, char *ack, uint16_t timeout) { USART_SendString(USART2, cmd); USART_SendString(USART2, "\r\n"); // 等待应答处理... } void ESP8266_Init(void) { while(ESP8266_SendCmd("AT", "OK", 1000)); while(ESP8266_SendCmd("AT+CWMODE=1", "OK", 1000)); // 更多初始化步骤... }主循环中要注意控制数据上传频率。乐联网平台对免费账号有请求频率限制,建议10-15秒上传一次:
while(1) { DHT11_Read(&temp, &humi); LCD_Display(temp, humi); if(++count >= 15) { // 15秒上传一次 ESP8266_Upload(temp, humi); count = 0; } delay_ms(1000); }5. 乐联网平台对接技巧
乐联网是国内比较成熟的物联网平台,免费版基本能满足个人项目需求。注册账号后需要:
- 在"我的设备"中添加网关
- 记录下分配的userkey(相当于设备密码)
- 添加两个传感器,分别命名为temp和humi
HTTP协议上传数据的格式要特别注意:
POST /api/V1/gateway/UpdateSensors/01 HTTP/1.1 userkey: 你的userkey Host: open.lewei50.com Content-Length: 25 Connection: close [{"Name":"temp","Value":25}]我在实际测试中发现几个常见问题:
- Content-Length必须准确计算,包括中括号和引号
- 每个HTTP头结尾必须是\r\n,不能只有\n
- 数据上传后要等待服务器返回,不要立即关闭连接
调试时可以先用Postman测试接口,确认无误后再移植到STM32代码中。乐联网的API文档写得比较简略,遇到问题时建议多查看社区论坛的讨论。
6. 数据可视化与报警设置
数据上传成功后,乐联网平台提供了多种可视化方式。在"数据展示"页面可以:
- 创建折线图:选择时间范围和传感器,直观显示温湿度变化
- 设置仪表盘:显示实时数值,适合大屏监控
- 配置阈值报警:当温度超过设定值时发送邮件通知
我比较推荐使用"历史数据"功能导出CSV文件,用Excel做更专业的分析。比如统计一天中的温湿度极值、计算平均值等。平台也支持将图表嵌入到个人网站,只需要复制提供的iframe代码即可。
对于需要更复杂功能的用户,乐联网还提供API接口,可以用Python等语言开发自定义应用。比如结合天气预报数据,预测室内温湿度变化趋势,或者与智能家居联动控制空调除湿。
7. 常见问题排查指南
在项目实施过程中,我遇到过各种奇怪的问题,这里分享几个典型案例:
问题1:ESP8266经常断开WiFi连接
- 检查电源是否稳定,建议用示波器观察5V电压波动
- 尝试降低WiFi发射功率(AT+RFPPOWER=15)
- 更换其他WiFi信道,避开拥挤频段
问题2:DHT11读数全是0或255
- 确认上拉电阻已正确连接
- 检查时序是否精确,特别是起始信号
- 尝试更换传感器,DHT11个体差异较大
问题3:乐联网平台收不到数据
- 用网络调试工具抓包,确认HTTP格式正确
- 检查userkey是否填写正确
- 尝试更换网络环境,有些企业网络会拦截HTTP请求
问题4:STM32程序跑飞
- 检查堆栈是否足够,ESP8266接收缓冲区建议不小于512字节
- 在串口中断中加入超时处理,避免死等数据
- 使用看门狗定时器,提高系统稳定性
8. 项目优化与扩展思路
基础功能实现后,可以考虑以下几个优化方向:
低功耗设计:
- 使用STM32的STOP模式,间隔唤醒采集数据
- 配置ESP8266的深度睡眠模式(AT+GSLP=5000)
- 改用锂电池供电,适合野外监测场景
多传感器融合:
- 增加光照传感器(BH1750)
- 添加土壤湿度传感器(适用于农业)
- 结合大气压传感器(BMP180)预测天气变化
本地存储与断网续传:
- 添加SPI Flash存储历史数据
- 网络恢复后自动补传缺失数据
- 使用FATFS文件系统管理数据文件
多平台通知:
- 通过Server酱推送微信通知
- 对接钉钉机器人API
- 发送短信报警(需要短信网关支持)
这个项目最让我满意的是它的可扩展性。掌握了基础框架后,你可以轻松替换其他传感器,比如用MQ-2做燃气报警,用HC-SR501实现人体感应。物联网开发的乐趣就在于,一个小小的温湿度监测系统,可以衍生出无数实用的智能设备方案。