基于STM32的ML307R连接Onenet平台

若该文为原创文章,转载请注明原文出处。

使用银尔达的ML307R,测试连接Onenet,记录测试过程。程序移植和前面基本类型。这里使用串口工具测试。

一、Onenet平台创建

Onenet平台需要以下几个参数:

复制代码
//MQTT
char tcp_mqtt_addr[100]="mqtts.heclouds.com";  // 地址
char mqtt_client_id[100]="YSLh7n9lFw";
char mqtt_user_name[100] = "device_001";//用户名 
char mqtt_password[200] = "version=2018-10-31&res=products%2FYSLh7n9lFw%2Fdevices%2Fdevice_001&et=1797583777&method=md5&sign=EaycYPu68M52Qu7BYJdTkQ%3D%3D";//密码 

char mqtt_keepalive = 60;//心跳包时间 

char mqtt_publish_model_topic[100]="$sys/YSLh7n9lFw/device_001/thing/property/post";//存储发布的主题
char mqtt_subscribe_model_topic[100]="$sys/YSLh7n9lFw/device_001/thing/property/set";//存储订阅的主题

地址,端口(1883),ID(产品ID),用户名,Token, 订阅主题,发布主题。

二、连接流程

参考链接地址:

移动AT固件MQTT测试实例

通过MQTT.fx与ML307A上传数据到OneNet物联网开放平台 by xinlong - 知乎

中移4G模组ML307C以MQTT协议接入新版OneNET完整流程 - xuan0101 - 博客园

1、MQTT控制流程

2、测试

1、测试软件

使用的工具是银尔达的串口测试工具

2、AT指令

下面过程严格按顺序执行

1、AT

2、ATE0

3、AT+ICCID

4、AT+CSQ

5、AT+CGATT?

必须为1,附着网络,如果不用1检查卡或模块或信号

6、AT+MIPCALL?

7、AT+MQTTCFG="clean",0,1

连接到网络后必须要发送AT+MQTTCFG="clean",0,1(onenet要求clean参数必须是1)

8、连接MQTT

命令原型:

复制代码
AT+MQTTCONN=<connect_id>,<host>[,<port>[,<clientID>,<user>,<passwd>]]

命令配置:

复制代码
AT+MQTTCONN=0,"mqtts.heclouds.com",1883,"设备名称","产品名称","生成的token"

第一个参数是connect_id,范围是0~5,使用其中一个即可,这里使用0。

连接结果:连接成功返回

复制代码
+MQTTURC: "conn",0,0

9、订阅

阅话题

命令原型:

复制代码
AT+MQTTSUB=<connect_id>,<topic>,<qos>[,<topic1>,<qos1>..]

命令配置(下面这个命令可一键订阅属性类话题,OneNET平台有限制,每个设备最大只能订阅10个话题,这些限制OneNET平台文档中心均有说明):

复制代码
AT+MQTTSUB=0,"$sys/产品名称/设备名称/thing/property/set",0

10、发布

命令原型:

复制代码
AT+MQTTPUB=<connect_id>,<topic>,<qos>,<retain>,<dup>,<msg_len>[,<message>]

这里需要注意的是msg_len,消息长度,需要实际长度或是填0

JSON数据格式如下:

复制代码
{"id":"123","version":"1.0","params":{"Iref":{"value":350}}}
遇到的问题:

上传数据不成功,发现长度不对,后面改成0就好了。

附完整AT指令,测试请修改成自己的Onenet服务器。

复制代码
[2026-03-23 09:23:36.309 T] AT

[2026-03-23 09:23:36.376 R] 
+MATREADY

OK


[2026-03-23 09:24:02.302 T] ATE0

[2026-03-23 09:24:02.358 R] 
OK


[2026-03-23 09:24:25.630 T] AT+ICCID

[2026-03-23 09:24:25.706 R] 
+ICCID: 898602F61324F5013007

OK  

[2026-03-23 09:24:41.361 T] AT+CSQ

[2026-03-23 09:24:41.419 R] 
+CSQ: 31,99

OK

[2026-03-23 09:24:59.827 T] AT+CGATT?

[2026-03-23 09:24:59.884 R] 
+CGATT: 1

OK

[2026-03-23 09:25:25.140 T] AT+MIPCALL?

[2026-03-23 09:25:25.209 R] 
+MIPCALL: 1,1,"10.156.45.195","2409:8934:4CF2:F558::1"

OK


[2026-03-23 09:25:55.547 T] AT+MQTTCFG="clean",0,1

[2026-03-23 09:25:55.613 R] 
OK


[2026-03-23 09:33:40.123 T] AT+MQTTCONN=0,"mqtts.heclouds.com",1883,"device_001","BjX9g40kj7","version=2018-10-31&res=products%2FBjX9g40kj7%2Fdevices%2Fdevice_001&et=1805175384&method=md5&sign=adE0CVqIXSECGG8VEqOJyg%3D%3D"

[2026-03-23 09:33:40.209 R] 
OK

[2026-03-23 09:33:40.735 R] 
+MQTTURC: "conn",0,0


订阅话题
AT+MQTTSUB=0,"$sys/BjX9g40kj7/device_001/thing/property/set",0

[2026-03-23 09:34:59.698 T] AT+MQTTSUB=0,"$sys/BjX9g40kj7/device_001/thing/property/set",0

[2026-03-23 09:34:59.780 R] 
+MQTTSUB: 0,26932

OK

[2026-03-23 09:35:00.014 R] 
+MQTTURC: "suback",0,26932,0


AT+MQTTPUB=0,"$sys/BjX9g40kj7/device_001/thing/property/post",0,0,0,0,"{"id":"123","version":"1.0","params":{"B":{"value":3}}}"





// 接收到的数据
[2026-03-23 09:45:46.467 R] 
+MQTTURC: "publish",0,0,"$sys/BjX9g40kj7/device_001/thing/property/set",45,45,{"id":"1","version":"1.0","params":{"A":123}}

如有侵权,或需要完整代码,请及时联系博主。

相关推荐
KeyAction666617 小时前
从西班牙高铁追尾看安全系统设计:当违规指令成为输入,防护逻辑如何兜底
运维·服务器·安全
biu_biubiu17 小时前
我开源了 Codebook
前端·vue.js
下山17 小时前
怎么把带自研插件的 DeepSeek Harness 部署到云服务器
前端
彭亚川Allen17 小时前
985 在职研究生到底怎么样?是不是水硕?是不是.....?
前端·后端·程序员
YufJi17 小时前
两棵树,两个线程:一个小程序引擎的架构拆解
前端
super_Omni17 小时前
Chrome 插件入驻实战:从 Manifest V3 到过审上架的完整路径
大数据·前端·chrome
腾讯数据架构师18 小时前
任务跑完怎么直接出图表?CubeStudio 任务可视化 ECharts 数据格式实操(CSV/JSON + metric.json,11 种图表一键渲染)
前端·json·echarts·数据可视化
骑着蜗牛撵大象32718 小时前
手写一个 HTTP 服务器:从 socket 到 epoll,Linux 上到底怎么把请求变成响应
linux·服务器·网络·http·epoll·socket编程·并发模型
小小小米粒18 小时前
不是在构造方法「之前」修饰 Bean、注入;是构造方法跑完之后,才做属性注入,再跑 @PostConstruct。
前端
小李科技18 小时前
【性能优化】事件委托:目标定位与 React/Vue 实战
前端·vue.js·react.js·面试·性能优化·前端框架