打印
[STM32F1]

ESP8266模块的MQTT AT指令测试

[复制链接]
251|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rosemoore|  楼主 | 2023-9-29 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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

使用特权

评论回复
沙发
Henryko| | 2023-9-29 18:40 | 只看该作者
mqtt上手容易吗?

使用特权

评论回复
板凳
Stahan| | 2023-9-30 12:55 | 只看该作者
这么多at指令是怎么记得住的啊

使用特权

评论回复
地板
MessageRing| | 2023-9-30 17:34 | 只看该作者
用了固件还可以控制io吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

1135

帖子

2

粉丝