BC26通过MQTT协议连接ONENET,AT流程
Posted qlexcel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BC26通过MQTT协议连接ONENET,AT流程相关的知识,希望对你有一定的参考价值。
onenet平台操作
首先登录平台,并进入控制台
选择多协议接入
点击添加产品,新建一个产品
名称、类别根据需要填写,接入协议选择MQTT
新建产品成功:
点击产品名字,进入产品设置页面,为产品添加设备
鉴权信息,为避免冲突,需要填入设备独一无二的ID,推荐填模组IMEI
新建设备成功:
模组端操作
①确认IP地址分配正常
命令为:
AT+CGPADDR=1
正常回应为:
+CGPADDR: 1,100.103.51.110
OK
如果BC26获得了IP地址说明卡和网络肯定没有问题,其他的就不用查询了。如果查询不到模块的IP,可以使用AT+CPIN?查询一下卡是否连接正常,确认模块是否检测到卡。卡一定要使用移动的物联网卡,使用电信卡只能连接电信的云平台。
使用AT+CSQ查询一下信号强度。
②设置MQTT版本
首先从onenet平台得知,ONENET的MQTT只支持V3.1.1,模块默认是3.1,因此必须要设置一下才能连接
命令为:
AT+QMTCFG="version",0,4 //MQTT版本设置,ONENET的MQTT只支持V3.1.1
OK
③连接onenet服务器端
查询BC26的MQTT手册得知,命令如下:
AT+QMTOPEN=<TCP_connectID>,<host_name>,<port>
TCP_connectID上面取值为0。onenet的MQTT服务器地址为183.230.40.39,端口为6002,因此命令如下:
AT+QMTOPEN=0,"183.230.40.39",6002
正常回应为:
OK
+QMTOPEN: 0,0
命令返回含义:
+QMTOPEN: <TCP_connectID>,<result>
<result> 整型。命令执行结果。
-1 打开网络失败
0 打开网络成功
本命令发出后,要在几秒内执行下面④命令,否则会返回:
+QMTSTAT: 0,1
含义为连接被服务器断开。此时重新执行本步即可。
④对接onenet物联网平台创建的设备
查询BC26的MQTT手册得知,命令如下:
AT+QMTCONN=<TCP_connectID>,<clientID>[,<username>[,<password>]]
clientID是设备ID,username是产品ID,password是鉴权信息
查看设备ID:
查看产品ID:
查看鉴权:
于是命令为:
AT+QMTCONN=0,"749342926","449128","866971030565266"
正常回应为:
OK
+QMTCONN: 0,0,0
命令返回含义:
+QMTCONN: <TCP_connectID>,<result>[,<ret_code>]
<result> 整型。命令执行结果。
0 数据包发送成功且从服务器接收到 ACK
1 数据包重传
2 数据包发送失败
<ret_code> 整型。连接返回码。
0 接受连接
1 拒绝连接:不支持的协议版本
2 拒绝连接:拒绝标识符
3 拒绝连接:服务器不可用
4 拒绝连接:用户名或密码错误
5 拒绝连接:未授权
此时可以看到onenet上设备已在线:
⑤订阅主题
查询BC26的MQTT手册得知,命令如下:
AT+QMTSUB=<TCP_connectID>,<msgID>,<topic1>,<qos1>[,<topic2>,<qos2>…]
<msgID> 整型。数据包的消息标识符。范围: 1~65535。
<topic> 字符串类型。客户端想要订阅或者退订的主题。最大长度: 255 字节。
<qos> 整型。客户端打算发布消息的 QoS 等级。
0 最多发送一次
1 至少发送一次
2 只发送一次
我们这里订阅topic为topic/example的信息,具体的topic定义可以去看这里,QoS 等级选择2,因此命令为:
AT+QMTSUB=0,1,"topic/example",2
正常回应为:
OK
+QMTSUB: 0,1,0,2
命令返回含义:
+QMTSUB: <TCP_connectID>,<msgID>,<result>[,<value>]
<msgID> 整型。数据包的消息标识符。范围: 1~65535。
<result> 整型。命令执行结果。
0 数据包发送成功且从服务器接收到 ACK
1 数据包重传
2 数据包发送失败
<value> 若<result>=0,则为已确认 QoS 等级的矢量;参数取值 128 表示服务器拒绝订阅;
若<result>=1,则表示数据包重传次数;
若<result>=2,则不显示。
再订阅一个主题:
AT+QMTSUB=0,1,"topic/pub",0
OK
+QMTSUB: 0,1,0,0
⑥发布消息
查询BC26的MQTT手册得知,命令如下:
AT+QMTPUB=<TCP_connectID>,<msgID>,<qos>,<retain>,<topic>,<msg>
<msgID> 整型。数据包的消息标识符。 范围: 0~65535。只有当<qos>=0 时,该参数值为 0。
<qos> 整型。客户端想要发布消息的 QoS 等级。
0 最多发送一次
1 最少发送一次
2 只发送一次
<retain> 整型。消息发送到当前订阅者后,服务器是否保存该消息。
0 消息发送到当前订阅者后,服务器不保存消息。
1 消息发送到当前订阅者后,服务器保存消息。
<topic> 字符串类型。待发布主题。 最大长度: 255 字节。
<msg> 字符串类型。待发布消息。 最大长度: 700 字节; 若是在数据模式,最大长度: 1024字节。
命令为:
AT+QMTPUB=0,0,0,0,"topic/pub","hello MQTT."
正常回应为:
OK
+QMTPUB: 0,0,0
命令返回含义:
+QMTPUB: <TCP_connectID>,<msgID>,<result>[,<value>]
<msgID> 整型。数据包的消息标识符。 范围: 0~65535。只有当<qos>=0 时,该参数值为 0。
<result> 整型。命令执行结果。
0 数据包发送成功且从服务器接收 ACK(当<qos>=0 时,发布的消息无需 ACK)
1 数据包重传
2 数据包发送失败
<value> 若<result>=1,则表示数据包重传次数;
若<result>=0 或 2,则不显示。
因为前面订阅了"topic/pub"主题的消息,因此模组自己也会收到消息推送:
+QMTRECV: 0,0,"topic/pub","hello MQTT."
⑦退订主题
查询BC26的MQTT手册得知,命令如下:
AT+QMTUNS=<TCP_connectID>,<msgID>,<topic1>[,<topic2>…]
<TCP_connectID> 整型。 MQTT Socket 标识符。 范围: 0~5。
<msgID> 整型。数据包的信息标识符。 范围: 1~65535。
<topic> 字符串类型。客户端想要订阅或者退订的主题;最大长度: 255 字节。
因此命令为:
AT+QMTUNS=0,2,"topic/example"
正常回应为:
OK
+QMTUNS: 0,2,0
命令返回含义:
+QMTUNS: <TCP_connectID>,<msgID>,<result>
<TCP_connectID> 整型。 MQTT Socket 标识符。 范围: 0~5。
<msgID> 整型。数据包的信息标识符。 范围: 1~65535。
<result> 整型。命令执行结果。
0 数据包发送成功且从服务器接收到 ACK
1 数据包重传
2 数据包发送失败
⑧设备从服务器断开
查询BC26的MQTT手册得知,命令如下:
AT+QMTDISC=<TCP_connectID>
因此命令为:
AT+QMTDISC=0
正常回应为:
OK
+QMTDISC: 0,0
命令返回含义:
+QMTDISC: <TCP_connectID>,<result>
<TCP_connectID> 整型。 MQTT Socket 标识符。范围: 0~5。
<result> 整型。命令执行结果。
-1 断开连接失败
0 断开连接成功
此时可以看到onenet上设备已离线:
⑨关闭设备网络
查询BC26的MQTT手册得知,命令如下:
AT+QMTCLOSE=<TCP_connectID>
因此命令为:
AT+QMTCLOSE=0
正常回应为:
OK
+QMTCLOSE: 0,0
命令返回含义:
+QMTCLOSE: <TCP_connectID>,<result>
<TCP_connectID> 整型。 MQTT Socket 标识符。范围: 0~5。
<result> 整型。命令执行结果。
-1 关闭网络失败
0 关闭网络成功
此命令和⑧好像只能执行一个,执行了一个再执行另一个,就会返回error。
以上是关于BC26通过MQTT协议连接ONENET,AT流程的主要内容,如果未能解决你的问题,请参考以下文章
使用ML302模组通过MQTT协议接入OneNet平台与mqtt Broker
如何使用4G模块通过MQTT协议传输温湿度数据到onenet
玩转 ESP32 + Arduino (十二) 通过MQTT协议上传数据至OneNet云平台