ESP32 AT指令连接AWS亚马逊云
ESP32 AT指令连接AWS亚马逊云
文章目录
- ESP32 AT指令连接AWS亚马逊云
- 1. 概述
- 2. 相关资料及设备说明
- 3. AWS云平台接入
- 3.1 AWS云平台接入概述
- 3.2 接入AWS云平台流程
- 4. 云平台设备创建及验证
- 4.1 云平台设备创建
- 4.2 采用 Python 脚本进行连接验证
- 4.3 采用 Mqtt.fx 软件进行连接验证
- 5. ESP32云平台接入
- 5.1 直接替换证书编译方式
- 5.2 PKI 文件导入方式
- 5.2.1 bin文件生成
- 5.2.1 下载时烧录
- 5.2.2 AT指令烧录
- 5.3 连接AWS亚马逊云
- 6. 总结
1. 概述
ESP32是乐鑫开发的一个WiFi 蓝牙双模组,支持ESP-IDF开发以及AT指令模式开发,关于两种模式的区别不在这赘述,大家可自行上网搜索了解
本文旨在介绍如何使用 ESP32 的 AT 指令模式连接AWS亚马逊云,由于连接AWS亚马逊云是需要双向认证的,相比其他的云平台,如阿里云、百度云、腾讯云较为复杂,因此特编写此博客已做记录及分享
关于如何使用 ESP32 AT指令连接阿里云、百度云等国内云平台,可直接参考官方的AT用户指南,ESP32-AT指令用户指南
2. 相关资料及设备说明
- 硬件平台:
- 基于 ESP32-WROOM-32 Node 开发板
- 相关资料及工具:
- ESP32 AT用户指南
- Flash下载工具
- xcom串口调试助手
3. AWS云平台接入
3.1 AWS云平台接入概述
AWS云平台,也就是亚马逊云,与阿里云接入相比较,其差别在于:
- 阿里云采用 用户名+密码 作为设备的判断依据进行接入
- 亚马逊云采用 设备证书 作为设备的判断依据进行接入
注意,此处所描述的接入均指采用 Mqtt 接入云平台
3.2 接入AWS云平台流程
接入AWS云平台的流程大体上可分为以下几个部分:
- 创建云端虚拟设备
- 获取 设备证书、密钥 等连接凭证
- 采用工具模拟设备接入云平台验证接入可行性
- 采用
Mqtt.fx
工具验证 - 采用
python
脚本验证
- 采用
- 采用实体设备接入云平台
- 将设备证书以不同的方式写入ESP32,将ESP32实体设备接入云平台
4. 云平台设备创建及验证
4.1 云平台设备创建
无论哪个云平台,实体设备均在云平台对应有一个云端虚拟设备,因此在设备接入之前,首先第一步就是在云平台创建对应的云端虚拟设备
打开亚马逊云,注册亚马逊云账号,https://aws.amazon.com/cn/
选择对应的地区
进入IOT core
创建云端设备,按照步骤以此进行,操作指引可以参考亚马逊云对应的文档,本文在创建的时候勾选的是 windows python方案进行验证
创建设备的第四步中会下载连接的工具包,解压此工具包,并按提示输入命令,以采用Python进行测试
clone完成之后会一直发送信息,同时在网页上可以看到接收到的信息,说明云端虚拟设备已经创建成功,并采用Python脚本模拟连接成功
4.2 采用 Python 脚本进行连接验证
在3.2中我们已经采用了 Python 脚本进行连接验证,故不在重复赘述
4.3 采用 Mqtt.fx 软件进行连接验证
- 打开 Mqtt.fx 软件
- 准备连接参数:
- 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,策略里面约束的
- Broker Address: 在AWS网页点击 连接一台设备时,下方的那个
3. 采用Mqtt.fx连接,如果没有连接成功,请自行检查上述中是否有错误
- 订阅主题
- 往主题发布消息,并查看接收
5. ESP32云平台接入
5.1 直接替换证书编译方式
- 参考官方的文档作为指导,编译AT工程,文档地址:编译 ESP-AT 工程
- 由于此方案官方文档描述比较清楚,不在此赘述,强调几点注意事项:
- 使用 git 拉取分支,注意要切换到发布分支!!!默认一般拉的是master分支,master分支是开发分支,不一定能编译成功!!!
- 代码编译成功之后,使用4.1章节中下载的设备证书、密钥、根证书 替换原有的设备证书、密钥、根证书,之后重新编译,编译成功之后进行烧录即可
5.2 PKI 文件导入方式
当不想自行编译AT固件,想在官方提供的AT固件的基础上进行加工修改,将证书导入,可以使用PKI文
件导入的方式将证书等文件导入ESP32设备中。
采用这种方式导入,首先需要做的是将 设备证书、私有密钥、根证书 转化为对应的bin文件,之后通过烧录软件进行烧录,或者通过AT指令进行烧录的方式对ESP32 原有的AT固件内的 此三类文件进行替换。
5.2.1 bin文件生成
- 下载python脚本:https://github.com/espressif/esp-at/blob/b3c6910/tools/AtPKI.py
- 使用命令将 设备证书、私有密钥、根证书 分别转化为对应的bin文件
- 命令使用说明在 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.
- a list of (type, file_name) pair:
- 注意 设备证书、私有密钥、根证书 的
PKI_LIST
里面的type
是不一样的!
实际操作如下:
官方参考文档:如何生成 PKI 文件
5.2.1 下载时烧录
下载工具:Flash 下载工具
ESP32 官方AT固件:官方发布的AT固件
- 首先下载官方发布的完整固件
- 之后将证书文件烧录进对应的地址,进行覆盖,ESP32 AT固件分区如下表所示:
- 我们这里需要替换的是
mqtt_ca
mqtt_cert
mqtt_key
这三个文件,不是client的也不是server的!!!,因此将5.2.1节中生成的bin文件分别下载至对应地址
5.2.2 AT指令烧录
除了使用烧录的方式将证书bin文件写入flash,ESP32 AT固件还支持通过串口指令写入AT固件
首先需要计算需要写入的 ca.bin
cert.bin
private_key.bin
文件的大小
可以通过串口助手进行计算,使用串口助手向一个没有连接设备的串口发送整个文件,串口助手下方会记录发送的字节数
查询AT分区信息
AT+SYSFLASH?
擦除
mqtt_cert
分区AT+SYSFLASH=0,"mqtt_cert"
写入
mqtt_cert
分区AT+SYSFLASH=1,"mqtt_cert",0,1232
擦除
mqtt_key
分区AT+SYSFLASH=0,"mqtt_key"
写入
mqtt_key
分区AT+SYSFLASH=1,"mqtt_key",0,1688
擦除
mqtt_ca
分区AT+SYSFLASH=0,"mqtt_ca"
写入
mqtt_ca
分区AT+SYSFLASH=1,"mqtt_ca",0,1200
更新完Flash之后需要复位下,以保证更新内容重新加载
AT+RST
5.3 连接AWS亚马逊云
在5.2中我们已经将设备证书、私有密钥、根证书烧录入ESP32的flash中,接下来便可以连接AWS了
使用串口工具分别连接调试串口和AT指令通讯串口
切换为Station模式
AT+CWMODE=1
连接热点
AT+CWJAP="abc","123456789"
设置SNTP服务器地址
AT+CIPSNTPCFG=1,8,"pool.ntp.org"
查询网络时间
AT+CIPSNTPTIME?
,主要用来确认网络可用配置MQTT服务器
AT+MQTTUSERCFG=0,5,"sdk-java","espressif","1234567890",0,0,""
,这里主题一定要是云端设备策略里面支持的,由于AWS采用证书认证,因此这里的设备名和设备密码随便写连接MQTT服务器
AT+MQTTCONN=0,"xxxxxxxxxxx.iot.us-east-2.amazonaws.com",8883,1
,这里的服务器地址请自行更换为自己的查看串口打印信息确认是否连接成功,连接失败的话请重新阅读自行查找原因
订阅主题
AT+MQTTSUB=0,"sdk/test/Python",1
往主题发布消息
AT+MQTTPUB=0,"sdk/test/Python","hello aws!",1,0
6. 总结
以上便是使用 ESP32 的 AT 模式连接基于双向认证的 AWS 的全部步骤了!
关于ESP32的AT指令使用,其实官方的文档说的还是比较仔细的了,但是有些细节之处没有明确说明,导致实际在开发过程中踩了很多的坑,但尽管官方文档存在一点点缺陷,但总体上而言是已经相当不错的了,如果你要使用 ESP32 的AT的模式,还是需要仔细阅读的
通过上述操作,相信现在你对于AWS基于证书的双向认证的这套连接方案也有了大概的了解,同时你也会发现,对于一个产品来说,如何将证书文件下载到ESP32中其实是一个非常麻烦的事情!
每一个ESP32模块都需要有一个云端生成的唯一的证书文件存放在ESP32设备内部,尽管通过直接编译或是使用下载工具下载的方式将证书bin文件下载到设备内,看上去都还不是很复杂,但是这对于一个产品项目来说,这对于产品的生产会是非常麻烦的一个问题,不过庆幸的是,ESP32还支持了通过串口方案对内部flash进行刷写,因此对于产品项目,看来大家只能选择采用此种方式了(如果你要使用AT模式连接AWS的话)
好啦,本篇博客分享写完了,期望能真正帮助到正在努力的你!
如果觉得很棒,你的点赞、收藏+关注是对我最大的鼓励!
开发者社区的明天需要大家一同开源共创,期待下一次你的分享,让我们一同携手共进,推动人类科技的发展!!!
创作不易,转载请注明出处~
ESP32 AT指令连接AWS亚马逊云相关推荐
- AWS亚马逊云账号注册、免费申请1年云服务器以及Amazon EC2服务与Amazon Lightsail服务的配置与使用
AWS亚马逊云账号注册.免费申请1年云服务器以及Amazon EC2服务与Amazon Lightsail服务的配置与使用 准备 EASYPAY易贝卡申请 全球付申请 亚马逊云 申请产品介绍 注册账号 ...
- 2021最新版-AWS亚马逊云RDS创建Aurora MySQL集群
AWS亚马逊云RDS创建Aurora MySQL集群 文章目录 AWS亚马逊云RDS创建Aurora MySQL集群 1.进入AWS-RDS控制台创建数据库 2.选择你要创建的数据库 3.Amazon ...
- AWS亚马逊云全球账号最新注册技巧(防风控)
学习目标: 提示:AWS亚马逊云全球账号最新注册技巧 学习内容: 一.介绍. AWS(亚马逊云)一般是出海项目首选云,全球云服务的大哥大,特别是拿热销的云服务器EC2来说,实例类型就分为了通用.计算优 ...
- AWS亚马逊云注册图文详细教程,多币种充值优势分析
一.介绍. AWS(亚马逊云)还是很不错的,特别是拿热销的云服务器EC2来说,实例类型就分为了通用.计算优化.内存优化.加速计算.存储优化几个方面进行分类,满足用户多方面的需求,而且具有很多附加功能, ...
- aws亚马逊云购买服务器的操作记录
需要先购买预留实例,否则购买的就是按量付费的服务器了,这样长时间用下来费用是贵很多的,不划算 1.购买预留实例 选中其中一个实例à购买更多类似实例就可以购买和之前一样付款方式的实例了 再次启动实例就是 ...
- 工业智能网关BL110应用之三十四: 如何连接配置亚马逊云服务器
BL110网关支持多个平台同时在线. 注:1.数据点框默认空白,即不选数据点,就是默认全部数据点发布.如果是多个发布主题,只能第一个发布主题可以默认空白,其他主题一定要选择发布的数据点,不能留空白. ...
- [ 云计算 | AWS ] 亚马逊云科技核心服务之计算服务(Part1:AWS EC2 星巴克为什么横向排队)
(星爸爸网络上的一张图) 注意上图中的5个人,对没错这5个人.一般情况星巴克的人员配置大概是这样的: 1个经理,在办公室 两个收银,在收银台(本文关注的重点) 三个人做咖啡 当你去过星巴克买咖啡时,你 ...
- 如何在AWS亚马逊云上运行Angular应用
这是我的亚马逊AWS登陆后的页面: Using username "ubuntu" Authenticating with public key "imported-op ...
- 在aws亚马逊云EC2上创建root用户,并使用root用户登录
1.根据官网提供的方法登录连接到EC2服务器(ssh连接) 2. 创建root的密码,输入如下命令: sudo passwd root 3.然后会提示你输入new password.输入一个你要设置的 ...
最新文章
- 写一个 iOS 复杂表单的正确姿势
- php编程习惯,经验分享:PHP编程的5个良好习惯(二)
- Java NIO学习系列四:NIO和IO对比
- 一文读懂中国互联网的30年(整合版)
- 没有qpress_关于网站没反应的阿里云帮助中心问题解答
- Java标识符与命名规则
- php数据库删除数据,php数据库删除数据的简单示例
- 蓝天采集器自动化采集发布
- python 同步event对象
- Windows上基于快捷方式的Putty免密码登陆
- IMU噪声参数辨识-艾伦方差
- Google 安装印象笔记剪藏插件
- DP算法——最大子序列系列Ⅰ
- 模拟器xposed框架安装7.1-64教程
- 小白学语句:省市区选择(带全国省市区数据)
- 初级X编程(非常好的入门学习资料)
- 根据ppt模板修改ppt内容
- QCAD与libreCAD的试用及比较,QCAD比libreCAD更好用,功能更强大
- Shell编程之免交互
- 游戏人工智能编程案例精粹(修订版) (Mat Buckland 著)
热门文章
- ESP32通过SPI读取多个SPI Slave--6个MAX31865 RTD芯片
- 产业数字金融的数字化与生态化
- linux系统rm什么命令,linux系统中rm命令的详细解释
- Android问题:java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法
- jquery 这些小技巧你懂吗
- 2021-08-22 tbpy帮助文档
- BAT 机器学习 1000 题 201-300(转)
- 洛谷-2151 [SDOI2009]HH去散步
- UVa10391 复合词
- 纯小白通过服务器搭建yolov5环境训练coco数据集