)
STM32F103RCT6ESP8266极简MQTT实战5分钟实现云端温湿度监控与LED控制在创客比赛和毕业设计中快速验证物联网原型的能力往往决定项目成败。今天分享的这套方案能让初学者在5分钟内完成从传感器数据采集到云端可视化的全流程。我们选用STM32F103RCT6作为主控搭配ESP8266实现WiFi连接通过MQTT协议与OneNET平台交互最终实现温湿度数据上传和LED远程控制的双向通信。1. 硬件准备与极简接线1.1 硬件选型清单主控芯片STM32F103RCT6正点原子Mini板WiFi模块ESP8266-01S注意选择支持AT指令的固件版本传感器DHT11温湿度模块性价比首选执行器普通LED灯建议加220Ω限流电阻提示ESP8266-01S有多个版本确认模块背面印有AI-Thinker字样这是兼容性最好的版本。1.2 5线速接法按照下表连接可避免90%的硬件故障模块引脚STM32连接点注意事项ESP8266 TXPA3 (USART2_RX)交叉连接ESP8266 RXPA2 (USART2_TX)需电平转换ESP8266 RSTPA4可接普通IOESP8266 VCC3.3V绝对禁止接5VESP8266 GNDGND共地必要DHT11 DATAPA6上拉4.7K电阻DHT11 VCC3.3VDHT11 GNDGNDLED阳极PD2串联电阻LED阴极GND// 硬件初始化关键代码STM32CubeMX生成 void HAL_UART_MspInit(UART_HandleTypeDef* huart) { GPIO_InitTypeDef GPIO_InitStruct {0}; if(huart-Instance USART2) { // ESP8266通信串口 __HAL_RCC_USART2_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode GPIO_MODE_AF_PP; GPIO_InitStruct.Pull GPIO_NOPULL; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, GPIO_InitStruct); } }2. OneNET平台闪电配置2.1 三分钟创建MQTT设备登录OneNET控制台进入多协议接入→MQTT旧版点击添加产品产品类别选择智能家居创建设备时记录三个关键参数PRODUCT_ID产品IDDEVICE_ID设备IDAUTH_INFO鉴权信息2.2 数据可视化配置在应用管理中创建新应用添加两个组件折线图组件数据流名称temperature和humidity刷新间隔10秒开关组件数据流名称led_ctrl开指令LED_ON关指令LED_OFF注意平台地区选择南京时服务器地址应为183.230.40.39端口60023. 代码魔改要点3.1 必须修改的三大文件wifi.h中配置热点信息#define SSID Your_WiFi_SSID // 2.4GHz网络 #define PASS Your_Password // 避免特殊字符mqtt.h中填写平台凭证#define PRODUCTID 你的产品ID #define DEVICEID 你的设备ID #define AUTHENTICATION 你的鉴权码mqtt.c中确认服务器地址sprintf(ServerIP,%s,183.230.40.39); ServerPort 6002; // 南京节点端口3.2 数据上传逻辑优化修改timer2.c中的定时器中断精简数据上传格式void TIM2_IRQHandler(void) { if(DHT11_Read_Data(temperature, humidity) SUCCESS) { char payload[128]; sprintf(payload, {\temperature\:%.1f,\humidity\:%.1f}, temperature, humidity); MQTT_Publish($dp, payload); // OneNET特定主题 } }4. 故障闪电排查指南4.1 WiFi连接失败现象串口打印WIFI DISCONNECT解决方案确认wifi.h中的SSID不含中文检查路由器是否开启MAC过滤尝试将ESP8266靠近路由器4.2 MQTT服务器连接超时现象持续输出MQTT Connect Timeout处理步骤用PC端MQTT客户端测试相同服务器地址检查设备时间戳NTP对时确认产品ID/设备ID无空格4.3 数据上传但平台不显示典型原因数据流名称不匹配快速验证# Linux下用mosquitto测试 mosquitto_pub -h 183.230.40.39 -p 6002 -t $dp -m {\temperature\:25.5} -u 产品ID -P 鉴权码 -i 设备ID最后分享一个实战技巧在control.c中添加LED状态反馈机制当收到云平台指令时不仅控制LED同时上报当前状态void LED_Control(uint8_t state) { HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, state); char ack[64]; sprintf(ack, {\led_status\:\%s\}, state?ON:OFF); MQTT_Publish($dp, ack); }