本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 HTTP 的 OTA 更新的先决条件
本节介绍使用 HTTP 执行 over-the-air (OTA) 更新的一般要求。从 201912.00 版本开始,FreeRTOS OTA 可以使用 HTTP 或 MQTT 协议将固件更新映像从设备传输到设备。 AWS IoT
注意
-
尽管可以使用 HTTP 协议来传输固件映像,但仍然需要 CoreMQTT 代理库,因为与之的其他交互都 AWS IoT Core 使用 CoreMQTT 代理库,包括发送或接收任务执行通知、作业文档和执行状态更新。
-
在为 OTA 更新作业同时指定 MQTT 和 HTTP 协议时,每个设备上的 OTA 代理软件的设置将确定用于传输固件映像的协议。要将 OTA 代理从默认 MQTT 协议方法更改为 HTTP 协议,可以修改用于编译设备的 FreeRTOS 源代码的标头文件。
最低要求
-
设备固件必须包含必要的 FreeRTOS 库(coreMQTT 代理、HTTP、OTA 代理及其依赖项)。
-
要求安装 FreeRTOS 版本 201912.00 或更高版本来更改 OTA 协议的配置,以便启用通过 HTTP 传输 OTA 数据。
配置
请参阅 \vendors\boards\
board
\aws_demos\config_files\ota_config.h
启用通过 HTTP 进行的 OTA 数据传输
-
将
configENABLED_DATA_PROTOCOLS
更改为OTA_DATA_OVER_HTTP
。 -
在进行 OTA 更新时,您可以指定两项协议以便能够使用 MQTT 协议或 HTTP 协议。您可以通过将
configOTA_PRIMARY_DATA_PROTOCOL
更改为OTA_DATA_OVER_HTTP
来将设备所使用的主协议设置为 HTTP。
注意
OTA 数据操作仅支持 HTTP。对于控制操作,您必须使用 MQTT。
设备特定的配置
- ESP32
-
由于 RAM 量是有限的,因此,在将 HTTP 作为 OTA 数据协议启用时,必须关闭 BLE。在
vendors/espressif/boards/esp32/aws_demos/config_files/aws_iot_network_config.h
文件中,仅将 configENABLED_NETWORKS
更改为AWSIOT_NETWORK_TYPE_WIFI
。/** * @brief Configuration flag which is used to enable one or more network interfaces for a board. * * The configuration can be changed any time to keep one or more network enabled or disabled. * More than one network interfaces can be enabled by using 'OR' operation with flags for * each network types supported. Flags for all supported network types can be found * in "aws_iot_network.h" * */ #define configENABLED_NETWORKS ( AWSIOT_NETWORK_TYPE_WIFI )
内存使用量
在将 MQTT 用于数据传输时,MQTT 连接不需要额外的堆内存,因为它将在控制操作和数据操作之间共享。不过,通过 HTTP 启用数据需要额外的堆内存。以下是使用 FreeRTOS xPortGetFreeHeapSize
API 计算的所有受支持平台的堆内存使用情况数据。您必须确保有足够的 RAM 才能使用 OTA 库。
- 德州仪器 CC322 0SF-LAUNCHXL
-
控制操作 (MQTT):12 KB
数据操作 (HTTP):10 KB
注意
TI 使用更少的 RAM,因为它在硬件上使用 SSL,所以它不使用 mbedtls 库。
- 微芯片好奇号 PIC32 MZEF
-
控制操作 (MQTT):65 KB
数据操作 (HTTP):43 KB
- Espressif ESP32
-
控制操作 (MQTT):65 KB
数据操作 (HTTP):45 KB
注意
BLE ESP32 开启需要大约 87 KB 的内存。RAM 不足,无法启用所有这些操作,上面的特定于设备的配置中已说明这一点。
- Windows 模拟器
-
控制操作 (MQTT):82 KB
数据操作 (HTTP):63 KB
- Nordic nrf52840-dk
-
不支持 HTTP。
设备策略
通过此策略,您能够使用 MQTT 或 HTTP 进行 OTA 更新。
每个使用 HTTP 接收 OTA 更新的设备都必须在 AWS IoT 中注册为事物,并且该设备必须具有类似此处所列策略的附加策略。您可以在 AWS IoT 核心策略操作和 AWS IoT 核心操作资源中找到有关 "Action"
和 "Resource"
对象中项目的更多信息。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:
partition
:iot:region
:account
:client/${iot:Connection.Thing.ThingName}" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:partition
:iot:region
:account
:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ] }, { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:partition
:iot:region
:account
:topic/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ] } ] }
备注
-
利用
iot:Connect
权限,您的设备可以通过 MQTT 连接到 AWS IoT 。 -
AWS IoT 任务主题的
iot:Subscribe
和iot:Publish
权限 (.../jobs/*
) 允许连接的设备接收作业通知和作业文档,并发布任务执行的完成状态。 -
这些
iot:Receive
权限 AWS IoT Core 允许将有关这些主题的消息发布到当前连接的设备。每次传输 MQTT 消息时,都将检查此权限。您可以使用此权限,撤消对当前订阅主题的客户端的访问权限。