UWPアプリケーションからAzure IoTデバイスを操作する



ArduinoからAzure IoT Hubへのデータ送信の記事の続きで、UWPアプリケーションからAzureクラウドのIoT Hubへデータを読み取り、送信する方法について説明します。 これは、Microsoft.Azure.Devices.Clientクライアントライブラリを使用して行われます。 Device Explorerまたはiothub-explorerを使用して、メッセージクラウドに送信されたこれらのメッセージを監視できます。

さらに、クラウドからデバイスにデータを送信する簡単なUWPアプリケーションを作成する方法について説明します。 最後に、Arduino MKR1000上のAzure IoTハブからメッセージを取得する方法の例を示します。

UWPアプリケーションを使用してAzure IoTデバイスをシミュレートする


Azure IoT Hub (現在のバージョン1.5)の接続サービスをダウンロードします。 インストール。 ユニバーサルアプリケーションプロジェクトを作成します。 接続されたサービスへのリンクを追加します





[カスタマイズ]をクリックします。 2つのオプションから選択できます。



最初のオプションはクラシックです。 特別なセキュリティ要件のない通常のプロジェクトがある場合。 IoTハブへの接続文字列はコードに保存されます。

2番目のオプションは実験的です。 デバイスはWindows Device Portalに登録されています。 次に、メニューで[TPM構成]アイテムを選択した後、デバイスにTPM(Trusted Platform Module)をインストールし、Azureハブからキーデータを入力する必要があります。 その結果、デバイスはプライマリAzureアクセスキーを保存しません。 代わりに、TPMデバイスは短命のSASトークンを生成します。

最初のオプションを選択し、Azureユーザーの資格情報を入力すると、ハブ選択ウィンドウが表示されます。



私の場合、ハブを1つしか作成しなかったため、実際に選択する必要はありません。 追加します。
デバイスを選択するための招待状を受け取ります。 繰り返しますが、私の場合、登録されているデバイスは1つだけです(Azureの無料機能を使用しています)



デバイスを選択すると、さまざまな必要なパッケージのインストールが行われます。



インストールが完了すると、次の使用方法を提供するマニュアルのあるページが開きます。

SendDeviceToCloudMessageAsync() 

メッセージを送信します。 メッセージを受信するには:

 ReceiveCloudToDeviceMessageAsync() 

ボタンを追加し、DeviceExplorerを使用してメッセージが送信されるかどうかを確認します。

 private async void btnCheck_Click(object sender, RoutedEventArgs e) { string message = await AzureIoTHub.ReceiveCloudToDeviceMessageAsync(); } 

レシートですべてをクリアする必要がある場合、SendDeviceToCloudMessageAsyncを使用してメッセージを送信すると、同じテキスト行が常に送信されます。 AzureIoTHub.csファイルにあるコードを検討してください。

 public static async Task SendDeviceToCloudMessageAsync() { var deviceClient = DeviceClient.CreateFromConnectionString(deviceConnectionString, TransportType.Amqp); #if WINDOWS_UWP var str = "Hello, Cloud from a UWP C# app!"; #else var str = "Hello, Cloud from a C# app!"; #endif var message = new Message(Encoding.ASCII.GetBytes(str)); await deviceClient.SendEventAsync(message); } 

最初は、Taskが送信するパラメーターとしてテキストの文字列を受け入れないが、「Hello ...」のハードコードされた値を送信する理由を理解していませんでした。 開発者がコードをコピーするのではなく、変更するために、これが特に行われたことが判明しました。 したがって、deviceClientオブジェクトの作成をどこか別のメソッドに取り込み、適切な場所で呼び出すことができます(たとえば、ページの読み込み時)。 さて、メッセージを送信するタスクは、すでに受け入れパラメーターを作成できます。 ところで、私はUTF8エンコーディングでメッセージを送信することができました。

 public static async Task SendDeviceToCloudMessageAsync(string texttosend) { var message = new Message(Encoding.UTF8.GetBytes(texttosend)); await deviceClient.SendEventAsync(message); } 

これで、デバイスエクスプローラーを使用してメッセージを受信したり、UWPアプリケーションに送信したりできます。

»英語の記事へのリンク: Visual Studioを使用してWindowsアプリをAzure IoT Hubに接続する
» Azure IoT HubプロジェクトのConnected ServiceのGitHubページへのリンク (突然問題が発生した場合、バグを提出する必要があります)

混乱が生じる可能性があることを再度明確にします。 デバイスからクラウド、およびクラウドからデバイスの両方にメッセージを送信できます。 UWPアプリケーションの例を挙げましょう。今回は、クラウドからデバイスにメッセージを送信します。

UWPアプリケーションを使用して、クラウドからデバイスにメッセージを送信します


NuGetパッケージマネージャーで、Microsoft.Azure.Devicesというフレーズでパッケージを見つけてインストールする必要があります。 念のため直接リンク: Microsoft Azure IoT Service SDK

名前空間を追加します。

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

そして、次の変数:

 static ServiceClient serviceClient; static string connectionString = "{  iot hub}"; 

接続文字列がAzureポータルから取得される場合:



デバイスにテキストを送信するメソッドが必要です

 private async static Task SendCloudToDeviceMessageAsync() { var commandMessage = new Message(Encoding.UTF8.GetBytes("light on")); //     await serviceClient.SendAsync("pseudoDevice", commandMessage); } 

ここで、pseudoDeviceは、メッセージの送信先デバイスのIDです。

この後、MainPageに追加する必要があります。InitializeComponent():

 serviceClient = ServiceClient.CreateFromConnectionString(connectionString); 

そして、ボタンを押すイベントのどこかで、デバイスにメッセージを送信するタスクを呼び出すことができます。

 private async void Button_Click(object sender, RoutedEventArgs e) { await SendCloudToDeviceMessageAsync(); } 

UWPアプリケーションの準備ができました。 これで、デバイスに「点灯」コマンドを送信できます。

Azure IoTハブArduino MKR1000ボードからメッセージを受信する


次のスケッチを使用して、ハブからメッセージを取得できます。 テキスト「light on」を含むメッセージを受信した場合、Arduino MKR1000はLEDをオンにします。
スケッチを少し構成する必要があります。 Wi-Fiネットワークのデータを入力します。

 char ssid[] = "xxx"; // SSID   Wi-Fi   char pass[] = "xxxxxxxx"; //    

そして、Azure IoTハブのデータ:

 char hostname[] = "xxxxxx.azure-devices.net"; // host name address for your Azure IoT Hub char feeduri[] = "/devices/xxxxxxx/messages/devicebound?api-version=2016-02-03"; //    xxxxxxx  id  char authSAS[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 

デバイスエクスプローラーを使用してauthSAS文字列(SASトークン)を取得する方法以前の記事で説明しました。 これは、「SharedAccessSignature sr =」で始まる行です。

Source: https://habr.com/ru/post/J303866/


All Articles