2025模拟设备和单片机(移远EC800M模块)用MQTT协议接入ONENET记录
一、所需的网址和工具链接
1.OneNet平台地址
2.MQTTX软件地址
3.OneNet平台文帮助文档地址
二、ONENET添加产品操作
1.用账号密码登录ONENET(没有的去注册后再进行操作),找到控制台图标,前往控制台。


2.找到产品开发-创建产品,进行添加产品操作。

3.按如下操作。

4.创建好了选择产品开发。

5.创建一个自定义功能点,填入如下参数。

6.回到设备管理,进行添加设备。

7.进入到详情,复制设备密钥和产品ID,进行后续操作。

三、MQTT设备连接
1.MQTT三要素

2.下载工具生成Password https://open.iot.10086.cn/doc/iot_platform/images/tools/token.exe ,根据设备密钥(Key)与产品ID,生成Password,其中method按需求选择,这里选sha1。

得到如下信息:
IP地址:mqtts.heclouds.com:1883 , Clientid:123456 , Username:Rx79GUa7N5
et:1892482169
Password:version=2018-10-31&res=products%2FRx79GUa7N5%2Fdevices%2F123456&et=1892482169&method=sha1&sign=WfyEphULqYn4s9KvYDq%2BBE2rwQc%3D
四、MQTT.x工具模拟接入数据
1.免费下载工具链接:MQTTX 下载,参数填入下面这个界面,点击Connect。

2.设备显示在线。

五、模拟设备上传和获取ONENET平台数据
1.订阅和发布命令可以参考下面链接文档,或者进入平台按下图操作步骤查看
oneNet平台订阅服务详细命令介绍文档链接

2.我们要用到的主题。

3.上报报文内容格式。

{"id": "1","version": "1.0","params": {"TEMP": {"value": 21.9,"time": 1762495862000}}
}
4.MQTTX上报操作设置。

填入如下内容发送,收到响应Code:200,说明上报数据成功。

查看后台数据是否更新。

5.MQTTX获取数据操作设置。
获取报文格式:

后台设置:

MQTTX工具添加订阅发布消息:

成功获取:

六、单片机(EC800M)上传和获取ONENET平台数据
附部分主要功能代码:
//MQTT初始化 clientId:设备名称 username:平台分配的产品ID password:填写经过key计算的token
void MQTT_Init(void)
{SendATCmd("AT+QMTCFG=\"version\",0,4\r\n");//设备版本DelayMs(500);SendATCmd("AT+QMTOPEN=0,\"mqtts.heclouds.com\",1883\r\n");//连接MQTT服务器 DelayMs(500);strx=strstr((const char*)RecDate,(const char*)"+QMTOPEN: 0,0");//看下返回状态while(strx==NULL){strx=strstr((const char*)RecDate,(const char*)"+QMTOPEN: 0,0");//确认返回值正确}SendATCmd("AT+QMTCONN=0,\"123456\",\"Rx79GUa7N5\",\"version=2018-10-31&res=products%2FRx79GUa7N5%2Fdevices%2F123456&et=1892482169&method=sha1&sign=WfyEphULqYn4s9KvYDq%2BBE2rwQc%3D\"\r\n");//去登录MQTT服务器,设备ID,产品ID,密码.用户根据实际需要进行更改DelayMs(500);strx=strstr((const char*)RecDate,(const char*)"+QMTCONN: 0,0,0");//看下返回状态while(strx==NULL){strx=strstr((const char*)RecDate,(const char*)"+QMTCONN: 0,0,0");//看下返回状态}}//订阅主题
void MQTT_QMTSUB(void)
{SendATCmd("AT+QMTSUB=0,1,\"$sys/Rx79GUa7N5/123456/thing/property/post/reply\",0\r\n");//直连设备上报属性响应DelayMs(500);SendATCmd("AT+QMTSUB=0,2,\"$sys/Rx79GUa7N5/123456/thing/property/desired/get/reply\",0\r\n");//直连设备获取期望值响应DelayMs(500);
}//上传主题数据
void MQTT_PostData()
{char cmd[] ="AT+QMTPUBEX=0,0,0,0,\"$sys/Rx79GUa7N5/123456/thing/property/post\",%d";int data_len = 0;char str[] ="\"{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"TEMP\":{\"value\":21.9,\"time\":1762495862000}}}\"";data_len = strlen(str);printf("length:%d\r\n",data_len);sprintf(cmd,cmd,data_len);
// SendATCmd("AT+QMTPUBEX=0,0,0,0,\"$sys/Rx79GUa7N5/123456/thing/property/post\",82\r\n");DelayMs(500);SendATCmd("{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"TEMP\":{\"value\":21.9,\"time\":1762495862000}}}\r\n");DelayMs(500);
}//获取数据
void MQTT_GetData()
{char cmd[] ="AT+QMTPUBEX=0,0,0,0,\"$sys/Rx79GUa7N5/123456/thing/property/desired/get\",%d\r\n";uint8_t data_len = 0;char str[] ="\"{\"id\":\"2\",\"version\":\"1.0\",\"params\":[\"TEMP\"]}\"";data_len = strlen(str);printf("length:%d\r\n",data_len);sprintf(cmd,cmd,data_len);// SendATCmd("AT+QMTPUBEX=0,0,0,0,\"$sys/Rx79GUa7N5/123456/thing/property/desired/get\",46\r\n");SendATCmd(cmd);DelayMs(500);SendATCmd("{\"id\":\"2\",\"version\":\"1.0\",\"params\":[\"TEMP\"]}\r\n");}
串口打印日志:

