You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ja/2-farm/lessons/4-migrate-your-plant-to-the.../single-board-computer-conne...

6.8 KiB

IoTデバイスをクラウドに接続する - 仮想IoTハードウェアとRaspberry Pi

このレッスンのこの部分では、仮想IoTデバイスまたはRaspberry PiをIoT Hubに接続し、テレメトリを送信し、コマンドを受信します。

デバイスをIoT Hubに接続する

次のステップは、デバイスをIoT Hubに接続することです。

タスク - IoT Hubに接続する

  1. VS Codeでsoil-moisture-sensorフォルダーを開きます。仮想IoTデバイスを使用している場合は、ターミナルで仮想環境が実行されていることを確認してください。

  2. いくつかの追加のPipパッケージをインストールします:

    pip3 install azure-iot-device
    

    azure-iot-deviceは、IoT Hubと通信するためのライブラリです。

  3. 以下のインポートを既存のインポートの下にあるapp.pyファイルの冒頭に追加します:

    from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
    

    このコードは、IoT Hubと通信するためのSDKをインポートします。

  4. import paho.mqtt.client as mqttの行を削除します。このライブラリはもう必要ありません。MQTTコード全体を削除し、トピック名、mqtt_clientを使用するコード、およびhandle_commandを含むすべてを削除します。ただし、while True:ループは保持し、このループ内のmqtt_client.publish行だけを削除してください。

  5. インポート文の下に以下のコードを追加します:

    connection_string = "<connection string>"
    

    <connection string>を、このレッスンの前半で取得したデバイスの接続文字列に置き換えてください。

    💁 これは最善の方法ではありません。接続文字列はソースコードに保存すべきではありません。ソースコード管理にチェックインされ、誰でも見つけることができる可能性があります。ここでは簡単さを優先してこの方法を使用しています。理想的には、環境変数やpython-dotenvのようなツールを使用するべきです。これについては次のレッスンで詳しく学びます。

  6. このコードの下に、IoT Hubと通信できるデバイスクライアントオブジェクトを作成し、接続するための以下のコードを追加します:

    device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
    
    print('Connecting')
    device_client.connect()
    print('Connected')
    
  7. このコードを実行します。デバイスが接続されるのが確認できます。

    pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py 
    Connecting
    Connected
    Soil moisture: 379
    

テレメトリを送信する

デバイスが接続されたので、MQTTブローカーではなくIoT Hubにテレメトリを送信できます。

タスク - テレメトリを送信する

  1. while Trueループ内のスリープの直前に以下のコードを追加します:

    message = Message(json.dumps({ 'soil_moisture': soil_moisture }))
    device_client.send_message(message)
    

    このコードは、土壌湿度の読み取り値をJSON文字列として含むIoT HubのMessageを作成し、デバイスからクラウドへのメッセージとしてIoT Hubに送信します。

コマンドを処理する

デバイスは、リレーを制御するためにサーバーコードから送信されるコマンドを処理する必要があります。これは直接メソッドリクエストとして送信されます。

タスク - 直接メソッドリクエストを処理する

  1. while Trueループの前に以下のコードを追加します:

    def handle_method_request(request):
        print("Direct method received - ", request.name)
    
        if request.name == "relay_on":
            relay.on()
        elif request.name == "relay_off":
            relay.off()    
    

    このコードは、IoT Hubから直接メソッドが呼び出されたときに呼び出されるhandle_method_requestメソッドを定義します。各直接メソッドには名前があり、このコードはリレーをオンにするrelay_onメソッドとリレーをオフにするrelay_offメソッドを期待します。

    💁 これを単一の直接メソッドリクエストとして実装し、リクエストオブジェクトから利用可能なペイロードでリレーの希望する状態を渡すこともできます。

  2. 直接メソッドには、呼び出し元のコードに処理されたことを伝える応答が必要です。handle_method_request関数の最後に以下のコードを追加して、リクエストへの応答を作成します:

    method_response = MethodResponse.create_from_method_request(request, 200)
    device_client.send_method_response(method_response)
    

    このコードは、HTTPステータスコード200を持つ直接メソッドリクエストへの応答を送信し、これをIoT Hubに返します。

  3. この関数定義の下に以下のコードを追加します:

    device_client.on_method_request_received = handle_method_request
    

    このコードは、直接メソッドが呼び出されたときにIoT Hubクライアントがhandle_method_request関数を呼び出すように指示します。

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

😀 土壌湿度センサーのプログラムがIoT Hubに接続されました

免責事項:
この文書は、AI翻訳サービス Co-op Translator を使用して翻訳されています。正確性を追求しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。元の言語で記載された文書が公式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。この翻訳の使用に起因する誤解や誤認について、当方は一切の責任を負いません。