こちらの記事について、内容・翻訳・視点・長さなど、皆様のご意見をお送りください。今後の記事製作の参考にしたいと思います。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
こちらの記事の感想をお聞かせください。
前回の記事ではMicrosoftの開発環境を使ってIoT機能を開発することを意図して、Raspberry Pi用のOS「Windows 10 IoT Core」を紹介しました。Windows 10 IoT Coreは小型デバイス向けに最適化されたWindowsのフレーバーでスケーラブルなIoTインフラプロジェクトに必要なワークフローを効率化するために設計されています。今回はRaspberry PiにWindowsをインストールした上でデバイスをMicrosoft Azureに接続するプロセスを紹介し、エッジとクラウドのギャップを埋めることに主眼を置きます。
必要なもの
- Raspberry Pi 2 または 3
- 16GBクラスの10マイクロSDカード
- Micro USBケーブル
- Windows 10 IoT Core Dashboardのインストールと初期設定
- Visual Studioのインストールと初期設定
Azureの接続
Raspberry Piをクラウドに接続するために最初にすることはAzureサービスへの安全な接続を確立することです。IoT Core DashboardからAzureにログインし、「connect to Azure」タブをクリックして無料のアカウントを作成します。これでIoT Core DashboardからAzureにログインできます。完了したら必要なAzureリソースを作成し、Dashboardでデバイスをプロビジョニング(Provision)することでクラウドへの安全な接続を確立することができます。
プロビジョニングとは: 必要に応じてネットワークやコンピュータの設備などのリソースを提供できるよう予測し、準備しておくこと。仮想化システムなどでよく使われます。
Azureクラウドのフレームワークは様々な形式のデータを柔軟に収集、保存、適用することができる相互運用可能なリソースの階層を中心に設計されています。プロビジョニングプロセスについては本アプリケーションのデータフローを確立するために、一連のリソースを作成していきます。
このプロジェクトでは初期接続を設定するために2つのAzureリソースの階層が必要です。これらはIoT Core DashboardでRaspberry PiをAzureアカウントにプロビジョニングするために使用できます。
- あらゆるネットワークイベントを処理するIoT Hub
- データソースを認証するためのデバイスID
これらのリソースを作成するにはまずAzureポータルにログインする必要があります。ログイン後、ページ上部の検索バーを使って「IoT Hub」リソースに移動し、ページ上部の「create」ボタンを使ってプロジェクト用の新しいインスタンスを初期化します。
このメニューを使って新しいIoT Hubとプロジェクトの依存関係を保持するResource Groupを初期化します。ドロップダウンメニューの下にある「create new」リンクを使って新しいリソースグループに名前を付けます。次にシステムの拠点と新しいIoT Hubの名前を選択し、「review + create」をクリックすると両方のリソースタイプが初期化され、自動的にリンクされます。
完了したら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にもあります。
まずVisual Studioを起動しスタートメニューから新規に空のUniversal Windows Platform(UWP)プロジェクトを作成します。
ウインドウの右側にあるプロジェクトエクスプローラーを使って、「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に送信するデバイスクライアントを作成します。
上図のように見つかった依存関係のエラーは、エラーウインドウの左側にある電球のメニューを使って修正し、関数の上部にある文字列変数を使ってデバイスの認証情報を挿入します。
IoT Hubのホスト名はAzureポータルのIoT Hubの概要パネルで確認できます。プライマリデバイスキーとIDはIoT Hubのサイドメニューの「IoT devices」で確認できます。
プロジェクトをビルドしページ上部のビルドターゲットタイプをARMに変更し、リモートマシンを選択してローカルネットワーク上のRaspberry Piを検索します。コードが完成したら実行して、エラーがないかを確認します。
テストアプリが正常に実行されたらAzureポータルに戻って、受信メッセージのルーティングを設定します。IoT Hubはデバイスのイベントを処理する役割を担っています。そのためメッセージルーティング機能を使って受信データを目的のエンドポイントに誘導する必要があります。
IoT Hubのサイドメニューにある「Message Routing」タブに移動しAddをクリックすると受信データ用の新しいルーティングの構築を始められます。
新しいメッセージルーティングに必要な名前を入力し「add endpoint」ボタンをクリックします。メッセージを保存しておきたいのでプロンプトが表示されたら「Storage」を選択しメッセージをクラウドに保存する方法を設定します。この作業が完了するまでsaveボタンは灰色で表示されます。
新しいエンドポイントの名前を入力し、データを一般的なフォーマットで保存するためにJSONエンコーディングを選択して下さい。次に「pick a container」をクリックして、フォーマットされたデータ用のストレージアカウントリソースを設定します。このページでは「file name format」ボックスを使ってファイルシステムの階層を変更することもできますが、今回はデフォルトの設定のままにしておきます。
新しいストレージアカウントに名前を付けて、サーバーの場所を選択してOKをクリックします。プロンプトが表示されたら、フォーマットされたメッセージデータを格納するストレージアカウントの名前を入力し、確認します。そうすると受信するフォーマットされたメッセージ用のファイルシステムの構成が完了します。
メッセージのルーティングを確立するために、プロンプトすべてを保存して下さい。
最後に、Visual Studioでアプリをもう一度実行して、メッセージのルーティングをテストします。Azureポータルでメッセージを見つけるには、ページ上部の検索ボックスを使用して、ストレージアカウントリソースメニューに移動します。新しいストレージアカウントをクリックして、新しいコンテナをクリックし、ファイルシステムを下に移動します。直近に生成されたJSONファイルがありますので見つけて確認します。
なお、メッセージがファイルシステムに表示されるまでに数分かかることがあります。
編集ボタンをクリックすると、最近投稿されたメッセージの内容が表示されます。実行が成功していれば、IoTデバイスから送信された「Hello,Cloud」メッセージファイルの最後に表示されているはずです。
これでWindows 10を搭載したRaspberry PiがAzureクラウドサービスに接続されました!!
コメント