AWS IoT ジョブライブラリのデモ - FreeRTOS

AWS IoT ジョブライブラリのデモ

重要

このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon FreeRTOS Github リポジトリ移行ガイド」を参照してください。

序章

AWS IoT ジョブライブラリのデモは、MQTT 接続を介して AWS IoT ジョブサービスに接続し、AWS IoT からジョブを取得し、デバイス上でジョブを処理する方法を示します。AWS IoT ジョブデモプロジェクトは FreeRTOS Windows ポートを使用するので、Windows で Visual Studio コミュニティバージョンを使用して構築して評価できます。マイクロコントローラハードウェアは必要ありません。デモでは、coreMQTT Mutual Authentication デモ と同じ方法で TLS を使用する AWS IoT MQTT ブローカーへのセキュアな接続を確立します。

注記

FreeRTOS デモをセットアップして実行するには、FreeRTOS の開始方法 の手順に従います。

ソースコードの編成

デモのコードは jobs_demo.c ファイルにあり、GitHub ウェブサイトまたは freertos/demos/jobs_for_aws/ ディレクトリで見つけることができます。

AWS IoT MQTT ブローカー接続を設定する

このデモでは、AWS IoT MQTT ブローカーへの MQTT 接続を使用します。この接続は、coreMQTT Mutual Authentication デモ と同じ方法で設定されています。

機能

デモでは、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 にあります。この関数は次の操作を実行します。

  1. mqtt_demo_helpers.c のヘルパー関数を使用して MQTT 接続を確立します。

  2. NextJobExecutionChanged のヘルパー関数を使用して mqtt_demo_helpers.c API 向けの MQTT トピックをサブスクライブします。トピック文字列は、AWS IoT ジョブライブラリで定義されたマクロを使用して、先に収集されます。

  3. StartNextPendingJobExecution のヘルパー関数を使用して mqtt_demo_helpers.c API 向けの MQTT トピックを発行します。トピック文字列は、AWS IoT ジョブライブラリで定義されたマクロを使用して、先に収集されます。

  4. MQTT_ProcessLoop を繰り返し呼び出して着信メッセージを受信し、処理のために prvEventCallback に渡します。

  5. デモが終了アクションを受け取ったら、mqtt_demo_helpers.c ファイルのヘルパー関数を使用して、MQTT トピックのサブスクライブを解除し、接続を切断します。

受信した MQTT メッセージのコールバック

prvEventCallback 関数は、AWS IoT ジョブライブラリから Jobs_MatchTopic を呼び出し、着信 MQTT メッセージを分類します。メッセージタイプが新しいジョブに対応している場合、prvNextJobHandler() が呼び出されます。

prvNextJobHandler 関数とこの関数に呼び出される関数は、JSON 形式のメッセージからジョブドキュメントを解析し、ジョブで指定されたアクションを実行します。特に興味深いのは prvSendUpdateForJob 関数です。

実行中のジョブの更新を送信する

prvSendUpdateForJob() 関数は、ジョブライブラリから Jobs_Update() を呼び出し、直後の MQTT 公開操作で使用されるトピック文字列を入力します。