STM32F103RCT6+ESP8266实战:5分钟搞定MQTT温湿度上传OneNET(附LED远程控制)
·
STM32F103RCT6+ESP8266极简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 TX | PA3 (USART2_RX) | 交叉连接 |
| ESP8266 RX | PA2 (USART2_TX) | 需电平转换 |
| ESP8266 RST | PA4 | 可接普通IO |
| ESP8266 VCC | 3.3V | 绝对禁止接5V |
| ESP8266 GND | GND | 共地必要 |
| DHT11 DATA | PA6 | 上拉4.7K电阻 |
| DHT11 VCC | 3.3V | |
| DHT11 GND | GND | |
| LED阳极 | 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(产品ID)DEVICE_ID(设备ID)AUTH_INFO(鉴权信息)
2.2 数据可视化配置
在应用管理中创建新应用,添加两个组件:
- 折线图组件:
- 数据流名称:
temperature和humidity - 刷新间隔:10秒
- 数据流名称:
- 开关组件:
- 数据流名称:
led_ctrl - 开指令:
LED_ON - 关指令:
LED_OFF
- 数据流名称:
注意:平台地区选择"南京"时,服务器地址应为
183.230.40.39,端口6002
3. 代码魔改要点
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);
}
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)