MQTT AT 连接云示例

[English]

本文档主要介绍你的设备如何通过 AT 命令对接 AWS IoT。

重要

有关如何使用 MQTT AT 命令的详细信息,请参阅 MQTT AT 命令集。 你需要通过阅读 AWS IoT 开发指南 来熟悉 AWS IoT。

请按照以下步骤使用 ESP-AT 将你的 ESP32-C61 设备连接到 AWS IoT。

从 AWS IoT 获取证书以及 endpoint

  1. 登录你的 AWS IoT 控制台帐号,以及切换至 IoT Core services。

  2. 按照 创建 AWS IoT 资源 中的说明创建 AWS IoT 策略、事物和证书。

确保你已获得以下证书和密钥文件:

  • device.pem.crt(设备证书)

  • private.pem.key(私有密钥)

  • Amazon-root-CA-1.pem(根 CA 证书)

  1. 根据文档 设置策略 获取端点 (endpoint) 以及了解如何通过证书将事物绑定到策略。

    端点的格式为 “xxx-ats.iot.us-east-2.amazonaws.com”。

备注

强烈建议你熟悉 AWS IoT 开发人员指南。以下是本指南中值得注意的一些要点。

  • AWS IoT 需要所有设备必须配备设备证书、私钥和根 CA 证书。

  • 有关如何激活证书。

  • 区域建议选择俄亥俄州 (Ohio)。

使用 MQTT AT 命令基于双向认证连接 AWS IoT

配置证书

有三种方式可以替换 MQTT 证书:

方式一:重新编译固件

打开本地 ESP-AT 工程,并执行如下操作:

然后编译 ESP-AT 项目以构建 AT 固件,并将固件烧录到你的 ESP32-C61 设备。欲了解更多信息,请参阅 本地编译 ESP-AT 工程

方式二:运行时更新证书

如果不想重新编译固件,可以直接使用 AT+SYSMFG 命令在运行时更新 MQTT 证书。具体操作步骤请参考 AT+SYSMFG 命令示例中的 PKI 配置,证书配置方法与 SSL 证书相同,仅需将命名空间修改为 mqtt_certmqtt_keymqtt_ca 即可。

方式三:仅更新证书 bin 文件

如果你已有 AT 固件,只需预烧录自己的证书,可以直接更新 mfg_nvs.bin 文件。具体操作步骤请参阅 如何更新 PKI 配置

使用 AT 命令连接到 AWS IoT

  1. 设置 Wi-Fi 模式为 station。

    命令:

    AT+CWMODE=1
    

    响应:

    OK
    
  2. 连接 AP。

    命令:

    AT+CWJAP=<"ssid">,<"password">
    

    响应:

    OK
    
  3. 设置 SNTP Server。

    命令:

    AT+CIPSNTPCFG=1,8,"pool.ntp.org"
    

    响应:

    OK
    
  4. 查询 SNTP 时间。

    命令:

    AT+CIPSNTPTIME?
    

    响应:

    +CIPSNTPTIME:<asctime style time>
    OK
    

    说明:

    • 此时获得的 <asctime style time> 必须是设置时区的实时时间,否则会因为证书有效期而导致连接失败。

  5. (可选) 运行时更新 MQTT 证书。

    a). 更新 MQTT 根 CA 证书。

    命令:

    AT+SYSMFG=2,"mqtt_ca","mqtt_ca",8,<ca_len>
    

    响应:

    OK
    
    >
    

    收到 > 后,发送 Amazon-root-CA-1.pem 的完整内容,其中 <ca_len> 为证书文件的字节数。

    b). 更新 MQTT 客户端私钥。

    命令:

    AT+SYSMFG=2,"mqtt_key","mqtt_key",8,<key_len>
    

    响应:

    OK
    
    >
    

    收到 > 后,发送 private.pem.key 的完整内容,其中 <key_len> 为私钥文件的字节数。

    c). 更新 MQTT 客户端证书。

    命令:

    AT+SYSMFG=2,"mqtt_cert","mqtt_cert",8,<cert_len>
    

    响应:

    OK
    
    >
    

    收到 > 后,发送 device.pem.crt 的完整内容,其中 <cert_len> 为证书文件的字节数。

    说明:

    • mqtt_camqtt_keymqtt_cert 命名空间的键名分别与命名空间同名。

    • 写入的是二进制类型数据(<type> = 8),发送的数据长度必须与 <ca_len><key_len><cert_len> 完全一致。

    • 如需查询或验证写入结果,可参考 AT+SYSMFG 命令示例

  6. 设置 MQTT 用户属性。

    命令:

    AT+MQTTUSERCFG=0,5,"esp32","espressif","1234567890",0,0,""
    

    响应:

    OK
    

    说明:

    • AT+MQTTUSERCFG 中第二参数为 5,即双向认证,不可更改。

  7. 连接 AWS IoT。

    命令:

    AT+MQTTCONN=0,"<endpoint>",8883,1
    

    响应:

    +MQTTCONNECTED:0,5,<endpoint>,"8883","",1
    OK
    

    说明:

    • 请在 <endpoint> 参数处填入你在 AWS IoT 控制台获取的实际 endpoint 字符串。

    • 无法更改端口 8883。

  8. 订阅消息。

    命令:

    AT+MQTTSUB=0,"topic/esp32at",1
    

    响应:

    OK
    
  9. 发布消息。

    命令:

    AT+MQTTPUB=0,"topic/esp32at","hello aws!",1,0
    

    响应:

    +MQTTSUBRECV:0,"topic/esp32at",10,hello aws!
    
    OK
    

示例日志

正常交互日志如下:

  1. ESP32-C61 端日志

    ESP32-C61 端连接 AWS IoT 日志
  2. AWS 端日志

    AWS 端连接 AWS IoT 日志