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 =」で始まる行です。



All Articles