拿到中移物联网的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版本及资料。