MQTT AT 示例

[English]

本文档主要提供在 ESP32-C6 设备上运行 MQTT AT 命令集 命令的详细示例。

重要

文档中所描述的例子均基于设备已连接 Wi-Fi 的前提。

基于 TCP 的 MQTT 连接(需要本地创建 MQTT 代理)(适用于数据量少)

以下示例同时使用两块 ESP32-C6 开发板,其中一块作为 MQTT 发布者(只作为 MQTT 发布者角色),另一块作为 MQTT 订阅者(只作为 MQTT 订阅者角色)。

示例介绍了如何基于 TCP 创建 MQTT 连接。首先您需要创建一个本地 MQTT 代理,假设 MQTT 代理的 IP 地址为 192.168.3.102,端口为 8883

重要

步骤中以 ESP32-C6 MQTT 发布者 开头的操作只需要在 ESP32-C6 MQTT 发布者端执行即可,以 ESP32-C6 MQTT 订阅者 开头的操作只需要在 ESP32-C6 MQTT 订阅者端执行即可。如果操作没有特别指明在哪端操作,则需要在发布者端和订阅者端都执行。

  1. 设置 MQTT 用户属性。

    ESP32-C6 MQTT 发布者:

    命令:

    AT+MQTTUSERCFG=0,1,"publisher","espressif","123456789",0,0,""
    

    响应:

    OK
    

    ESP32-C6 MQTT 订阅者:

    命令:

    AT+MQTTUSERCFG=0,1,"subscriber","espressif","123456789",0,0,""
    

    响应:

    OK
    
  2. 连接 MQTT 代理。

    命令:

    AT+MQTTCONN=0,"192.168.3.102",8883,1
    

    响应:

    +MQTTCONNECTED:0,1,"192.168.3.102","8883","",1
    
    OK
    

    说明:

    • 您输入的 MQTT 代理域名或 MQTT 代理 IP 地址可能与上述命令中的不同。

  3. 订阅 MQTT 主题。

    ESP32-C6 MQTT 订阅者:

    命令:

    AT+MQTTSUB=0,"topic",1
    

    响应:

    OK
    
  4. 发布 MQTT 消息(字符串)。

    ESP32-C6 MQTT 发布者:

    命令:

    AT+MQTTPUB=0,"topic","test",1,0
    

    响应:

    OK
    

    说明:

    • 如果 ESP32-C6 MQTT 发布者成功发布消息,以下信息将会在 ESP32-C6 MQTT 订阅者端提示。

      +MQTTSUBRECV:0,"topic",4,test
      
  5. 关闭 MQTT 连接。

    命令:

    AT+MQTTCLEAN=0
    

    响应:

    OK
    

基于 TCP 的 MQTT 连接(需要本地创建 MQTT 代理)(适用于数据量多)

以下示例同时使用两块 ESP32-C6 开发板,其中一块作为 MQTT 发布者(只作为 MQTT 发布者角色),另一块作为 MQTT 订阅者(只作为 MQTT 订阅者角色)。

示例介绍了如何基于 TCP 创建 MQTT 连接。首先您需要创建一个本地 MQTT 代理,假设 MQTT 代理的 IP 地址为 192.168.3.102,端口为 8883

如果您发布消息的数据量相对较多,已经超过了单条 AT 指令的长度阈值 256,则您可以使用 AT+MQTTPUBRAW 命令。

重要

