目录

ESP32-AT指令连接AWS亚马逊云

ESP32 AT指令连接AWS亚马逊云

ESP32 AT指令连接AWS亚马逊云

文章目录

1. 概述

ESP32是乐鑫开发的一个WiFi 蓝牙双模组,支持ESP-IDF开发以及AT指令模式开发,关于两种模式的区别不在这赘述,大家可自行上网搜索了解

本文旨在介绍如何使用 ESP32 的 AT 指令模式连接AWS亚马逊云 ,由于连接AWS亚马逊云是需要 双向认证 的,相比其他的云平台,如阿里云、百度云、腾讯云较为复杂,因此特编写此博客已做记录及分享

关于如何使用 ESP32 AT指令连接阿里云、百度云等国内云平台,可直接参考官方的AT用户指南,

2. 相关资料及设备说明

  • 硬件平台:
    • 基于 ESP32-WROOM-32 Node 开发板
  • 相关资料及工具:
    • xcom串口调试助手

3. AWS云平台接入

3.1 AWS云平台接入概述

AWS云平台,也就是亚马逊云,与阿里云接入相比较,其差别在于:

  • 阿里云采用 用户名+密码 作为设备的判断依据进行接入
  • 亚马逊云采用 设备证书 作为设备的判断依据进行接入

注意,此处所描述的接入均指采用 Mqtt 接入云平台

3.2 接入AWS云平台流程

接入AWS云平台的流程大体上可分为以下几个部分:

  1. 创建云端虚拟设备
    • 获取 设备证书、密钥 等连接凭证
  2. 采用工具模拟设备接入云平台验证接入可行性
    • 采用 Mqtt.fx 工具验证
    • 采用 python 脚本验证
  3. 采用实体设备接入云平台
    • 将设备证书以不同的方式写入ESP32,将ESP32实体设备接入云平台

4. 云平台设备创建及验证

4.1 云平台设备创建

无论哪个云平台,实体设备均在云平台对应有一个云端虚拟设备,因此在设备接入之前,首先第一步就是在云平台创建对应的云端虚拟设备

  1. 打开亚马逊云,注册亚马逊云账号,

  2. 选择对应的地区

    https://i-blog.csdnimg.cn/blog_migrate/2f6ac8ff59ee836522cd8d9b4f56c72f.png

  3. 进入IOT core

    https://i-blog.csdnimg.cn/blog_migrate/00360e76b799da93d42a3f7ffbfca05d.png

  4. 创建云端设备,按照步骤以此进行,操作指引可以参考亚马逊云对应的文档,本文在创建的时候勾选的是 windows python方案 进行验证

    https://i-blog.csdnimg.cn/blog_migrate/740912700e38550646631f454ca46be2.png

    https://i-blog.csdnimg.cn/blog_migrate/affdc4797bd4c9c38da524c47d1faceb.png

  5. 创建设备的第四步中会下载连接的工具包,解压此工具包,并按提示输入命令,以采用Python进行测试

    https://i-blog.csdnimg.cn/blog_migrate/2e562131837d76b269022060d1646b12.png https://i-blog.csdnimg.cn/blog_migrate/311ff0fb1e13a1d29304915fb20418d8.png

  6. clone完成之后会一直发送信息,同时在网页上可以看到接收到的信息,说明云端虚拟设备已经创建成功,并采用Python脚本模拟连接成功 https://i-blog.csdnimg.cn/blog_migrate/e1b848a2265f9375e17e683d51faf792.png

    https://i-blog.csdnimg.cn/blog_migrate/8534df5f2e2e196a22872bf81e9e3af2.png

4.2 采用 Python 脚本进行连接验证

在3.2中我们已经采用了 Python 脚本进行连接验证,故不在重复赘述

4.3 采用 Mqtt.fx 软件进行连接验证

  1. 打开 Mqtt.fx 软件
  2. 准备连接参数:
    • Broker Address: 在AWS网页点击 连接一台设备 时,下方的那个 ping xxx ping后面的就是Broker Address地址

    • Broke Port:8883

    • Client ID:sdk-java,策略里面约束的

    • CA File:解压目录下文件名中带 CA 的文件(不要看后缀!!!)

    • Client Certificate File:解压目录下文件名中带 cert 的文件(不要看后缀!!!)

    • Client Key File:解压目录下文件名中带 orivate.key 的文件(不要看后缀!!!)

    • 主题:sdk/test/Python,策略里面约束的

      https://i-blog.csdnimg.cn/blog_migrate/1e56c9d23507ad5dbfdda24d2b3fef3b.png

      https://i-blog.csdnimg.cn/blog_migrate/352a5f0c9fb2e6beace9346668631c81.png

      https://i-blog.csdnimg.cn/blog_migrate/6be918fc372b6a1da2fabddbcd377572.png

