4G Cat.1模组ML302使用MQTT协议接入OneNet平台

在这里插入图片描述

拿到中移物联网的4G通用开发板许久了,上面搭载的是中移最新推出的LTE Cat.1模组ML302,本文通过AT命令操作ML302模组接入OneNet平台,使用MQTT协议进行数据收发,将整个流程摸索测试一遍,为后续程序开发做准备。

1. ML302及开发板硬件介绍

ML302是LTE Cat.1模组,内部集成了丰富的网络协议和行业标准接口及功能,外设接口也蛮丰富,具体的软硬件资料可以从官网下载

4G通用开发板上的功能模块如下图所示:

在这里插入图片描述

在开发板上电之前,需要使用跳线帽短接一下相关的插针进行配置:

在这里插入图片描述

将J1、J2处排针短接,J3根据使用的USB转串口模块电平进行选择。串口模块连接J4的UART0_TX、UART0_RX和GND,安装主天线,安装4G SIM卡,连接Micro USB接口给开发板供电。所有配置如下图所示:

在这里插入图片描述

2.模组上电初始化流程

打开串口助手,选择对应端口号,串口配置115200-N-8-1,打开板载电源开关,会看到串口调试助手有数据返回:

在这里插入图片描述

ML302开机默认手动PDP激活方式,上电初始化流程如下图所示:

在这里插入图片描述

更多AT指令参考官方资料。

在这里插入图片描述

当模块初始化完成,就可以配置TCP/UDP跟服务器进行通讯了。模组内部集成了AT扩展指令集,支持MQTT协议通讯,包括MQTT参数设置、MQTT连接、订阅、发布、消息接收等。

在这里插入图片描述

具体请参考「ML302_MQTT用户手册」。

3. OneNet平台添加设备

登录注册好的OneNet平台,进入开发者中心,点击全部产品,选择基础服务中的MQTT物联网套件:

在这里插入图片描述

点击添加产品,根据实际填写信息,设备接入协议选择MQTTS:

在这里插入图片描述

接着点击添加设备,给设备取个名字:

在这里插入图片描述

现在平台设备已经创建好了,后面就可以配置模组上线,进行数据收发了。不过在此之前,需要下载token生成工具,根据产品id等信息生成token,这在后续设备进行MQTT配置时需要用到。

开发文档中下载软件到PC机,根据实际填写对应参数,然后点击Generate生成token:

在这里插入图片描述

产品ID可以在平台的产品概况中找到,access_key需要点击查看,然后平台会给注册手机发送验证码,填写验证码后可获取到key。这里的离线时间戳,表示设备经过多长时间会被平台强制下线。这里通过在线转换工具设置一年时间:

在这里插入图片描述

4.MQTT数据收发

1. 配置MQTT参数

在这里插入图片描述

平台的MQTT服务器IP为183.230.40.96,端口号为1883,id字段填写设备名称ML302,用户名和密码分别是产品id和前面根据产品id生成的token,如下为测试时发送的数据,返回OK,配置信息已经存储到模组:

AT+MQTTCFG="183.230.40.96",1883,"ML302",60,"364992","version=2018-10-31&res=products%2F364992&et=1628214414&method=md5&sign=eQlNK67QznJA0Grs5HhQ5A%3D%3D",1,"",0

在这里插入图片描述

2.连接服务器

在这里插入图片描述

模组返回"+MQTTOPEN:OK",表示连接成功,这时候平台显示设备在线状态。

在这里插入图片描述

我们可以看到,模组每间隔1分钟会收到心跳包,这里跟前面配置的「keepAlive」字段一致。

3.订阅主题

在这里插入图片描述

OneNet平台定义了系统topic簇,包括数据点、设备命令、设备镜像,都以“$sys/{pid}/{device-name}”开头,其中参数为产品id和设备名称。

通过「$sys/364992/ML302/#」来订阅所有系统topic,后续就可以接收系统所有topic相关信息:

在这里插入图片描述

4. 发布消息到平台

在这里插入图片描述

平台定义的数据点topic如下所示:

在这里插入图片描述

其中数据内容仅支持json格式,并且规定了相关参数名称,具体可查阅开发文档

如下为测试时发送的数据:

AT+MQTTPUB="$sys/364992/ML302/dp/post/json",1,0,0,"{\"id\":123,\"dp\":{\"temperatrue\":[{\"v\":28.5}]}}"

在这里插入图片描述

在平台的设备列表中,点击设备后面的数据流,可看到数据已经上传,打开实时刷新,每发送一次,数据都会自动显示出来。

在这里插入图片描述

5. 平台下发数据

点击设备后面的更多操作,然后点击下发命令:

在这里插入图片描述

填写命令内容及超时时间,点击发送,这时候模组会收到平台发送的消息,由于模组没有应答,超时后平台显示超时错误:

在这里插入图片描述

平台定义的设备命令相关topic如下:

在这里插入图片描述

设备在回复命令应答时,需要将平台下发的cmid字段作为应答消息的一部分发回平台。这里将超时时间设置为最长的30秒,以便有时间拷贝出cmid字段进行发送:

在这里插入图片描述

设备在应答中可以携带数据,平台可以收到,如上图中的“test”。

6. 断开连接

虽然使用MQTT必然是想保持长连接的,但也少不了主动断开连接和销毁参数配置的操作。

在这里插入图片描述

在这里插入图片描述

ML302接入OneNet平台通过MQTT收发数据的整个流程还是挺顺畅的,后面可以通过MCU进行程序控制来完成整个通讯流程,当然更期待ML302的OpenCPU版本及资料。


关注公众号「TonyCode」,后台回复“提高”,获取文中代码。

个人博客

回复「1024」获取1000G学习资料

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将ESP32-C3通过MQTT协议接入OneNet平台,您需要完成以下步骤: 1. 创建OneNet账号并登录。 2. 创建设备,为设备选择MQTT协议,获取设备ID和API Key。 3. 在ESP32-C3上安装MQTT库,例如PubSubClient库。 4. 编写ESP32-C3的代码,包括连接WiFi和MQTT服务器、发布数据到OneNet平台等。 以下是一个简单的例子,演示了如何使用ESP32-C3通过MQTT协议连接到OneNet平台: ```c++ #include <WiFi.h> #include <PubSubClient.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqtt_server = "mqtt.heclouds.com"; const int mqtt_port = 6002; const char* mqtt_user = "your_DEVICE_ID"; const char* mqtt_password = "your_API_KEY"; const char* topic = "/topic"; WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); while (!client.connected()) { if (client.connect(mqtt_user, mqtt_password)) { Serial.println("Connected to MQTT broker"); } else { Serial.print("Failed to connect to MQTT broker, rc="); Serial.print(client.state()); Serial.println(" retrying..."); delay(5000); } } client.subscribe(topic); } void loop() { if (!client.connected()) { Serial.println("Reconnecting to MQTT broker..."); while (!client.connected()) { if (client.connect(mqtt_user, mqtt_password)) { Serial.println("Connected to MQTT broker"); client.subscribe(topic); } else { Serial.print("Failed to connect to MQTT broker, rc="); Serial.print(client.state()); Serial.println(" retrying..."); delay(5000); } } } client.loop(); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } ``` 在这个例子中,我们使用WiFi连接到互联网,使用PubSubClient库连接到OneNetMQTT服务器,然后订阅主题,并在回调函数中打印收到的消息。您可以根据您的需求修改代码,例如修改主题,发布消息等。 需要注意的是,OneNetMQTT服务器需要使用TLS/SSL加密,因此您需要使用MQTT库的TLS版本,例如PubSubClientSecure库。同时,OneNetMQTT服务器需要使用特定的端口6002,而不是标准的MQTT端口1883。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值