AWS IoT ジョブライブラリのデモ
重要
このデモは、非推奨の Amazon-FreeRTOS リポジトリでホストされています。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon FreeRTOS Github リポジトリ移行ガイド」を参照してください。
序章
AWS IoT ジョブライブラリのデモは、MQTT 接続を介して AWS IoT ジョブサービスに接続し、AWS IoT からジョブを取得し、デバイス上でジョブを処理する方法を示します。AWS IoT ジョブデモプロジェクトは FreeRTOS Windows ポート
注記
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
-
mqtt_demo_helpers.cのヘルパー関数を使用して MQTT 接続を確立します。 -
NextJobExecutionChangedのヘルパー関数を使用してmqtt_demo_helpers.cAPI 向けの MQTT トピックをサブスクライブします。トピック文字列は、AWS IoT ジョブライブラリで定義されたマクロを使用して、先に収集されます。 -
StartNextPendingJobExecutionのヘルパー関数を使用してmqtt_demo_helpers.cAPI 向けの MQTT トピックを発行します。トピック文字列は、AWS IoT ジョブライブラリで定義されたマクロを使用して、先に収集されます。 -
MQTT_ProcessLoopを繰り返し呼び出して着信メッセージを受信し、処理のためにprvEventCallbackに渡します。 -
デモが終了アクションを受け取ったら、
mqtt_demo_helpers.cファイルのヘルパー関数を使用して、MQTT トピックのサブスクライブを解除し、接続を切断します。
受信した MQTT メッセージのコールバック
prvEventCallbackJobs_MatchTopic を呼び出し、着信 MQTT メッセージを分類します。メッセージタイプが新しいジョブに対応している場合、prvNextJobHandler() が呼び出されます。
prvNextJobHandlerprvSendUpdateForJob 関数です。
実行中のジョブの更新を送信する
prvSendUpdateForJob()Jobs_Update() を呼び出し、直後の MQTT 公開操作で使用されるトピック文字列を入力します。