https://i-blog.csdnimg.cn/blog_migrate/0eb6bc0fe3f0aea58b4348206aa583dc.png

  1. 采用Mqtt.fx连接,如果没有连接成功,请自行检查上述中是否有错误

    https://i-blog.csdnimg.cn/blog_migrate/105902577cb9b3cc4aca3eea17cd0271.png

  2. 订阅主题

    https://i-blog.csdnimg.cn/blog_migrate/427cdb43451663b69fbba95338248179.png

  3. 往主题发布消息,并查看接收

    https://i-blog.csdnimg.cn/blog_migrate/5265cfc88962a22860175e7ab2af0747.png https://i-blog.csdnimg.cn/blog_migrate/8184987d066f3f078346e838ab58c17b.png

5. ESP32云平台接入

5.1 直接替换证书编译方式

  1. 参考官方的文档作为指导,编译AT工程,文档地址:
  2. 由于此方案官方文档描述比较清楚,不在此赘述,强调几点注意事项:
    • 使用 git 拉取分支,注意要切换到发布分支!!!默认一般拉的是master分支,master分支是开发分支,不一定能编译成功!!!
    • 代码编译成功之后,使用4.1章节中下载的 设备证书、密钥、根证书 替换原有的 设备证书、密钥、根证书 ,之后重新编译,编译成功之后进行烧录即可
    • https://i-blog.csdnimg.cn/blog_migrate/f0d9840c58830bf4c7ba5f3acc603acf.png

5.2 PKI 文件导入方式

当不想自行编译AT固件,想在官方提供的AT固件的基础上进行加工修改,将证书导入,可以使用PKI文

件导入的方式将证书等文件导入ESP32设备中。

采用这种方式导入,首先需要做的是将 设备证书、私有密钥、根证书 转化为对应的bin文件,之后通过烧录软件进行烧录,或者通过AT指令进行烧录的方式对ESP32 原有的AT固件内的 此三类文件进行替换。

5.2.1 bin文件生成
  1. 下载python脚本:
  2. 使用命令将 设备证书、私有密钥、根证书 分别转化为对应的bin文件
  3. 命令使用说明在 github 上的 readme 中有详细描述
python SCRIPT_PATH generate_bin -b OUTPUT_BIN_NAME PKI_LIST
  • SCRIPT_PATH :

    • the path of script. If you’re in Tools folder of AT, then SCRIPT_PATH=AtPKI.py
  • OUTPUT_BIN_NAME :

    • the file name for generated PKI bin
  • PKI_LIST :

    • a list of (type, file_name) pair:
      • type: ca, cert, key
      • file_name: PKI item file name
    • each item will have ID according to its type. the ID is generated as input order. ID will be used to match certificates and keys.
  • 注意 设备证书、私有密钥、根证书 的 PKI_LIST 里面的 type 是不一样的!

实际操作如下:

https://i-blog.csdnimg.cn/blog_migrate/f538c13f90883f732d0fdd4401d73f9e.png

https://i-blog.csdnimg.cn/blog_migrate/ca01a63dac54997a2343b46933378300.png

官方参考文档:

5.2.1 下载时烧录

下载工具:

ESP32 官方AT固件:

  1. 首先下载官方发布的完整固件

    https://i-blog.csdnimg.cn/blog_migrate/9179c972e95a84bdf5156d990d9bcae7.png

  2. 之后将证书文件烧录进对应的地址,进行覆盖,ESP32 AT固件分区如下表所示: https://i-blog.csdnimg.cn/blog_migrate/1f2f4994094bce0d5bd1f356c3361d7f.png

  3. 我们这里需要替换的是 mqtt_ca mqtt_cert mqtt_key 这三个文件, 不是client的也不是server的!!! ,因此将5.2.1节中生成的bin文件分别下载至对应地址

    https://i-blog.csdnimg.cn/blog_migrate/631bab8c618ea98bf1ef8f332b421a00.png

5.2.2 AT指令烧录

除了使用烧录的方式将证书bin文件写入flash,ESP32 AT固件还支持通过串口指令写入AT固件

首先需要计算需要写入的 ca.bin cert.bin private_key.bin 文件的大小

