🕸️

Azure IoT Hubをつかってみる-クラウド側のメッセージをデバイスで受信

に公開

はじめに

クラウド→デバイスへのメッセージの通知を確認します


本記事の作業範囲

関連記事


作業手順

コードを受信用に修正する

コードベースでAzure IoT hubにメッセージ送信のプロジェクトを利用し、
SimulatedDevice.csに対し、以下の修正を行う

using System;
using Microsoft.Azure.Devices.Client;
using System.Text;
using System.Threading.Tasks;

namespace SimulatedDevice
{
    class SimulatedDevice
    {
        // IoT Hubとの通信を管理するDeviceClient
        private static DeviceClient s_deviceClient;

        // IoT Hubへの接続文字列(認証に使用)
        private const string s_connectionString = "HostName=studyiot.azure-devices.net;DeviceId=iotdev1;SharedAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

        // IoT Hubからのクラウド・ツー・デバイス(C2D)メッセージを受信する非同期メソッド
        private static async void ReceiveC2dAsync()
        {
            Console.WriteLine("\nReceiving cloud to device messages from service");
            while (true)
            {
                // IoT Hubからメッセージを非同期で受信
                Message receivedMessage = await s_deviceClient.ReceiveAsync();
                if (receivedMessage == null) continue; // 受信メッセージがなければループを継続

                // メッセージ内容を黄色で表示
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Received message: {0}", Encoding.ASCII.GetString(receivedMessage.GetBytes()));
                Console.ResetColor();

                // 受信メッセージの処理完了をIoT Hubに通知
                await s_deviceClient.CompleteAsync(receivedMessage);
            }
        }

        // アプリケーションのエントリーポイント
        private static void Main()
        {
            Console.WriteLine("IoT Hub Quickstarts - Simulated device. Ctrl-C to exit.\n");

            // MQTTプロトコルを使用してIoT Hubに接続
            s_deviceClient = DeviceClient.CreateFromConnectionString(s_connectionString, TransportType.Mqtt);

            // クラウドからのメッセージ受信を非同期で開始
            ReceiveC2dAsync();

            // ユーザー入力待ちによりアプリケーションが終了しないようにする
            Console.ReadLine();
        }
    }
}

ビルドと実行

ターミナルからビルドし、実行する

c2d> dotnet build simulated-device.csproj
MSBuild のバージョン 17.9.6+a4ecab324 (.NET)
  復元対象のプロジェクトを決定しています...
  復元対象のすべてのプロジェクトは最新です。
  simulated-device -> c2d\bin\Debug\net8.0\simulated-device.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:01.03
PS c2d> dotnet run --project simulated-device.csproj
IoT Hub Quickstarts - Simulated device. Ctrl-C to exit.


Receiving cloud to device messages from service
PS c2d> dotnet run --project simulated-device.csproj
IoT Hub Quickstarts - Simulated device. Ctrl-C to exit.

Azure側からメッセージ送信

  • デバイスを選択する
  • iotdev1を選択→"デバイスへのメッセージ"を選択する
  • メッセージ本文にメッセージを入力し、"メッセージの送信"を押す

受信メッセージを確認する

PS c2d> dotnet run --project simulated-device.csproj
IoT Hub Quickstarts - Simulated device. Ctrl-C to exit.

Receiving cloud to device messages from service
Received message: hello from IOT hub!

デバイス側で、クラウド側からのメッセージを受信することができました。


まとめ

デバイス→クラウド、クラウド→デバイスの両方向のやりとりが確認できました。
ただ、紹介したもの1方法であり、Device Twinsなど、システムに合った使い方が存在します
また、この辺を調査する際に、追加していきたいと思います

GitHubで編集を提案
株式会社ジード テックブログ

Discussion