ESP8266模块固件是AT MQTT版本,使用该模块可以直接使用AT 指令进行MQTT通信,下面介绍如何使用 MQTT AT指令。
MQTT AT相关的指令如下:
AT+MQTTUSERCFG:设置 MQTT 用户属性;
AT+MQTTLONGCLIENTID:设置 MQTT 客户端 ID;
AT+MQTTLONGUSERNAME:设置 MQTT 登录用户名;
AT+MQTTLONGPASSWORD:设置 MQTT 登录密码;
AT+MQTTCONNCFG:设置 MQTT 连接属性;
AT+MQTTCONN:连接 MQTT Broker;
AT+MQTTPUB:发布 MQTT 消息(字符串);
AT+MQTTPUBRAW:发布 MQTT 消息(二进制);
AT+MQTTSUB:订阅 MQTT Topic;
AT+MQTTUNSUB:取消订阅 MQTT Topic;
AT+MQTTCLEAN:断开 MQTT 连接;
MQTT AT 错误码;
MQTT AT 说明:一般来说,AT MQTT 命令都会在 10 秒内响应,但 AT+MQTTCONN 命令除外。例如,如果路由器不能上网,命令 AT+MQTTPUB 会在 10 秒内响应,但 AT+MQTTCONN 命令在网络环境不好的情况下,可能需要更多的时间用来重传数据包。
如果 AT+MQTTCONN 是基于 TLS 连接,每个数据包的超时时间为 10 秒,则总超时时间会根据握手数据包的数量而变得更长。
当 MQTT 连接断开时,会提示 +MQTTDISCONNECTED:<LinkID> 消息。
当 MQTT 连接建立时,会提示 +MQTTCONNECTED:<LinkID>,<scheme>,<"host">,port,<"path">,<reconnect> 消息。
测试用到的指令有:
①AT+MQTTUSERCFG:设置 MQTT 用户属性
命令格式:(有长度限制)
AT+MQTTUSERCFG=<LinkID>,<scheme>,<"client_id">,<"username">,<"password">,<cert_key_ID>,<CA_ID>,<"path">
参数:
<LinkID>:当前仅支持 link ID 0。
<scheme>:由于 ESP8266 内存限制,不支持 MQTT over TLS,即 <scheme> 只能取 1 或 6。
1: MQTT over TCP;
2: MQTT over TLS(不校验证书);
3: MQTT over TLS(校验 server 证书);
4: MQTT over TLS(提供 client 证书);
5: MQTT over TLS(校验 server 证书并且提供 client 证书);
6: MQTT over WebSocket(基于 TCP);
7: MQTT over WebSocket Secure(基于 TLS,不校验证书);
8: MQTT over WebSocket Secure(基于 TLS,校验 server 证书);
9: MQTT over WebSocket Secure(基于 TLS,提供 client 证书);
10: MQTT over WebSocket Secure(基于 TLS,校验 server 证书并且提供 client 证书)。
<client_id>:MQTT 客户端 ID,最大长度:256 字节。
<username>:用户名,用于登录 MQTT broker,最大长度:64 字节。
<password>:密码,用于登录MQTT broker,最大长度:64 字节。
<cert_key_ID>:证书 ID,目前 ESP-AT 仅支持一套 cert 证书,参数为 0。
<CA_ID>:CA ID,目前 ESP-AT 仅支持一套 CA 证书,参数为 0。
<path>:资源路径,最大长度:32 字节。
实际测试命令
AT+MQTTUSERCFG=0,1,"123cli","","",0,0,""
②AT+MQTTCONNCFG:设置 MQTT 连接属性
命令格式:
AT+MQTTCONNCFG=<LinkID>,<keepalive>,<disable_clean_session>,<"lwt_topic">,<"lwt_msg">,<lwt_qos>,<lwt_retain>
参数
<LinkID>:当前仅支持 link ID 0。
<keepalive>:MQTT ping 超时时间,单位:秒。范围:[0,7200]。默认值:0,会被强制改为 120 秒。
<disable_clean_session>:设置 MQTT 清理会话标志,有关该参数的更多信息请参考 MQTT 3.1.1 协议中的 Clean Session 章节。
0: 使能清理会话
1: 禁用清理会话
<lwt_topic>:遗嘱 topic,最大长度:128 字节。
<lwt_msg>:遗嘱 message,最大长度:64 字节。
<lwt_qos>:遗嘱 QoS,参数可选 0、1、2,默认值:0。
<lwt_retain>:遗嘱 retain,参数可选 0 或 1,默认值:0。
实际测试指令,如下:
AT+MQTTCONNCFG=0,120,0,"lwt_topic","lwt_msg",0,0
③AT+MQTTCONN:连接 MQTT Broker
命令格式:
AT+MQTTCONN=<LinkID>,<"host">,<port>,<reconnect>
参数
<LinkID>:当前仅支持 link ID 0。
<host>:MQTT broker 域名,最大长度:128 字节。
<port>:MQTT broker 端口,最大端口:65535。
<reconnect>:
0: MQTT 不自动重连;
1: MQTT 自动重连,会消耗较多的内存资源。
实际测试指令,如下:
AT+MQTTCONN=0,"47.107.99.203",1883,1
④AT+MQTTSUB:订阅 MQTT Topic
命令格式:
AT+MQTTSUB=<LinkID>,<"topic">,<qos>
参数
<LinkID>:当前仅支持 link ID 0。
<topic>:订阅的 topic。
<qos>:订阅的 QoS。
实际测试指令,如下:
AT+MQTTSUB=0,"testTopic1",0
⑤AT+MQTTPUB:发布 MQTT 消息(字符串)
命令格式:
AT+MQTTPUB=<LinkID>,<"topic">,<"data">,<qos>,<retain>
参数
<LinkID>:当前仅支持 link ID 0。
<topic>:MQTT topic,最大长度:128 字节。
<data>:MQTT 字符串消息。
<qos>:发布消息的 QoS,参数可选 0、1、或 2,默认值:0。
<retain>:发布 retain。
说明:
每条 AT 命令的总长度不能超过 256 字节。
本命令不能发送数据 \0,若需要发送该数据,请使用 AT+MQTTPUBRAW 命令。
实际测试指令,如下:
AT+MQTTPUB=0,"testTopic1","{\"testTopic1\":\"data\"}",0,0
原文链接:https://blog.csdn.net/weixin_46158019/article/details/131486114
|
|