可以通过串口助手进行计算,使用串口助手向一个没有连接设备的串口发送整个文件,串口助手下方会记录发送的字节数 https://i-blog.csdnimg.cn/blog_migrate/0999393922286e5df00f307a54f49cc3.png

  1. 查询AT分区信息 AT+SYSFLASH?

    https://i-blog.csdnimg.cn/blog_migrate/22bfb6e5188f91430c61d6117afc8355.png

  2. 擦除 mqtt_cert 分区 AT+SYSFLASH=0,"mqtt_cert"

  3. 写入 mqtt_cert 分区 AT+SYSFLASH=1,"mqtt_cert",0,1232

  4. 擦除 mqtt_key 分区 AT+SYSFLASH=0,"mqtt_key"

  5. 写入 mqtt_key 分区 AT+SYSFLASH=1,"mqtt_key",0,1688

  6. 擦除 mqtt_ca 分区 AT+SYSFLASH=0,"mqtt_ca"

  7. 写入 mqtt_ca 分区 AT+SYSFLASH=1,"mqtt_ca",0,1200 https://i-blog.csdnimg.cn/blog_migrate/9b360639bc7757f670c81e3a226552d4.png

  8. 更新完Flash之后需要复位下,以保证更新内容重新加载 AT+RST

5.3 连接AWS亚马逊云

在5.2中我们已经将设备证书、私有密钥、根证书烧录入ESP32的flash中,接下来便可以连接AWS了

  1. 使用串口工具分别连接调试串口和AT指令通讯串口

    https://i-blog.csdnimg.cn/blog_migrate/678f50b2193e6f5381829a995ab4a81f.png

  2. 切换为Station模式 AT+CWMODE=1

  3. 连接热点 AT+CWJAP="abc","123456789" https://i-blog.csdnimg.cn/blog_migrate/14a817c64d8369a6a0ccecf3367e802a.png

  4. 设置SNTP服务器地址 AT+CIPSNTPCFG=1,8,"pool.ntp.org"

  5. 查询网络时间 AT+CIPSNTPTIME? ,主要用来确认网络可用 https://i-blog.csdnimg.cn/blog_migrate/4b834eb2f2c336d37667aefd597679b6.png

  6. 配置MQTT服务器 AT+MQTTUSERCFG=0,5,"sdk-java","espressif","1234567890",0,0,"" ,这里主题一定要是云端设备策略里面支持的,由于AWS采用证书认证,因此这里的设备名和设备密码随便写

  7. 连接MQTT服务器 AT+MQTTCONN=0,"xxxxxxxxxxx.iot.us-east-2.amazonaws.com",8883,1 ,这里的服务器地址请自行更换为自己的

  8. 查看串口打印信息确认是否连接成功,连接失败的话请重新阅读自行查找原因 https://i-blog.csdnimg.cn/blog_migrate/c7ff470f4fbc69b2573da5c63a09ff41.png

  9. 订阅主题 AT+MQTTSUB=0,"sdk/test/Python",1

  10. 往主题发布消息 AT+MQTTPUB=0,"sdk/test/Python","hello aws!",1,0

    https://i-blog.csdnimg.cn/blog_migrate/0c1f2d6bfc67b0e71998fade747053a1.png

6. 总结

以上便是使用 ESP32 的 AT 模式连接基于双向认证的 AWS 的全部步骤了!

关于ESP32的AT指令使用,其实官方的文档说的还是比较仔细的了,但是有些细节之处没有明确说明,导致实际在开发过程中踩了很多的坑,但尽管官方文档存在一点点缺陷,但总体上而言是已经相当不错的了,如果你要使用 ESP32 的AT的模式,还是需要仔细阅读的

通过上述操作,相信现在你对于AWS基于证书的双向认证的这套连接方案也有了大概的了解,同时你也会发现,对于一个产品来说,如何将证书文件下载到ESP32中其实是一个非常麻烦的事情!

每一个ESP32模块都需要有一个云端生成的唯一的证书文件存放在ESP32设备内部,尽管通过直接编译或是使用下载工具下载的方式将证书bin文件下载到设备内,看上去都还不是很复杂,但是这对于一个产品项目来说,这对于产品的生产会是非常麻烦的一个问题,不过庆幸的是,ESP32还支持了通过串口方案对内部flash进行刷写,因此对于产品项目,看来大家只能选择采用此种方式了(如果你要使用AT模式连接AWS的话)


好啦,本篇博客分享写完了,期望能真正帮助到正在努力的你!

如果觉得很棒,你的点赞、收藏+关注是对我最大的鼓励!

开发者社区的明天需要大家一同开源共创,期待下一次你的分享,让我们一同携手共进,推动人类科技的发展!!!

创作不易,转载请注明出处~