4.6 KiB
インターネットでナイトライトを操作する - Wio Terminal
このレッスンのこの部分では、MQTTブローカーから送信されるコマンドをWio Terminalで受信する方法を学びます。
コマンドを受信する
次のステップでは、MQTTブローカーから送信されるコマンドを受信し、それに応答します。
タスク
コマンドを受信する。
-
VS Codeでナイトライトプロジェクトを開きます。
-
config.h
ファイルの末尾に以下のコードを追加して、コマンド用のトピック名を定義します。const string SERVER_COMMAND_TOPIC = ID + "/commands";
SERVER_COMMAND_TOPIC
は、デバイスがLEDコマンドを受信するために購読するトピックです。 -
MQTTクライアントが再接続された際にコマンドトピックを購読するように、
reconnectMQTTClient
関数の末尾に以下の行を追加します。client.subscribe(SERVER_COMMAND_TOPIC.c_str());
-
reconnectMQTTClient
関数の下に以下のコードを追加します。void clientCallback(char *topic, uint8_t *payload, unsigned int length) { char buff[length + 1]; for (int i = 0; i < length; i++) { buff[i] = (char)payload[i]; } buff[length] = '\0'; Serial.print("Message received:"); Serial.println(buff); DynamicJsonDocument doc(1024); deserializeJson(doc, buff); JsonObject obj = doc.as<JsonObject>(); bool led_on = obj["led_on"]; if (led_on) digitalWrite(D0, HIGH); else digitalWrite(D0, LOW); }
この関数は、MQTTクライアントがサーバーからメッセージを受信した際に呼び出されるコールバックです。
メッセージは符号なし8ビット整数の配列として受信されるため、テキストとして扱うには文字配列に変換する必要があります。
メッセージにはJSONドキュメントが含まれており、ArduinoJsonライブラリを使用してデコードされます。JSONドキュメントの
led_on
プロパティを読み取り、その値に応じてLEDをオンまたはオフにします。 -
createMQTTClient
関数に以下のコードを追加します。client.setCallback(clientCallback);
このコードは、MQTTブローカーからメッセージを受信した際に呼び出されるコールバックとして
clientCallback
を設定します。💁
clientCallback
ハンドラーは購読しているすべてのトピックに対して呼び出されます。後で複数のトピックをリッスンするコードを書く場合、コールバック関数に渡されるtopic
パラメータからメッセージが送信されたトピックを取得できます。 -
コードをWio Terminalにアップロードし、シリアルモニターを使用してMQTTブローカーに送信される光レベルを確認します。
-
実際のデバイスまたは仮想デバイスで検出される光レベルを調整します。ターミナルでメッセージが受信され、コマンドが送信される様子が確認できます。また、光レベルに応じてLEDがオンまたはオフになる様子も確認できます。
💁 このコードはcode-commands/wio-terminalフォルダーにあります。
😀 MQTTブローカーからのコマンドに応答するようにデバイスをコーディングすることに成功しました。
免責事項:
本書類は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を期すよう努めておりますが、自動翻訳には誤りや不正確な表現が含まれる可能性があります。原文(元の言語で記載された文書)が信頼できる情報源として優先されるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。