Help us understand the problem. What is going on with this article?

Azure IoT Hubを使ってみた

More than 3 years have passed since last update.

2017年4月2日 追記

長らくUWP用DeviceClientではMQTTの利用ができなかったのですが、最新のVersion 1.2.6で利用できるようになりました。
TransportTypeにMqttを選ぶだけです。


先日9月29日のAzureConにてAzure IoT Suite 及び Azure IoT Hubの提供がアナウンスされました。
さっそくAzure IoT Hub(以下 IoT Hub)を試してみました。
デバイスとIoT Hubとの間でメッセージを送受信できるところまでやってみます。

用意するもの

1.何かデバイス RaspberryPi2等 今回はUWPアプリのみで動作させるのでなくても大丈夫。

2.VisualStudio2015 (Community版でOK)

3.Windows8.1以上 UWPアプリを作成する都合でWindows10の方がいいと思います。

4.Microsoft Azure サブスクリプション。

Azure IoT Hubの作成

まずAzure 新ポータルにアクセスします。
10/3現在、日本語表示の場合にIoT Hubのデプロイに失敗することがあるので、ポータルの設定で言語をEnglishに変更しておきます。
IoTHub1-1.png

1.画面左上のNewをクリックします。

2.Internet of Thingsをクリックします。

3.Azure IoT Hub をクリックします。

4.Nameに好きな名前を入力します。アドレス名になるのでユニークな名前になるようにします。

5.料金およびスケールを選択します。最初なのでFreeを選択します。

6.リソースグループを選択するか、新規で作成します。On Create newをクリックすると新規作成できます。

7.ロケーションを選択します。現時点でヨーロッパ北部、東アジア、米国東部が選択できます。好きなところを選択してください。

8.最後にCreateをクリックするとIoT Hubが作成されます。

IoT Hubにデバイスを登録

次に作成したIoT Hubにデバイスを登録します。今回はAzure IoT SDKに含まれているDevice Explorer を使います。

1.次のサイトにアクセスします。
https://github.com/Azure/azure-iot-sdks/blob/master/tools/DeviceExplorer/doc/how_to_use_device_explorer.md

2.サイトの中ほどに DeviceExplorer.msi とリンクがあるので、クリックしてダウンロードします。

3.ダウンロードした SetupDeviceExplorer.msi をダブルクリックしてインストールします。

4.新ポータルからIoT Hubを選択し、All settingsをクリックします。続いてShared access policiesをクリックします。
IoTHub2-1.png

5.POLCYのiothubownerをクリックします。IoTHub3-1.png

6.Connection string-primary keyをクリップボードにコピーします。

7.C:\Program Files (x86)\Microsoft\DeviceExplorer中の DeviceExplorer.exe を起動します。deviceexplorer2-1.png

8.IoT Hub Connection Stringに先ほどコピーした内容をペーストしてからUpdateボタンを押します。

9.Shared Access SignatureにConnection Stringの内容が表示されます。deviceexplorer2-3.png

10.Managementタブを選択し、Createボタンをクリックします。deviceexplorer3-1.png

11.Device ID:に好きな名前を入力します。Primary Key、Secondary Keyは自動的に生成されます。deviceexplorer4-1.png

12.CreateボタンをクリックしてDeviceを登録します。
deviceexplorer5-1.png

Device用プログラム

Device用のプログラムを作成します。

1.VisualStudio2015で新規プロジェクトを作成します。テンプレートは空白のアプリ(ユニバーサル Windows)を選択してください。
VS2015-1-1.png

2.IoT Hubにアクセスするためのクライアントライブラリをインストールします。チュートリアルではNuGetパッケージマネージャーから検索してライブラリをインストールするように説明していますが、現時点では検索しても見つからないのでメニューからツール>NuGetパッケージマネージャー>パッケージマネージャーコンソールを選択して、「Install-Package Microsoft.Azure.Devices.Client -Pre」と入力してクライアントライブラリをインストールします。

3.ソリューションエクスプローラーからMainPage.xaml.csを開いて次のプログラムを入力します。

MainPage.xaml.cs
using System;
using Windows.UI.Xaml.Controls;

//追加
using System.Text;
using Microsoft.Azure.Devices.Client;
using System.Diagnostics;

namespace IoTHub
{
    /// <summary>
    /// 
    /// </summary>
    public sealed partial class MainPage : Page
    {
        private const string cnString = "[device connection string]";
        private DeviceClient deviceClient = DeviceClient.CreateFromConnectionString(cnString, TransportType.Http1);

        public MainPage()
        {
            this.InitializeComponent();
            SendDataToAzure();
            ReceiveDataFromAzure();           
        }

        /// <summary>
        /// 
        /// </summary>
        private async void ReceiveDataFromAzure()
        {
            Message receivedMessage;
            string messageData;

            while (true)
            {
                receivedMessage = await deviceClient.ReceiveAsync();

                if (receivedMessage!= null)
                {
                    messageData = Encoding.UTF8.GetString(receivedMessage.GetBytes());
                    Debug.WriteLine(messageData);
                    await deviceClient.CompleteAsync(receivedMessage);
                }
            }
        }

        /// <summary>
        /// 
        /// </summary>
        private async void SendDataToAzure()
        {

            var text = "Send from Device";
            var msg = new Message(Encoding.UTF8.GetBytes(text));

            await deviceClient.SendEventAsync(msg);
        }
    }
}

4.Device ExplorerのManagementタブで先ほど登録したデバイスがリストに表示されているので、右クリックをして一番下の「Copy connection string for selected device」を選びます。deviceexplorer6-1.png

5.プログラム上の[device connection string]の箇所を今コピーした内容にペーストして置き換えます。

動作確認

Device Explorerと先ほど入力したプログラムでメッセージの送受信の動作確認をしてみます。

1.Device ExplorerのDataタブに切り替えます。Monitorボタンをクリックします。
deviceexplorer7-1.png

2.VisualStudio2015でプログラムを実行します。
VS2015-3-1.png

3.しばらくするとDevice ExplorerのEvent Hub DataのところにDeviceからのメッセージが表示されます。deviceexplorer10.PNG

4.次にMessages To Deviceタブに切り替えます。

5.Message:テキストボックスに自由に入力してください。ただし半角英数のみになります。Add Time Stampにチェックを入れると送信時にタイムスタンプが追加されます。
deviceexplorer11-1.png

6.入力ができたらSendボタンをクリックします。

7.VisualStudioに切り替えて、出力ウインドウに先ほど送信したメッセージが表示されているいるのを確認してください。
VS2015-4-1.png

次は

これでDeviceからIoT Hubへのデータ送信および受信ができるようになりました。
DeviceからのデータはIoT Hubで受け取ってからStream Analyticsで処理をしてDBやBlob等に蓄積していくことになります。
IoT Hubからのメッセージ送信はWebJobで行うことになるかと思います。

Azure IoT Developer CenterサイトのConnect your deviceをクリックするとチャート式で自分が持っているDeviceを接続するためのサンプルプログラムを見ることができます。

今回は特にDeviceを使いませんでしたがプログラムはUWPアプリなので、ビルドプラットフォームをARMに変更するだけでWindows10 IoT Coreが動作するRPi2でもそのまま動作します。もしかすると.NET Micro Frameworkが動作するDevice(GR-SakuraとかNetduinoなど)もほとんど変更せずに動作するかもしれません。

クライアントライブラリもC、Node.js、JAVAと用意されているので色々なDeviceで利用できるのではないかと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした