United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

Windows10 IoT Coreとラズベリーパイとクラウドツールでアプリケーション開発に挑戦!

前回の記事ではMicrosoftの開発環境を使ってIoT機能を開発することを意図して、Raspberry Pi用のOS「Windows 10 IoT Core」を紹介しました。Windows 10 IoT Coreは小型デバイス向けに最適化されたWindowsのフレーバーでスケーラブルなIoTインフラプロジェクトに必要なワークフローを効率化するために設計されています。今回はRaspberry PiにWindowsをインストールした上でデバイスをMicrosoft Azureに接続するプロセスを紹介し、エッジとクラウドのギャップを埋めることに主眼を置きます。

必要なもの

Azureの接続

Raspberry Piをクラウドに接続するために最初にすることはAzureサービスへの安全な接続を確立することです。IoT Core DashboardからAzureにログインし、「connect to Azure」タブをクリックして無料のアカウントを作成します。これでIoT Core DashboardからAzureにログインできます。完了したら必要なAzureリソースを作成し、Dashboardでデバイスをプロビジョニング(Provision)することでクラウドへの安全な接続を確立することができます。

プロビジョニングとは: 必要に応じてネットワークやコンピュータの設備などのリソースを提供できるよう予測し、準備しておくこと。仮想化システムなどでよく使われます。

Connect to Azure setup screen

Azureクラウドのフレームワークは様々な形式のデータを柔軟に収集、保存、適用することができる相互運用可能なリソースの階層を中心に設計されています。プロビジョニングプロセスについては本アプリケーションのデータフローを確立するために、一連のリソースを作成していきます。

Provision your device setup screen

このプロジェクトでは初期接続を設定するために2つのAzureリソースの階層が必要です。これらはIoT Core DashboardでRaspberry PiをAzureアカウントにプロビジョニングするために使用できます。

  1. あらゆるネットワークイベントを処理するIoT Hub
  2. データソースを認証するためのデバイスID

これらのリソースを作成するにはまずAzureポータルにログインする必要があります。ログイン後、ページ上部の検索バーを使って「IoT Hub」リソースに移動し、ページ上部の「create」ボタンを使ってプロジェクト用の新しいインスタンスを初期化します。

IoT hub resource screen

このメニューを使って新しいIoT Hubとプロジェクトの依存関係を保持するResource Groupを初期化します。ドロップダウンメニューの下にある「create new」リンクを使って新しいリソースグループに名前を付けます。次にシステムの拠点と新しいIoT Hubの名前を選択し、「review + create」をクリックすると両方のリソースタイプが初期化され、自動的にリンクされます。

Provision your devices and create new device

完了したらIoT Core Dashboardに戻り、最初のドロップダウンメニューで新しいIoT Hubインスタンスを選択して、Raspberry PiがAzureと直接通信するようにプロビジョニングします。次に「create new device」ボタンをクリックしてデバイスに識別名を付け、最後のドロップダウンメニューでローカルWi-Fiネットワーク上のデバイスを見つけます。「プロビジョニング(provision)」ボタンをクリックすると、セットアップが完了します。

クラウドへのメッセージ送信

デバイスのプロビジョニングが完了したら次はクラウドにテストメッセージを送信して、自分たちのプロジェクトを検証します。そのためにまずは、Visual Studioで新しいC#プロジェクトを作成して、最初のIoT Coreアプリを構築する必要があります。この例では広範なWindows IoT Core Samplesリポジトリで提供されているHello CloudC#サンプルプロジェクトを改変しながら行っていきます。

またこのプロジェクトのコードファイルはGitHubにもあります。

Create a new project screen

まずVisual Studioを起動しスタートメニューから新規に空のUniversal Windows Platform(UWP)プロジェクトを作成します。

Visual Studio - create a new blank Universal Windows Platform (UWP) project

ウインドウの右側にあるプロジェクトエクスプローラーを使って、「MainPage.xaml.cs」というデフォルトのメインプロジェクトコードファイルに移動します。ここにはアプリが実行時に呼び出すメイン関数があります。

