我们之前了解如何连接OneNET平台的基本操作步骤与流程,也使用软件进行模拟一个设备连接OneNET平台,现在使用AT指令将BC26连接至OneNET平台进行各项操作
在OneNET添加一个BC26设备
我们首先在OneNET平台下添加一个BC26的设备,如下图所示:
命令介绍
连接OneNET平台需要用到AT指令。
AT+QMTCFG
该命令用来配置 MQTT 的可选参数
语法:
AT+QMTCFG="version",<tcpconnectID>[,<version>]
参数说明:
- <tcpconnectID>:MQTT Socket 服务编号,范围:0-5
- <version>:MQTT版本协议,3 为MQTTv.3.1;4 为MQTTv3.1.1
注意:BC26支持MQTTv3.1和v3.1.1这两个版本协议,而OneNET平台MQTT只支持v3.1.1版本协议,BC26MQTT协议版本默认是v3.1,必须使用命令设置为v3.1.1版本协议才能连接OneNET平台
AT+QMTOPEN
该命令用来为 MQTT 客户端打开网络。
语法:
AT+QMTOPEN=<tcpconnectID>,"<host_name>",<port>
参数说明:
- <tcpconnectID>:MQTT Socket 服务编号,范围:0-5
- <host_name>:服务器IP地址或域名,最大字节:100
- <port>:服务器端口,范围:1-65535
AT+QMTCONN
该命令用来为 MQTT 客户端连接服务器。
语法:
AT+QMTCONN=<tcpconnectID>,"<clientID>"[,"<username>"[,"<password>"]]
参数说明:
- <tcpconnectID>:MQTT Socket 服务编号,范围:0-5
- <clientID>:该标志位表示一个设备ID
- <username>:该标志位表示一个用户名
- <password>:该标志位表示一个密码
AT+QMTDISC
该命令用来为 MQTT 客户端断开服务器。
AT+QMTDISC=<tcpconnectID>
参数说明:
- <tcpconnectID>:MQTT Socket 服务编号,范围:0-5
使用AT指令登录OneNET平台
①设置MQTT版本协议
命令为:
AT+QMTCFG="version",0,4 //MQTT版本协议,OneNET只支持V3.1.1
正常返回:
OK
②打开MQTT客户端网络
命令为:
AT+QMTOPEN=0,"183.230.40.39",6002
正常返回:
OK
+QMTOPEN: 0,0
注意:该命令发出后,要在几秒内执行第③步骤,否则服务器可能因超时而断开连接
OneNET服务器地址与端口号查找:OneNETMQTT官方服务器地址与端口
③连接MQTT服务器
命令为:
AT+QMTCONN=0,"969091782","534682","460049167418007"
正常返回
OK
+QMTCONN: 0,0,0
说明:
969091782代表设备ID
534682代表产品ID
460049167418007代表鉴权信息
查看设备ID:
查看产品ID:
查看鉴权信息:
然后在OneNET平台查看设备状态,可以看到设备处于在线状态
订阅与发布消息
首先介绍AT指令
AT+QMTSUB
该命令用于订阅消息
语法:
AT+QMTSUB=<tcpconnectID>,<msgID>,"<topic1>",<qos1>[,"<topic2>",<qos2>…]
参数说明:
- <tcpconnectID>:MQTT Socket 服务编号,范围:0-5
- <msgID>:该标志位表示一个数据包,范围:1-65535
- <topic>:订阅或退订的主题消息.最大长度字节:255
- <qos>:发送消息级别,0 为最多发送一次;1 为至少发送一次;2 为之发送一次
AT+QMTPUB
该命令用于发布消息
语法:
AT+QMTPUB=<tcpconnectID>,<msgID>,<qos>,<retain>,"<topic>","<msg>"
参数说明:
- <tcpconnectID>:MQTT Socket 服务编号,范围:0-5
- <msgID>:该标志位表示一个数据包,范围:0-65535,只有当<qos>=0时.该参数值为0
- <qos>:发送消息级别,0 为最多发送一次;1 为至少发送一次;2 为之发送一次
- <retain>:发布消息后是否保存消息,0 为不保存;1 为保存
- <topic>:待发布消息主题.最大长度字节:255
- <msg>:待发布的消息,最大长度字节:700,在数据模式下则为1024字节
AT+QMTUNS
该命令用于退订消息
语法:
AT+QMTUNS=<tcpconnectID>,<msgID>,"<topic1>"[,"<topic2>"…]
参数说明:
- <tcpconnectID>:MQTT Socket 服务编号,范围:0-5
- <msgID>:该标志位表示一个数据包,范围:1-65535
- <topic>:订阅或退订的主题消息.最大长度字节:255
订阅与发布
④订阅消息
命令为:
AT+QMTSUB=0,1,"topic/exp",1 //订阅消息
正常返回
OK
+QMTSUB: 0,1,0,1 //如果服务器收到订阅消息,会上报URC
⑤发布消息
命令为:
AT+QMTPUB=0,0,0,0,"topic/exp","Hello MQTT" //发布消息
正常返回
OK
+QMTPUB: 0,0,0
+QMTRECV: 0,0,"topic/exp","Hello MQTT" //收到之前订阅的消息
⑥断开MQTT服务器连接
命令为:
AT+QMTDISC=0 //断开连接
正常返回
OK
+QMTDISC: 0,0
大致整体流程,如下图所示
>>>>>>>>>> AT+QMTCFG="version",0,4 //设置MQTT版本协议
AT+QMTCFG="version",0,4
OK
>>>>>>>>>> AT+QMTOPEN=0,"183.230.40.39",6002 //打开MQTT网络
AT+QMTOPEN=0,"183.230.40.39",6002
OK
+QMTOPEN: 0,0
>>>>>>>>>> AT+QMTCONN=0,"969091782","534682","460049167418007" //连接MQTT服务器
AT+QMTCONN=0,"969091782","534682","460049167418007"
OK
+QMTCONN: 0,0,0
>>>>>>>>>> AT+QMTSUB=0,1,"topic/exp",1 //订阅消息
AT+QMTSUB=0,1,"topic/exp",1
OK
+QMTSUB: 0,1,0,1
>>>>>>>>>> AT+QMTPUB=0,0,0,0,"topic/exp","Hello MQTT" //发布消息
AT+QMTPUB=0,0,0,0,"topic/exp","Hello MQTT"
OK
+QMTPUB: 0,0,0
+QMTRECV: 0,0,"topic/exp","Hello MQTT" //收到订阅消息
>>>>>>>>>> AT+QMTDISC=0 //断开MQTT服务器连接
AT+QMTDISC=0
OK
+QMTDISC: 0,0
OneNET下发命令
OneNET平台支持下发命令,能够实现远程操控IOT设备,下发命令需要订阅才能接收到,接下来我们尝试使用BC26开发板实现上述功能
启动开发板,输入以下命令:
>>>>>>>>>> AT+QMTCFG="version",0,4
AT+QMTCFG="version",0,4
OK
+IP: 100.118.22.175
>>>>>>>>>> AT+QMTOPEN=0,"183.230.40.39",6002
AT+QMTOPEN=0,"183.230.40.39",6002
OK
+QMTOPEN: 0,0
>>>>>>>>>> AT+QMTCONN=0,"969091782","534682","460049167418007"
AT+QMTCONN=0,"969091782","534682","460049167418007"
OK
+QMTCONN: 0,0,0
>>>>>>>>>> AT+QMTSUB=0,1,"topic/exp",1
AT+QMTSUB=0,1,"topic/exp",1
OK
+QMTSUB: 0,1,0,1
按如下图所示,尝试给BC26_001设备上下发命令
这时我们观察串口调试助手数据,可以看到收到以下数据:
+QMTRECV: 0,0,"$creq/170ce8d7-0d18-55da-a837-e965e674780f","123456"
+QMTRECV: 0,0,"$creq/2d0cc48a-d0d5-5751-9272-aa800a2b13bd","Hello BC26"
表示开发板接收到平台下发的数据。