読者です 読者をやめる 読者になる 読者になる

銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

RPi2 で Windows IoT (4) Azure IoT Hub その1 メッセージを送る

今回は毛色を変えて Azure IoT Hubにつなげてみます。

azure.microsoft.com

MSのエヴァんじぇリストの方が記事にしているのですが、まだPreviewでここからもさらに様子が変わっている感じです。

IoT HubにWindows 10 IoT Coreでつなぐ - デバイスとITの架け橋 - Site Home - MSDN Blogs

今回はGitHub上のドキュメントを元に試してみました。

azure-iot-sdks/how_to_use_device_explorer.md at master · Azure/azure-iot-sdks · GitHub

まず最初にAzure ポータルからIoT Hubを作ります。名前を適当につけて、まずはFreeプランで作成しました。

f:id:tanaka733:20151213231231p:plain

作成したら、「Shared Access Policy」を開くと接続文字列が表示されます。これは後から使います。

f:id:tanaka733:20151213231638p:plain

次にWindows 10 IoT Core 上で動かすアプリをUWPで作ります。いつものようにプロジェクトを作ったところで、IoT HubのDevice ClientをNugetから追加します。

PM> Install-Package Microsoft.Azure.Devices.Client -Prerelease 

コードは簡単で、ButtonとTextBoxを追加したMainPageのコードビハインドでメッセージを送信してみます。

private void button_Click(object sender, RoutedEventArgs e)
{
    SendDataToAzure()
        .ContinueWith(t => { Debug.WriteLine(t.Exception); }, TaskContinuationOptions.OnlyOnFaulted);
}

private async Task SendDataToAzure()
{
    var deviceClient = DeviceClient.CreateFromConnectionString("<connectionstring>", TransportType.Http1);

    var text = textBox.Text;
    var msg = new Message(Encoding.UTF8.GetBytes(text));

    await deviceClient.SendEventAsync(msg);
}

この<connectionstring>の部分ですが、先ほどのPortalにあったConnectionStringそのままではありません。というのもデバイスを登録してデバイスIDというものを割り振らないといけないのです。で、このデバイスIDの管理とか、テスト用にメッセージを送受信するためのツールがDeviceExplorerとして提供されています。

azure-iot-sdks/how_to_use_device_explorer.md at master · Azure/azure-iot-sdks · GitHub

起動して表示されるConfigurationタブのところに、ポータルの「IoTHubOwner」の接続文字列とGateway Host Nameを入力してUpdateを押します。

f:id:tanaka733:20151213233216p:plain

次にManagementのタブでCreateを押してデバイスIDを発行します。今回はIDを生成してもらいましたが、自前のIDでもよさそうです。

f:id:tanaka733:20151213232002p:plain

で、作成すると接続文字列がコピーできるようになるので、その接続文字列を先ほどのコードのところに貼り付けます。あとは実行してボタンを押すとメッセージを送信できますが、送信されたことを確認するのもDeviceExplorerでできます。Dataタブを開くと、先ほど登録したデバイスIDが選択できるので、選択してMonitoringを押すとメッセージの監視ができます。

f:id:tanaka733:20151213233757p:plain

WinFormな上にデフォルトアイコンなのが残念ですが、簡単ですね!