步骤中以 ESP32-C6 MQTT 发布者 开头的操作只需要在 ESP32-C6 MQTT 发布者端执行即可,以 ESP32-C6 MQTT 订阅者 开头的操作只需要在 ESP32-C6 MQTT 订阅者端执行即可。如果操作没有特别指明在哪端操作,则需要在发布者端和订阅者端都执行。

  1. 设置 MQTT 用户属性。

    ESP32-C6 MQTT 发布者:

    命令:

    AT+MQTTUSERCFG=0,1,"publisher","espressif","123456789",0,0,""
    

    响应:

    OK
    

    ESP32-C6 MQTT 订阅者:

    命令:

    AT+MQTTUSERCFG=0,1,"subscriber","espressif","123456789",0,0,""
    

    响应:

    OK
    
  2. 连接 MQTT 代理。

    命令:

    AT+MQTTCONN=0,"192.168.3.102",8883,1
    

    响应:

    +MQTTCONNECTED:0,1,"192.168.3.102","8883","",1
    
    OK
    

    说明:

    • 您输入的 MQTT 代理域名或 MQTT 代理 IP 地址可能与上述命令中的不同。

  3. 订阅 MQTT 主题。

    ESP32-C6 MQTT 订阅者:

    命令:

    AT+MQTTSUB=0,"topic",1
    

    响应:

    OK
    
  4. 发布 MQTT 消息(字符串)。

    假设你想要发布消息的数据如下,长度为 427 字节。

    {"headers": {"Accept": "application/json","Accept-Encoding": "gzip, deflate","Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7","Content-Length": "0","Host": "httpbin.org","Origin": "http://httpbin.org","Referer": "http://httpbin.org/","User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36","X-Amzn-Trace-Id": "Root=1-6150581e-1ad4bd5254b4bf5218070413"}}
    

    ESP32-C6 MQTT 发布者:

    命令:

    AT+MQTTPUBRAW=0,"topic",427,0,0
    

    响应:

    OK
    
    >
    

    上述响应表示 AT 已准备好接收串行数据,此时您可以输入数据,当 AT 接收到的数据长度达到 <length> 后,数据传输开始。

    +MQTTPUB:OK
    

    说明:

    • AT 输出 > 字符后,数据中的特殊字符不需要转义字符进行转义,也不需要以新行结尾(CR-LF)。

    • 如果 ESP32-C6 MQTT 发布者成功发布消息,以下信息将会在 ESP32-C6 MQTT 订阅者端提示。

      +MQTTSUBRECV:0,"topic",427,{"headers": {"Accept": "application/json","Accept-Encoding": "gzip, deflate","Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7","Content-Length": "0","Host": "httpbin.org","Origin": "http://httpbin.org","Referer": "http://httpbin.org/","User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36","X-Amzn-Trace-Id": "Root=1-6150581e-1ad4bd5254b4bf5218070413"}}
      
  5. 关闭 MQTT 连接。

    命令:

    AT+MQTTCLEAN=0
    

    响应:

    OK
    

基于 TLS 的 MQTT 连接(需要本地创建 MQTT 代理)

以下示例同时使用两块 ESP32-C6 开发板,其中一块作为 MQTT 发布者(只作为 MQTT 发布者角色),另一块作为 MQTT 订阅者(只作为 MQTT 订阅者角色)。

示例介绍了如何基于 TLS 创建 MQTT 连接。首先您需要创建一个本地 MQTT 代理,假设 MQTT 代理的 IP 地址为 192.168.3.102,端口为 8883

重要

步骤中以 ESP32-C6 MQTT 发布者 开头的操作只需要在 ESP32-C6 MQTT 发布者端执行即可,以 ESP32-C6 MQTT 订阅者 开头的操作只需要在 ESP32-C6 MQTT 订阅者端执行即可。如果操作没有特别指明在哪端操作,则需要在发布者端和订阅者端都执行。

  1. 设置时区和 SNTP 服务器。

    命令:

    AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
    

    响应:

    OK
    
  2. 查询 SNTP 时间。

    命令:

    AT+CIPSNTPTIME?
    

    响应:

    +CIPSNTPTIME:Thu Sep  2 18:57:03 2021
    OK
    

    说明:

    • 您的查询 SNTP 结果可能与上述响应中的不同。

    • 请确保 SNTP 时间一定是真实有效的时间,不能是 1970 年及之前的时间。

    • 设置时间是为了在 TLS 认证时校验证书的有效期。

  3. 设置 MQTT 用户属性。

    ESP32-C6 MQTT 发布者:

    命令:

    AT+MQTTUSERCFG=0,4,"publisher","espressif","123456789",0,0,""
    

    响应:

    OK
    

    ESP32-C6 MQTT 订阅者:

    命令:

    AT+MQTTUSERCFG=0,4,"subscriber","espressif","123456789",0,0,""
    

    响应:

    OK
    
  4. 设置 MQTT 连接属性。

    命令:

    AT+MQTTCONNCFG=0,0,0,"lwtt","lwtm",0,0
    

    响应:

    OK
    
  5. 连接 MQTT 代理。

    命令:

    AT+MQTTCONN=0,"192.168.3.102",8883,1
    

    响应:

    +MQTTCONNECTED:0,4,"192.168.3.102","8883","",1
    
    OK
    

    说明:

    • 您输入的 MQTT 代理域名或 MQTT 代理 IP 地址可能与上述命令中的不同。

  6. 订阅 MQTT 主题。

    ESP32-C6 MQTT 订阅者:

    命令:

    AT+MQTTSUB=0,"topic",1
    

    响应:

    OK
    
  7. 发布 MQTT 消息(字符串)。

    ESP32-C6 MQTT 发布者:

    命令:

    AT+MQTTPUB=0,"topic","test",1,0
    

    响应:

    OK
    

    说明:

    • 如果 ESP32-C6 MQTT 发布者成功发布消息,以下信息将会在 ESP32-C6 MQTT 订阅者端提示。

      +MQTTSUBRECV:0,"topic",4,test
      
  8. 关闭 MQTT 连接。

    命令:

    AT+MQTTCLEAN=0
    

    响应:

    OK
    

