本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 MQTT 的 OTA 更新的先决条件
本节介绍使用 MQTT 执行 over-the-air (OTA 更新)的一般要求。
最低要求
-
设备固件必须包含必要的 FreeRTOS 库(CoreMQTT 代理、OTA 更新及其依赖关系)。
-
需要 FreeRTOS 版本 1.4.0 或更高版本。但是,我们建议您尽可能使用最新的版本。
配置
从版本 201912.00 开始,FreeRTOS OTA 可以使用 HTTP 或 MQTT 协议将固件更新映像从设备传输Amazon IoT到设备。如果您在 FreeRTOS 中创建 OTA 更新时同时指定这两个协议,则每台设备将确定用于传输映像的协议。参阅 使用 HTTP 的 OTA 更新的先决条件 了解更多信息。
默认情况下,中的 OTA 协议的配置ota_config.h
设备特定的配置
无。
内存使用量
在将 MQTT 用于数据传输时,MQTT 连接不需要额外的内存,因为它将在控制操作和数据操作之间共享。
设备策略
每个使用 MQTT 接收 OTA 更新的设备都必须在 Amazon IoT 中注册为事物,并且该设备必须具有类似此处所列策略的附加策略。您可以在Amazon IoT核心策略操作和Amazon 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}/streams/*", "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}/streams/*", "arn:partition
:iot:region
:account
:topic/$aws/things/${iot:Connection.Thing.ThingName}/jobs/*" ] } ] }
注意
-
利用
iot:Connect
权限,您的设备可以通过 MQTT 连接到 Amazon IoT。 -
利用 Amazon IoT 作业 (
.../jobs/*
) 主题的iot:Subscribe
和iot:Publish
权限,连接的设备能够接收作业通知和作业文档,并发布作业执行的完成状态。 -
利用 Amazon IoT OTA 流 (
.../streams/*
) 主题的iot:Subscribe
和iot:Publish
权限,连接的设备能够从 Amazon IoT 中提取 OTA 更新数据。在通过 MQTT 执行固件更新时,需要这些权限。 -
利用
iot:Receive
权限,Amazon IoT Core 能够将有关这些主题的消息发布到连接的设备。每次传输 MQTT 消息时,都将检查此权限。您可以使用此权限,撤消对当前订阅主题的客户端的访问权限。