AWS IoT 任務程式庫示範 - FreeRTOS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS IoT 任務程式庫示範

重要

這是 FreeRTOS 使用者指南的封存版本,適用於 FreeRTOS 版本 202210.00。如需本文件的最新版本,請參閱 FreeRTOS 使用者指南

簡介

AWS IoT Jobs 程式庫示範說明如何透過 MQTT 連線連線至 AWS IoT Jobs 服務、從中擷取任務 AWS IoT,以及在裝置上處理任務。 AWS IoT 任務示範專案使用 FreeRTOS Windows 連接埠,因此可以使用 Windows 上的 Visual Studio 社群版本建置和評估。不需要微控制器硬體。示範會建立使用 TLS 與 AWS IoT MQTT 代理程式的安全連線,方式與 相同coreMQTT 相互身分驗證示範

注意

若要設定和執行 FreeRTOS 示範,請遵循中的步驟FreeRTOS 入門

原始碼組織

示範程式碼位於 jobs_demo.c 檔案中,可在 GitHub 網站或 freertos/demos/jobs_for_aws/目錄中找到。

設定 AWS IoT MQTT 代理程式連線

在此示範中,您會使用 MQTT 連線至 AWS IoT MQTT 代理程式。此連線的設定方式與 相同coreMQTT 相互身分驗證示範

功能

示範顯示用來從 接收任務 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" }

任務示範的進入點

您可以在 GitHub 上找到 Jobs 示範進入點函數的原始碼。此函數會執行下列操作:

  1. 使用 中的協助程式函數建立 MQTT 連線mqtt_demo_helpers.c

  2. 使用 中的協助程式函數,訂閱 NextJobExecutionChanged API 的 MQTT 主題mqtt_demo_helpers.c。主題字串會較舊使用 AWS IoT Jobs 程式庫定義的巨集來組合。

  3. 使用 中的協助程式函數,發佈至 StartNextPendingJobExecution API 的 MQTT 主題mqtt_demo_helpers.c。主題字串會較舊使用 AWS IoT Jobs 程式庫定義的巨集來組合。

  4. 重複呼叫 MQTT_ProcessLoop 以接收傳遞給 prvEventCallback進行處理的傳入訊息。

  5. 示範收到結束動作後,請使用 mqtt_demo_helpers.c 檔案中的協助程式函數,取消訂閱 MQTT 主題並中斷連線。

已接收 MQTT 訊息的回呼

prvEventCallback 函數Jobs_MatchTopic會從 AWS IoT 任務程式庫呼叫 來分類傳入的 MQTT 訊息。如果訊息類型對應至新任務,則 prvNextJobHandler() 會呼叫 。

prvNextJobHandler 函數及其呼叫的函數,從 JSON 格式的訊息剖析任務文件,並執行任務指定的動作。特別感興趣的是 prvSendUpdateForJob函數。

傳送執行中任務的更新

函數 prvSendUpdateForJob() Jobs_Update() 會從任務程式庫呼叫 ,填入用於 MQTT 發佈操作的主題字串,緊接著是。