STM32-ESP8266-OneNet
STM32-ESP8266-OneNet
官方文档:物联网开放平台
OneNet介绍
你做了一个监控花盆土壤湿度的设备,想用手机远程看到湿度数据,大致有两种办法:
✅ 方法一:自己搭服务器
- 你租一个云服务器(比如阿里云、腾讯云)
- 自己写程序,让设备把数据发到这个服务器
- 服务器再把数据转发给手机上的 APP 或网页
优点:灵活自由,想怎么玩都行
缺点:你得自己搭建、维护、写接口,比较麻烦
✅ 方法二:使用物联网云平台(比如 OneNET)
- OneNET 就是别人已经搭好的“云服务器 + 管理系统”
- 你只要把设备接入 OneNET,它帮你:
- 收数据
- 存数据
- 转发数据给 APP
- 设置自动化规则等
优点:快速上手、界面友好、不用操心底层
缺点:受平台限制,功能和自定义性不如自己搭建灵活
OneNet配置图
分清产品与设备的区别
OneNet界面介绍
主页




MQTT通信
先判断esp8266的固件是否支持mqtt:AT+MQTTUSERCFG=0,1,"ESP8266Client","myname","password",0,0,""不报错证明可用
参考文档:最佳实践-物模型数据交互
云平台地址:mqtts.heclouds.com
基本信息
| 参数 | 内容 |
|---|---|
| 产品ID | g3f7QpYaxS |
| 设备名 | produce1 |
| 设备密钥 | N05KSVhnSVFlS0pBTXhHRXF6MEFSY1lUQ2ZEcmlKSGU= |
token(密钥)计算
时间戳(Unix timestamp)转换工具 - 在线工具
| res | products/g3f7QpYaxS/devices/produce1 | g3f7QpYaxS为产品ID,produce1为设备名 |
|---|---|---|
| et | 2077888283 | unix时间戳,这个时间表示token有效期 |
| key | N05KSVhnSVFlS0pBTXhHRXF6MEFSY1lUQ2ZEcmlKSGU= | 设备密钥 |
计算后的token:
version=2018-10-31&res=products%2Fg3f7QpYaxS%2Fdevices%2Fproduce1&et=2077888283&method=md5&sign=F7tee0FzyMZtXjRDlQJi5A%3D%3D
MQTTx配置

创建属性
所谓的属性就是你想显示的信息

订阅和发布
g3f7QpYaxS替换成你自己的产品ID,produce1替换成你自己的产品名
订阅
$sys/g3f7QpYaxS/produce1/thing/property/post/reply
订阅该话题后,当你发送一些信息的时候,云平台会通过该话题向你发送一些调试信息,告诉你有没有发送成功,如果没有发送成功告诉你哪里出错了
发布
$sys/g3f7QpYaxS/produce1/thing/property/post
订阅该话题后,向该话题发送特定格式的消息,云平台自动检索相关属性(温度/湿度等)
下面的消息是将Power这个属性设置为12345,将temp的属性设置为233.6
{
"id": "123",
"version": "1.0",
"params": {
"Power": {
"value": "12345"
},
"temp": {
"value": 233.6
}
}
}AT指令
| 指令 | 内容 | 备注 |
|---|---|---|
AT | 测试 | |
AT+RST | 复位 | |
AT+CWMODE=1 | 设置wifi模式为客户端 | |
AT+CWJAP="aaa","aaaaaaaa" | 连接WIFI | aaa为wifi名,aaaaaaaa为密码 |
AT+CIFSR | 查看IP | |
AT+MQTTUSERCFG=0,1,"produce1","g3f7QpYaxS","version=2018-10-31&res=products%2Fg3f7QpYaxS%2Fdevices%2Fproduce1&et=2192672778&method=md5&sign=RaOhwIwBcWxOZ%2BzafBoVjw%3D%3D",0,0,"" | 设置MQTT参数 | |
AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1 | 连接OneNet | |
AT+MQTTSUB=0,"$sys/g3f7QpYaxS/produce1/thing/property/post/reply",0 | 订阅调试话题 | 用来返回调试信息 |
AT+MQTTPUB=0,"$sys/g3f7QpYaxS/produce1/thing/property/post","{\"id\":\"123\"\,\"params\":{\"temp\":{\"value\":111\}}}",0,0 | 发布信息 | 改变产品的设备的属性的值 |
AT+MQTTCLEAN=0 | 断开mqtt连接 |
stm32代码
void esp8266_run(){
uint32_t i=0;
uint8_t biaozhi=0;
char data[512];
OLED_Init();
HAL_UART_Receive_IT(&huart2,uart_buffer,1);
OLED_ShowString(0,0,"start",OLED_6X8);OLED_Update();
uart_print(&huart2,"AT+CWMODE=1\r\n");
OLED_ShowString(0,20,"1",OLED_6X8);OLED_Update();
HAL_Delay(500);
uart_print(&huart2,"AT+CWJAP=\"aaaa\",\"aaaaaaaa\"\r\n");
OLED_ShowString(0,20,"2",OLED_6X8);OLED_Update();
HAL_Delay(5000);
uart_print(&huart2,
"AT+MQTTUSERCFG=0,1,\"produce1\",\"g3f7QpYaxS\","
"\"version=2018-10-31&res=products%%2Fg3f7QpYaxS%%2Fdevices%%2Fproduce1&et=2192672778&method=md5&sign=RaOhwIwBcWxOZ%%2BzafBoVjw%%3D%%3D\",0,0,\"\"\r\n");
OLED_ShowString(0,20,"3",OLED_6X8);OLED_Update();
HAL_Delay(5000);
uart_print(&huart2,"AT+MQTTCONN=0,\"mqtts.heclouds.com\",1883,1\r\n");
OLED_ShowString(0,20,"4",OLED_6X8);OLED_Update();
HAL_Delay(5000);
uart_print(&huart2,"AT+MQTTSUB=0,\"%s\",0\r\n",subscribe_topic);
OLED_ShowString(0,20,"5",OLED_6X8);OLED_Update();
HAL_Delay(5000);
while(1){
if(uwTick/1000%2==0){
if(biaozhi==0){
biaozhi=1;
OLED_ShowNum(0,40,uwTick/1000,4,OLED_6X8);
i++;
uart_print(&huart2,"AT+MQTTPUB=0,\"$sys/g3f7QpYaxS/produce1/thing/property/post\",\"{\\\"id\\\":\\\"123\\\"\\,\\\"params\\\":{\\\"temp\\\":{\\\"value\\\":%d\\}}}\",0,0\r\n",i);
OLED_ShowString(0,20,"6",OLED_6X8);OLED_Update();
}
}else{
biaozhi=0;
}
//uart_process();
}
}