public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            SendDeviceToCloudMessagesAsync();
        }

        static async void SendDeviceToCloudMessagesAsync()
        {

            string IoTHubHostName = ""; // Azure IoT Hub Hostname
            string DevicePrimaryKey = ""; // Device Primary Key
            string DeviceID = ""; // Device ID or Name

            var deviceClient = DeviceClient.Create(IoTHubHostName,
                    AuthenticationMethodFactory.
                        CreateAuthenticationWithRegistrySymmetricKey(DeviceID, DevicePrimaryKey),
                    TransportType.Http1);

            var str = "Hello, Cloud!";
            var message = new Message(Encoding.UTF8.GetBytes(str));

            message.ContentEncoding = "utf-8";
            message.ContentType = "application/json";

            await deviceClient.SendEventAsync(message);
        }
    }

メインページのクラスを上記のコードのように変更します。このコードは起動時に非同期関数を呼び出し、JSON形式の「Hello, Cloud」メッセージを一つだけAzureに送信するデバイスクライアントを作成します。

Visual Studio - Enter device credentials

上図のように見つかった依存関係のエラーは、エラーウインドウの左側にある電球のメニューを使って修正し、関数の上部にある文字列変数を使ってデバイスの認証情報を挿入します。

IoT Hub in the Azure Portal

IoT Hubのホスト名はAzureポータルのIoT Hubの概要パネルで確認できます。プライマリデバイスキーとIDはIoT Hubのサイドメニューの「IoT devices」で確認できます。

Visual Studio - Build the projectプロジェクトをビルドしページ上部のビルドターゲットタイプをARMに変更し、リモートマシンを選択してローカルネットワーク上のRaspberry Piを検索します。コードが完成したら実行して、エラーがないかを確認します。

テストアプリが正常に実行されたらAzureポータルに戻って、受信メッセージのルーティングを設定します。IoT Hubはデバイスのイベントを処理する役割を担っています。そのためメッセージルーティング機能を使って受信データを目的のエンドポイントに誘導する必要があります。

IoT hub and Azure portal - configure your routing for any incoming messages

IoT Hubのサイドメニューにある「Message Routing」タブに移動しAddをクリックすると受信データ用の新しいルーティングの構築を始められます。

Message Routing - Building a ne route for incoming data

新しいメッセージルーティングに必要な名前を入力し「add endpoint」ボタンをクリックします。メッセージを保存しておきたいのでプロンプトが表示されたら「Storage」を選択しメッセージをクラウドに保存する方法を設定します。この作業が完了するまでsaveボタンは灰色で表示されます。IoT hub - Adding a storage endpoint

新しいエンドポイントの名前を入力し、データを一般的なフォーマットで保存するためにJSONエンコーディングを選択して下さい。次に「pick a container」をクリックして、フォーマットされたデータ用のストレージアカウントリソースを設定します。このページでは「file name format」ボックスを使ってファイルシステムの階層を変更することもできますが、今回はデフォルトの設定のままにしておきます。

Enter the desired name for the new storage account

新しいストレージアカウントに名前を付けて、サーバーの場所を選択してOKをクリックします。プロンプトが表示されたら、フォーマットされたメッセージデータを格納するストレージアカウントの名前を入力し、確認します。そうすると受信するフォーマットされたメッセージ用のファイルシステムの構成が完了します。

メッセージのルーティングを確立するために、プロンプトすべてを保存して下さい。

most recently generated JSON file with message

最後に、Visual Studioでアプリをもう一度実行して、メッセージのルーティングをテストします。Azureポータルでメッセージを見つけるには、ページ上部の検索ボックスを使用して、ストレージアカウントリソースメニューに移動します。新しいストレージアカウントをクリックして、新しいコンテナをクリックし、ファイルシステムを下に移動します。直近に生成されたJSONファイルがありますので見つけて確認します。

なお、メッセージがファイルシステムに表示されるまでに数分かかることがあります。

編集ボタンをクリックすると、最近投稿されたメッセージの内容が表示されます。実行が成功していれば、IoTデバイスから送信された「Hello,Cloud」メッセージファイルの最後に表示されているはずです。

これでWindows 10を搭載したRaspberry PiがAzureクラウドサービスに接続されました!!

A keen maker and electronic engineer with a passion for the environment, renewables, alternative transport and anything off-grid. Man with a van and founder of the Kickstart Kamper sustainable campervan project. Grassroots Education Sustainability Ambassador. BrightSpark 2017. BEng. KickstartKamper.co.uk