Amazon IoT工作库演示 - FreeRTOS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon IoT工作库演示

重要

此演示托管在 Amazon-FreeRTOS 存储库中,该存储库已过时。建议您在创建新项目时从这里开始。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的现有 FreeRTOS 项目,请参阅亚马逊 FreeRTOS Github 存储库迁移指南

介绍

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

注意

要设置和运行 FreeRTOS 演示,请按照中的步骤操作FreeRTOS 入门

源代码组织

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

配置 MAmazon IoT QTT 代理连接

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

功能

该演示显示了用于从设备接收任务Amazon IoT并在设备上处理任务的工作流程。该演示是交互式的,需要您使用Amazon IoT控制台或Amazon Command Line Interface (Amazon CLI) 来创建作业。有关创建作业的更多信息,请参阅《Amazon CLI命令参考》中的 create-jo b。该演示要求将作业文档的action密钥设置print为向控制台打印消息。

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

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

您可以使用创建任务,如以下示例命令所示。Amazon 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" }

乔布斯演示的切入点

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

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

  2. 使用中的辅助函数订阅NextJobExecutionChanged API 的 MQTT 主题mqtt_demo_helpers.c。主题字符串是先前使用由Amazon IoT Jobs 库定义的宏汇编而成的。

  3. 使用中的辅助函数,发布到StartNextPendingJobExecution API 的 MQTT 主题mqtt_demo_helpers.c。主题字符串是先前使用由Amazon IoT Jobs 库定义的宏汇编而成的。

  4. 反复呼叫MQTT_ProcessLoop以接收传入的消息,这些消息已移交prvEventCallback给处理。

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

对收到的 MQTT 消息进行回调

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

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

发送正在运行的任务的更新

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