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