メインコンテンツまでスキップ

インターネットを介してナイトライトを制御する - 仮想IoTハードウェアとラズベリーパイ

このレッスンのこの部分では、MQTTブローカーからラズベリーパイまたは仮想IoTデバイスに送信されるコマンドを購読します。

コマンドを購読する

次のステップは、MQTTブローカーから送信されたコマンドを購読し、それに応答することです。

タスク

コマンドを購読する。

  1. VS Codeでナイトライトプロジェクトを開きます。

  2. 仮想IoTデバイスを使用している場合は、ターミナルが仮想環境を実行していることを確認します。ラズベリーパイを使用している場合は、仮想環境を使用しません。

  3. client_telemetry_topicの定義の後に次のコードを追加します:

    server_command_topic = id + '/commands'

    server_command_topicは、デバイスがLEDコマンドを受信するために購読するMQTTトピックです。

  4. メインループの直前、mqtt_client.loop_start()行の後に次のコードを追加します:

    def handle_command(client, userdata, message):
    payload = json.loads(message.payload.decode())
    print("Message received:", payload)

    if payload['led_on']:
    led.on()
    else:
    led.off()

    mqtt_client.subscribe(server_command_topic)
    mqtt_client.on_message = handle_command

    このコードは、メッセージをJSONドキュメントとして読み取り、led_onプロパティの値を確認する関数handle_commandを定義します。Trueに設定されている場合はLEDが点灯し、それ以外の場合は消灯します。

    MQTTクライアントは、サーバーがメッセージを送信するトピックを購読し、メッセージが受信されたときに呼び出されるhandle_command関数を設定します。

    💁 on_messageハンドラーは、購読しているすべてのトピックに対して呼び出されます。後で複数のトピックをリッスンするコードを書く場合、ハンドラー関数に渡されるmessageオブジェクトからメッセージが送信されたトピックを取得できます。

  5. 前の部分の課題のコードを実行したのと同じ方法でコードを実行します。仮想IoTデバイスを使用している場合は、CounterFitアプリが実行されており、光センサーとLEDが正しいピンに作成されていることを確認してください。

  6. 物理的または仮想的なデバイスによって検出される光レベルを調整します。受信されたメッセージと送信されたコマンドはターミナルに書き込まれます。光レベルに応じてLEDも点灯および消灯します。

💁 このコードはcode-commands/virtual-deviceフォルダーまたはcode-commands/piフォルダーにあります。

😀 デバイスがMQTTブローカーからのコマンドに応答するようにコード化することに成功しました。