基于 WSS 的 MQTT 连接

以下示例同时使用两块 ESP32-C6 开发板,其中一块作为 MQTT 发布者(只作为 MQTT 发布者角色),另一块作为 MQTT 订阅者(只作为 MQTT 订阅者角色)。

示例介绍了如何基于 WSS 创建 MQTT 连接。MQTT 代理域名为 test.mosquitto.org,端口为 8081

重要

步骤中以 ESP32-C6 MQTT 发布者 开头的操作只需要在 ESP32-C6 MQTT 发布者端执行即可,以 ESP32-C6 MQTT 订阅者 开头的操作只需要在 ESP32-C6 MQTT 订阅者端执行即可。如果操作没有特别指明在哪端操作,则需要在发布者端和订阅者端都执行。

  1. 设置时区和 SNTP 服务器。

    命令:

    AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
    

    响应:

    OK
    
  2. 查询 SNTP 时间。

    命令:

    AT+CIPSNTPTIME?
    

    响应:

    +CIPSNTPTIME:Thu Sep  2 18:57:03 2021
    OK
    

    说明:

    • 您的查询 SNTP 结果可能与上述响应中的不同。

    • 请确保 SNTP 时间一定是真实有效的时间,不能是 1970 年及之前的时间。

    • 设置时间是为了在 TLS 认证时校验证书的有效期。

  3. 设置 MQTT 用户属性。

    ESP32-C6 MQTT 发布者:

    命令:

    AT+MQTTUSERCFG=0,7,"publisher","espressif","1234567890",0,0,""
    

    响应:

    OK
    

    ESP32-C6 MQTT 订阅者:

    命令:

    AT+MQTTUSERCFG=0,7,"subscriber","espressif","1234567890",0,0,""
    

    响应:

    OK
    
  4. 连接 MQTT 代理。

    命令:

    AT+MQTTCONN=0,"test.mosquitto.org",8081,1
    

    响应:

    +MQTTCONNECTED:0,7,"test.mosquitto.org","8081","/",1
    
    OK
    

    说明:

    • 您输入的 MQTT 代理域名或 MQTT 代理 IP 地址可能与上述命令中的不同。

  5. 订阅 MQTT 主题。

    ESP32-C6 MQTT 订阅者:

    命令:

    AT+MQTTSUB=0,"topic",1
    

    响应:

    OK
    
  6. 发布 MQTT 消息(字符串)。

    ESP32-C6 MQTT 发布者:

    命令:

    AT+MQTTPUB=0,"topic","test",1,0
    

    响应:

    OK
    

    说明:

    • 如果 ESP32-C6 MQTT 发布者成功发布消息,以下信息将会在 ESP32-C6 MQTT 订阅者端提示。

      +MQTTSUBRECV:0,"topic",4,test
      
  7. 关闭 MQTT 连接。

    命令:

    AT+MQTTCLEAN=0
    

    响应:

    OK