准备
串口助手:Xcom
通过百度网盘分享的文件:XCOMckts.zip
链接:https://pan.baidu.com/s/1mxyF6A6m1D5Gs6LEAGJ0vg
提取码:29ak
参考文档:
OneNET - 中国移动物联网开放平台 (10086.cn)
1.查询MQTTSTAT
使用串口助手发送AT+MQTTSTAT?查询MQTT连接状态,返回值为1表示onenet的连接正常。
接下来便可以进行正常进行onenet设备的订阅和命令的上传下发。
2.订阅主题
首先我们要知道系统命令topic
订阅topic
通过参考官方文档,订阅topic的命名规则为$sys/{pid}/{device-name}/dp/post/json/+
因此我们要知道自己的{pid}和 {device-name},这在onenet中可查找到第一个为产品ID,第二个为设备名称/ID.
通过替换便可得到自己的订阅topic。
发布topic
同理我们也知道了自己的发布topic.大家一定要区分开来订阅topic和发布topic。虽然很像,但还是有些许不同。
发布topic:$sys/{pid}/{device-name}/dp/post/json
在知道了订阅topic和发布topic之后我们就能做到数据的上传。
首先使用AT+MQTTSUB="$sys/E33g8o33s3/123456789/dp/post/json/+",2进行订阅。
然后再使用AT+MQTTPUB进行数据的发送。(注意,发送数据时上传的json数据要在”前加\进行转义。因为我们使用的是数据流模型,所以可以直接上传数据,不需要创建模型。)
大家可以参考我发送的数据,
此时onenet已经接收到了数据。
系统命令topic
要想获得onenet的下发命令,首先要订阅系统命令topic,
首先我们先看系统命令topic的数据格式$sys/{pid}/{device-name}/cmd/request/+
同理我们可得系统命令topic
通过AT+MQTTSUB="$sys/E33g8o33s3/123456789/cmd/request/+",2 来订阅系统命令。
此时我们在onenet服务器上下发指令
然后我们本地客户端便可以收到下发的命令了。
注意:
在使用AT指令发送信息时,一定要注意字符串中的\%“等特殊符号,在发送这些字符时需要进行转义。例如发送”\“要写为”\\“,发送”%“要写为”%%“,发送” ” “要写为“ \" ”。
QoS 等级(0-2):
-
QoS 0(至多一次):
- 消息可能会丢失,也可能会重复传输。消息传递的可靠性最低。发送方不会等待接收方的确认,也不会重发消息。
-
QoS 1(至少一次):
- 消息确保至少被送达一次,但可能会重复传输。发送方会等待接收方的确认,如果未收到确认,则会重发消息。
-
QoS 2(只有一次):
- 消息确保只送达一次,并且不会重复。QoS 2 是最严格的质量保证等级,通过四步握手过程确保消息的唯一性。
常见MQTT相关AT指令
-
设置MQTT连接参数
AT+MQTTCFG=<cfgID>,<enable>,<username>,<password>,<clientID>
<cfgID>
: 配置ID(通常是0或1)<enable>
: 启用(1)或禁用(0)<username>
: 用户名<password>
: 密码<clientID>
: 客户端ID
-
连接到MQTT服务器
AT+MQTTOPEN=<usrFlag>,<pwdFlag>,<willFlag>,<willReta in>,<willQos>,<will-topic>,<will-mesg>
- <usrFlag> 是否启用用户名(0-1)。
- <pwdFlag> 是否启用用户密码(0-1)。
- <willFlag> 是否启用 will(0-1)。
- <willRetain> 服务器是否保存 will 消息(0-1)。
- <willQos> will 消息的 QoS 等级(0-2)。
- <will-topic> 连接异常终止时发送消息到相应 topic(字符串,最大长度 512)。
- <will-mesg> 连接异常终止时发送的消息(字符串,最大长度 512)
查询 MQTT 状态
AT+MQTTSTAT?
0 未连接
1 已连接
2 socket 正在连接。
3 socket 已连接,发送 connect 请求包。
4 connect 请求包发送成功,等待 ACK
-
订阅主题.
AT+MQTTSUB=<topic>,<qos>
<topic>
: 订阅的主题<qos>
: 服务质量等级(0、1或2)
-
发布消息
AT+MQTTPUB=<topic>,<message>,<qos>,<retain>
<topic>
: 主题<message>
: 要发布的消息<qos>
: 服务质量等级(0、1或2)<retain>
: 是否保留消息(0或1)
-
取消订阅主题
AT+MQTTUNSUB=<topic>
<topic>
: 取消订阅的主题
-
断开MQTT连接
AT+MQTTDISC=<cfgID>
<cfgID>
: 配置ID(通常是0或1)