🕸️
Azure IoT Hubをつかってみる-クラウド側のメッセージをデバイスで受信
はじめに
クラウド→デバイスへのメッセージの通知を確認します
本記事の作業範囲
- Azure Portalでの環境構築とVSCode IoT拡張機能によるメッセージ送信の環境をベースにする
- コードベースでAzure IoT hubにメッセージ送信のプロジェクトをベースにする
- .NETでのコードから、クラウドからのメッセージをデバイス側で受信する
関連記事
- Azure Portalでの環境構築とVSCode IoT拡張機能によるメッセージ送信
- コードベースでAzure IoT hubにメッセージ送信
- ラズパイから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