亚马逊AWS官方博客

Amazon FreeRTOS 在ESP32芯片快速构建产品原型

物联网时代已经到来,大量物联网产品和服务正在改变着我们的生活,AWS IoT 服务提供行业领先的物联网服务,帮助物联网产品生产厂商快速构建产品,为海量的用户提供安全,可靠、高效的服务。
ESP32 芯片模组在物联网嵌入硬件有大量的用户基础,并且获得了AWS IOT平台的产品认证和支持,本文基于esp32模组,帮助客户构建产品原型,加快产品投放市场的进度。

1 System Overview

• 通过AWS FreeRTOS 基于ESP32模组连接 AWS Message Broker 采集数据;
• Rules Engine 分发数据到S3
• 设备发送消息通过Rules Engine ,SNS 发送消息通知

2 数据采集端(FreeRTOS ESP32)
2.1 开发环境搭建
安装串口连接驱动,根据选择的ESP32的开发板安装驱动

Development Board USB Driver Remarks
1 ESP32-DevKitC CP210x
2 ESP32-LyraT CP210x
3 ESP32-LyraTD-MSC CP210x
4 ESP32-PICO-KIT CP210x
5 ESP-WROVER-KIT FTDI
6 ESP32 Demo Board FTDI
7 ESP-Prog FTDI Programmer board (w/o ESP32)
8 ESP32-MeshKit-Sense n/a Use with ESP-Prog
9 ESP32-Sense Kit n/a Use with ESP-Prog

前提条件

安装完成 python 2.7.6+ ,pip ,pyserial, coreutils
Toolchain 安装

下载 https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz

mkdir -p ~/esp
cd ~/esp
tar -xzf xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
alias get_esp32="export PATH=$HOME/esp/xtensa-esp32-elf/bin:$PATH"
get_esp32

 

下载配置 Amazon FreeRTOS

cd ~
clone https://github.com/aws/amazon-freertos
git checkout release-1.4.x

 

2.2 简化ESP32基础代码

地址 https://renyzbucket.s3.cn-north-1.amazonaws.com.cn/code/freertos.code.tar.gz
目录结构

 

esp32port Amazon FreeRTOS esp32集成依赖包
src 项目代码
src/Makefile 项目make 文件
main 项目代码

环境配置
配置 Makefile (必选)

PROJECT_NAME := 项目名称

ifndef AMAZON_FREERTOS_PATH
export AMAZON_FREERTOS_PATH := amazon freeRTOS 所在目录(绝对路径)
endif
export AMAZON_FREERTOS_LIB_DIR := ../$(shell realpath --relative-to . $(AMAZON_FREERTOS_PATH))/lib

ifndef IDF_PATH
export IDF_PATH := $(AMAZON_FREERTOS_PATH)/lib/third_party/mcu_vendor/espressif/esp-idf
endif

EXTRA_COMPONENT_DIRS := $(CURDIR)/../esp32port

include $(IDF_PATH)/make/project.mk

 

创建策略

创建设备、证书、绑定策略

 

 

 

配置WiFi iot endpoint ,设备名称

修改 src/main/include/aws_clientcredential.h

static const char clientcredentialMQTT_BROKER_ENDPOINT[] = \
      "a1dcon64bh5ijl.iot.cn-north-1.amazonaws.com.cn";
#define clientcredentialIOT_THING_NAME "设备名称(和aws iot 配置一致)"
#define clientcredentialWIFI_SSID       "ssid"
#define clientcredentialWIFI_PASSWORD   "password"
#define clientcredentialWIFI_SECURITY   eWiFiSecurityWPA2

 

配置证书

打开下载的 xxx-certificate.pem.crt 和 xxx-private.pem.key 文件
修改 src/main/include/aws_clientcredential_keys.h (不要缺少 ‘\n’)如下:

#define keyCLIENT_CERTIFICATE_PEM \
"-----BEGIN CERTIFICATE-----\n"
证书内容
"-----END CERTIFICATE-----\n"

#define keyCLIENT_PRIVATE_KEY_PEM \
"-----BEGIN RSA PRIVATE KEY-----\n"\
证书内容

"-----END RSA PRIVATE KEY-----\n"

 

配置串口

ls /dev 找到串口硬件
cd src 目录
make menuconfig
配置串口目录 配置partion分区文件

 

 

 

 

执行 make flash monitor

 

 

Rules Engine 配置

可以配置监听device 发布的topic 转发到AWS 其他的Service, S3,SNS

通过 类SQL 的方式 订阅topic SELECT <Attribute> FROM <Topic Filter> WHERE <Condition>. 转发到其他服务

细节可以参照 https://docs.thinkwithwp.com/iot/latest/developerguide/what-is-aws-iot.html

备注
服务端如何获取客户端是否中断链接

MQTT协议的keep alive timeout 定义,在amanzon freertos 中通过
esp32/esp32port/freertos/config/aws_mqtt_agent_config.h
#define mqttconfigKEEP_ALIVE_INTERVAL_SECONDS 配置

关于设备连接状态 ,aws iot 预留的两个topic

$aws/events/presence/connected/clientid
$aws/events/presence/disconnected/clientid

 

参考文档

https://docs.thinkwithwp.com/iot/latest/developerguide/what-is-aws-iot.html
https://docs.thinkwithwp.com/freertos/latest/userguide/what-is-amazon-freertos.html
https://docs.espressif.com/projects/esp-idf/en/stable/get-started/

本篇作者

任耀洲

AWS解决方案架构师,负责企业客户应用在AWS的架构咨询和
设计。在微服务架构设计、数据库等领域有丰富的经验