文章目录

  • 一 、前言
  • 二 、准备材料
  • 三 、亚马逊账号新建物品
  • 3.1 申请亚马逊账号
  • 3.2 创建单个物品
  • 3.3 创建证书
  • 四 、编译AT固件源码
  • 4.1 搭建AT固件源码的二次开发环境
  • 4.2 拉取AT固件源码
  • 4.3 替换亚马逊连接证书
  • 4.4 编译
  • 五 、连接通讯
  • 有任何疑问联系邮箱或文章留言,不要私信我,本博客已经屏蔽私信!多多支持!


一 、前言

本博文于 2021.2.25 更新,转载于:

二 、准备材料




三 、亚马逊账号新建物品

3.1 申请亚马逊账号

登录亚马逊云 https://aws.amazon.com/cn , 申请亚马逊账号比较费事,多和度娘打招呼就能解决,此处不便多说了。

3.2 创建单个物品

有了亚马逊账号之后,记得保管好,后面对接还要用到。下一步,切换进入AWS IOT 管理中,如下图创建单个物品。

esp8266连接公网 esp8266连接外网_固件


给物品取个名字,叫“esp_test”,其余默认,点击下一步如下图:

esp8266连接公网 esp8266连接外网_python_02

3.3 创建证书

创建证书是最关键的一步,如下图操作

esp8266连接公网 esp8266连接外网_esp8266连接公网_03


需要三个证书,其中2个证书为这个界面下载,还有一个是根证书,根证书可以从文章尾获取;

esp8266连接公网 esp8266连接外网_python_04


获取MQTT连接的域名:

esp8266连接公网 esp8266连接外网_esp8266连接公网_05

四 、编译AT固件源码

4.1 搭建AT固件源码的二次开发环境

打开网址 环境搭建 参考里面的教程,或者你来我这篇文章看看:

《体验下 Linux搭建 ESP8266_RTOS_SDK 3.0 最新环境的搭建和编译吧》

  • 注意点1:这里尤其要注意必须更新到 xtensa-lx106-elf-gcc-8.4.0的编译工具链,否则会报错误;
  • 注意点2:python版本 > 3.8.0,可以通过指令 python -v查看当前安装版本;
  • 注意点3:还要安装一个python处理表格库:python -m pip install pyyaml xlrd

4.2 拉取AT固件源码

使用git克隆下载:

git clone https://github.com/espressif/esp-at

不需要手动去拉取SDK源码,因为脚本会自动下载;

4.3 替换亚马逊连接证书

在亚马逊平台新建一个物品,创建证书,具体如何创建,看前面章节;

  • AmazonRootCA1.pem替换 components/customized_partitions/raw_data/mqtt_ca/mqtt_ca.crt
  • xxx.cert.pem替换 components/customized_partitions/raw_data/mqtt_cert/mqtt_client.crt
  • xxx.private.key替换 components/customized_partitions/raw_data/mqtt_key/mqtt_client.key
  • 注意:不需要重命名一样的文件;

4.4 编译

  • 指令一览表:
  • rm -rf build sdkconfig:删除全部编译产物;
  • ./build.py menuconfig:选择编译平台
  • ./build.py flash: 编译并烧录
  • ./build.py build: 仅仅编译,不烧录
  • ./build.py erase_flash: 擦除固件;如果提示ota data partition invalid,可以运行这个指令;

  • ①指定编译平台:执行 ./build.py menuconfig,选择平台为 ESP8266,选择下载配置,另外,MQTT协议任务栈的大小要设置为 4096,设置步骤可以见下动图;

esp8266连接公网 esp8266连接外网_AWS_06

  • ②编译并下载:执行 ./build.py flash,慢慢等待编译,尤其要注意编译日志是否把尴尬三个证书编译进去了?

五 、连接通讯

  • AT+MQTT 对接 AWS IoT 指令:
AT+CWMODE=1
AT+CWJAP="xuhongv@iot","xuhong112233"                    //连接路由器
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"                      //设置sntp服务器
AT+CIPSNTPTIME?                                          //获取是否同步了网络时间

AT+MQTTUSERCFG=0,4,"dbdd205756d04a988d564d103841cbde","aaa","bbb",0,0,""
AT+MQTTCONN=0,"xxx-ats.iot.us-east-2.amazonaws.com",8883,1  
AT+MQTTSUB=0,"esp32/at",1
AT+MQTTPUB=0,"esp32/at","hello aws!",1,0

注意:

  1. AT+MQTTUSERCFG 中第二参数为 4, 即双向认证, 不可更改, 其他的参数随便填;
  2. AT+MQTTCONN=0,"",8883,1 中, endpoint 为准备阶段的 MQTT域名, 端口 8883 不可更改;
  3. 其余发布和订阅主题,随意;
  4. 具体的使用,可以查看API文档:MQTT_AT_Commands

截图:

esp8266连接公网 esp8266连接外网_esp8266连接公网_07

  • 测试是否通畅,我们可以借用平台的工具:

AmazonRootCA1证书下载,自行保存为pem格式:https://www.amazontrust.com/repository/AmazonRootCA1.pem