ESP8266模块的MQTT AT指令测试

    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

最终测试,如下图:

c1d9792de4949edf6bac2c8929f7bbba.png

整理后的指令过程如下:

AT+MQTTUSERCFG=0,1,"123cli","","",0,0,""
 OK 
 
 AT+MQTTCONNCFG=0,120,0,"lwt_topic","lwt_msg",0,0
 OK 
 
 AT+MQTTCONN=0,"47.107.99.203",1883,1
+MQTTCONNECTED:0,1,"47.107.99.203","1883","",1  
OK 


AT+MQTTSUB=0,"testTopic1",0
 OK 
 
 AT+MQTTPUB=0,"testTopic1","testTopic1:data",0,0
 OK 
 +MQTTSUBRECV:0,"testTopic1",15,testTopic1:data 
 
 AT+MQTTPUB=0,"testTopic1","{\"testTopic1\":\"data\"}",0,0
 OK 
 +MQTTSUBRECV:0,"testTopic1",21,{"testTopic1":"data"}

服务器端:

b1874185648be93cb09db965569530c3.png

欢迎关注个人公众号:嵌入式学习与实践

参考:

https://docs.espressif.com/projects/esp-at/zh_CN/release-v2.2.0.0_esp8266/AT_Command_Set/MQTT_AT_Commands.html#cmd-mqttconncfg

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
ESP8266是一款Wi-Fi模块,可以通过AT指令控制连接MQTT服务器。在使用ESP8266连接MQTT服务器时,可以使用以下几个AT指令来实现不同的功能: 1. AT CWMODE=1:设置ESP8266为STA模式,即连接到一个已存在的Wi-Fi路由器上。 2. AT CWJAP="wifiname","password":连接到指定的Wi-Fi路由器,需要提供Wi-Fi的名称和密码。 3. AT MQTTUSERCFG=0,1,"clientId","username","password",0,0,"":配置MQTT用户名和密码,以及客户端ID。 4. AT MQTTCONN=0,"broker地址",端口号,0:连接到指定的MQTT broker,需要提供broker的地址和端口号。 5. AT MQTTSUB=0,"主题名称",1:订阅指定的主题,以接收来自该主题的消息。 6. AT MQTTPUB=0,"主题名称","消息内容",1,0:发布指定的消息到指定的主题。 以上是一些常用的ESP8266 AT指令,可以帮助你通过ESP8266连接到MQTT服务器,并进行消息的订阅和发布。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ESP8266固件AT指令连接EMQ 的MQTT服务器](https://blog.csdn.net/qq_39758638/article/details/116238916)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [【MQTT学习】NODEMCU(ESP8266-12F)的AT指令](https://blog.csdn.net/cw_huang/article/details/105841852)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值