AWS IoT Jobs 库演示
简介
AWS IoT Jobs 库演示展示了如何
通过 MQTT 连接,连接到 AWS IoT Jobs 服务、从 检索 AWS 作业IoT,以及在设备上处理作业。该
AWS IoT Jobs 演示项目使用
FreeRTOS Windows 移植,因此可以
在 Windows 上使用 Visual Studio 的
社区免费版本进行构建和评估。不需要微控制器硬件。该演示展示了与
使用 TLS 的 AWS IoT MQTT 代理建立安全连接,
其方式与 MQTT 相互身份验证演示相同。
源代码组织
演示项目名为 jobs_demo.sln
,
位于 GitHub 上的 FreeRTOS-Plus Jobs_Demo 存储库的以下目录:
FreeRTOS-Plus\Demo\AWS\Jobs_Windows_Simulator\Jobs_Demo
配置演示项目
演示使用 FreeRTOS-Plus-TCP TCP/IP堆栈,因此
请遵循
为 TCP/IP 入门
项目提供的说明执行以下操作:
- 安装
必要组件 (例如WinPCap )。
- 可选
设置静态或动态 IP 地址,网关地址和网络掩码。
- 可选
设置 MAC 地址。
-
选择主机上的以太网网络接口。
应在 Jobs 演示项目中更改上述设置。
配置 AWS IoT MQTT 代理连接
在本演示中,您将使用 MQTT 连接到 AWS IoT MQTT 代理。此连接的配置
方式与 MQTT 相互身份验证演示中的配置方式相同。
构建演示项目
此演示项目使用 Visual Studio 的社区免费版。要构建演示,请执行以下操作:
- 在 Visual Studio IDE 中打开 Visual Studio 解决方案文件
FreeRTOS-Plus/Demo/AWS/Jobs_Windows_Simulator/Jobs_Demo/jobs_demo.sln
。
- 在 IDE 的 “Build” 菜单中选择 “Build Solution”。
功能
该演示展示了用于从 AWS IoT 接收作业并在设备上处理作业的工作流程。演示为交互式,
并要求使用 AWS IoT 控制台或 AWS CLI 来创建作业。有关创建作业的更多信息,
请参阅 《AWS CLI 命令参考》中的 create-job。该演示要求作业文档
将“action”键设置为“print”以将消息打印到控制台。此作业文件的格式如下:
{
"action": "print",
"message": "INSERT_MESSAGE_HERE"
}
使用 AWS CLI,可按如下方式创建作业:
aws iot create-job \
--job-id t12 \
--targets arn:aws:iot:us-east-1:1234567890:thing/device1 \
--document '{"action":"print","message":"hello world!"}'
上面使用的实参仅为示例。
该演示还使用将“Action ”键设置为“Publish ”的作业文档
将消息重新发布到主题。作业文件的格式如下:
{
"action": "publish",
"message": "INSERT_MESSAGE_HERE",
"topic": "topic/name/here"
}
演示循环,直到收到一个作业文档,并将“action”键设置为“exit”以退出演示。作业文件的格式如下:
{
"action: "exit"
}
Jobs 演示的入口点
Jobs 演示入口点函数的源代码
位于 GitHub 上的 JobsDemoExample.c 中。此函数执行以下操作:
- 使用
mqtt_demo_helpers.c
中的辅助函数建立 MQTT 连接。
- 订阅
NextJobExecutionChanged
API 的 MQTT 主题,方法为:使用
mqtt_demo_helpers.c
中的辅助函数。(主题字符串之前已使用 Jobs 库定义的宏
进行汇编。)
- 发布到
StartNextPendingJobExecution
API 的 MQTT 主题,方法为:使用
mqtt_demo_helpers.c
中的辅助函数。 (主题字符串之前已使用 Jobs 库定义的宏
进行汇编。)
- 反复调用
MQTT_ProcessLoop
以接收传入消息,这些消息将传递给
prvEventCallback
进行处理。
- 演示收到退出操作后,
使用
mqtt_demo_helpers.c
中的辅助函取消订阅 MQTT 主题并断开连接。
接收到的 MQTT 消息的回调
此函数从 Jobs 库调用 Jobs_MatchTopic
以对传入的 MQTT 消息进行分类。
如果消息类型对应于新作业,则会调用 prvNextJobHandler
。
函数 prvNextJobHandler
及其调用的函数
从 JSON 格式的消息中解析作业文档,并执行作业指定的操作。尤其值得关注的函数是
prvSendUpdateForJob
。
此传入消息回调函数的源代码位于 GitHub 上的 JobsDemoExample.c 中。
发送正在运行的作业的更新
函数 prvSendUpdateForJob
从 Jobs 库调用 Jobs_Update
以填充紧随其后的 MQTT 发布操作中使用的主题字符串。
prvSendUpdateForJob
函数的源代码位于 GitHub 上的 JobsDemoExample.c 中
。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.