AWS IoT 作业库演示 - FreeRTOS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS IoT 作业库演示

重要

这是《FreeRTOS 用户指南》的存档版本,可用于 FreeRTOS 版本 202012.00。有关本文档的最新版本,请参阅《FreeRTOS 用户指南》

简介

AWS IoT 作业库演示向您展示了如何通过 MQTT 连接连接到 J AWS IoT obs 服务 AWS IoT、从设备检索作业并在设备上处理作业。 AWS IoT Jobs 演示项目使用 FreeRTOS Windows 端口,因此可以在 Windows 上使用 Visual Studio 社区版本进行构建和评估。无需微控制器硬件。该演示使用 TLS 建立与 AWS IoT MQTT 代理的安全连接,其方式与 MQTT 双向身份验证演示相同。

注意

要设置和运行 FreeRTOS 演示,请按照开始使用 FreeRTOS中的步骤操作。

源代码组织

演示代码在jobs_demo.c文件中,可以在GitHub网站或freertos/demos/jobs_for_aws/目录中找到。

配置 AWS IoT MQTT 代理连接

在本演示中,您将使用与 MQTT 代理的 AWS IoT MQTT 连接。此连接的配置方式与 MQTT 双向身份验证演示中的配置方式相同。

功能

该演示演示了用于从设备接收任务 AWS IoT 并在设备上处理这些任务的工作流程。该演示是交互式的,需要您使用 AWS IoT 控制台或 AWS Command Line Interface (AWS CLI) 来创建作业。有关创建作业的更多信息,请参阅 AWS CLI 命令参考中的 create-job。该演示要求将作业文档的 action 键设置为 print 才能将消息输出到控制台。

请参阅此作业文档的以下格式。

{ "action": "print", "message": "ADD_MESSAGE_HERE" }

您可以使用创建作业,如以下示例命令所示。 AWS CLI

aws iot create-job \ --job-id t12 \ --targets arn:aws:iot:region:123456789012:thing/device1 \ --document '{"action":"print","message":"hello world!"}'

该演示还使用将 action 键设置为 publish 的作业文档来将消息重新发布到主题。请参阅此作业文档的以下格式。

{ "action": "publish", "message": "ADD_MESSAGE_HERE", "topic": "topic/name/here" }

该演示会循环执行,直到收到一个将 action 键设置为 exit 的作业文档才会退出。作业文档的格式如下所示。

{ "action: "exit" }

Jobs 演示的入口点

Jobs 演示入口点函数的源代码可在上找到 GitHub。该函数执行以下操作:

  1. 使用 mqtt_demo_helpers.c 中的帮助程序函数建立 MQTT 连接。

  2. 使用 mqtt_demo_helpers.c 中的帮助程序函数为 NextJobExecutionChanged API 订阅 MQTT 主题。主题字符串是之前使用 AWS IoT Jobs 库定义的宏汇编而成的。

  3. 使用 mqtt_demo_helpers.c 中的帮助程序函数为 StartNextPendingJobExecution API 发布 MQTT 主题。主题字符串是之前使用 AWS IoT Jobs 库定义的宏汇编而成的。

  4. 反复调用 MQTT_ProcessLoop 以接收传入的消息,这些消息将交给 prvEventCallback 进行处理。

  5. 演示收到退出操作后,使用文件中的帮助程序函数取消订阅 MQTT 主题并断开连接。mqtt_demo_helpers.c

收到的 MQTT 消息的回调

prvEventCallback函数Jobs_MatchTopic从 AWS IoT Jobs 库调用,对传入的 MQTT 消息进行分类。如果消息类型对应于新作业,则会调用 prvNextJobHandler()

prvNextJobHandler 函数及其调用的函数从 JSON 格式的消息中解析作业文档,然后运行作业指定的操作。prvSendUpdateForJob 函数非常让人感兴趣。

为正在运行的作业发送更新

函数 prvSendUpdateForJob() Jobs_Update() 从作业库中调用,以填充紧随其后的 MQTT 发布操作中使用的主题字符串。