Azure IoT Hub と Windows 10 IoT Core とRaspberry Pi 3 Model B+ とでテレメトリーの収集をしてみた

2020年3月13日掲載

Hello World! エキスパートSEの斉藤です。ソフトバンクのクラウドサービスが立ち上がったときからずっとクラウドサービスを取り扱っています。普段は主に IaaS のプレセールスを行っていますが、今日は Microsoft Azure を使った IoT のシステムの企画から設計・構築までをみていきましょう。

目次

1.IoT システムの企画

1.1 IoT システムの仕組み

昨今の IoT と呼ぶシステムは主に、デバイスを配置して情報収集をし、収集した情報を分析し、よりよいビジネスにつなげるという仕組みになっています。
従って、IoT システムのコンポーネントは①デバイス、②ストレージ、③分析ツールからなります。

デバイスセンサプロセッサーインターネット接続からなります。センサ で取得した情報をストレージへ集積するために、プロセッサーがそれを加工し、インターネット接続を使ってストレージに送信します。
センサで得られる情報は温湿度や気圧・雨量・水位・日照時間などの環境情報のほかに、装置の稼働時間・モーターの回転数・車の走行距離・ドアの開閉状態や動物の血圧・心拍数などのバイタル、カメラやマイクの映像・音声などさまざまなものがあります。デバイスそのものが IP 通信をできなくても、ゲートウェイを通してインターネット接続を実現するケースもあります。ゲートウェイとの間は有線、 Bluetooth、IrDA などで接続します。

デバイスの例としては、ワンボードの小型コンピュータが代表的ですが、スマートフォンも上記のコンポーネントを備えていますので、これをデバイスとしても成り立ちます。前者の例はラズベリーパイ財団の「Raspberry Pi」、ぷらっとホーム株式会社の「OpenBlocks」など汎用 OS が動作するものや、組み込みセンサボード、通信モジュールが存在します。後者の例では、Apple Watch、ヘルスケアアプリ、Siri などもこれに類する物になります。

ストレージには、デバイスから受け取った情報 (テレメトリー) を後から利用可能な形式で保存し、整理する役割があります。オンプレミスで構築してもいいですが、スケーラビリティーを確保するためにクラウドサービスを利用することはよい選択肢です。単純なオブジェクトストレージの代わりに SQL Database や、より柔軟性を持たせるために Azure Cosmos DB で NoSQL 系データベース管理システムを利用することも有効です。

分析ツールは、収集した情報から目的の出力を得るために必要です。Azure App Service でテレメトリーを Web 画面にプロットしたり、Microsoft Power BI でレポートを作成することも可能です。Cognitive Services で AI に学習させることも、あるいはデバイスにフィードバックを起こすことも可能です。

1.2 何を収集し、何をゴールとするのか

果たして、IoT はビジネスに役立つでしょうか。IoT システムの例をいくつか挙げてみましょう。

A社は農業法人で、運営している農地の環境情報を収集し、収率の向上や省力化につなげたいと考えています。環境センサから温湿度・雨量・土壌の状態を収集し、適切にスプリンクラーで散水させたり、ビニールハウスのボイラーを作動させたり、天窓を開けたりといった管理を自動化しましょう。デバイスからの情報を集積し、分析を行い、デバイスを作動させる一連の動きはまさに IoT システムです。

B社は医療機器メーカで病院に設置した検査機器の保守メンテナンスを行っていますが、これまでの受動的な保守対応だけでなく、プロアクティブに保守活動を行いたいと考えています。検査機器から稼働回数や稼働時の電圧の変化、通信のエラー回数など、故障予測に役立つテレメトリーを収集し、これらの情報を学習させた AI によって故障予測を行い、保守スタッフを手配することで、機器の稼働率向上・故障率の低下・顧客満足度の向上・保守人員の適切な配置につなげます。

C社はショッピングモールを経営しています。モールにはさまざまな属性の人がさまざまなシーズン・時間帯に来ますが、この傾向を予測することでモールの活性化につなげたいと考えています。モールには監視カメラが設置してあり、Azure Face API で来訪者の年齢・性別・メンバー構成を収集し、どんな属性の人がどんな時間帯にどこに来るのか分析します (人流分析)。この情報をもとに、いつどんなイベントを実行するのが効果的か、警備員や店舗スタッフの人数の適正化など、これまで勘と経験に頼ってきた店舗運営を可視化することができます。
D社はオンラインゲームのユーザ体験向上に、E社は駐車場の稼働率管理に、F社はオフィスビルのファシリティメンテナンスに……など。このように IoT はさまざまな業種での活用が期待できます。

IoT システムを企画するときにおろそかにされがちなのが、「何を収集し、何をゴールとするのか」です。とにかく何でもデータを収集しておき、どんな分析をしてどんな成果を期待するかの定義を後回しにすると、要件定義が発散してしまうだけでなく、そもそもシステムの立案時に実行承認が得られません。
得られるものはコスト削減なのか、いくら期待できるのか。従業員の残業時間削減なのか、何時間削減するのか。など、例えばブッフェレストランのカメラ画像と出食情報から人流分析を行うことで食品廃棄率を低下させて年間 1千万円のコスト削減を目指す、などとして、「何を収集し、何をゴールとするのか」を明確にしておく必要があります。

2. IoT システムの設計

2.1 IoT システムの構成検討

IoT システムの構成を検討します。今回は、センサに見立ててランダムなデータを定期的に送信するデバイスを想定します。分析はまたの機会にして、分析可能な形式で Azure にデータを保管するところまでにします。

Microsoft Azure の IoT リファレンスアーキテクチャが公開されています。
Microsoft Azure IoT Reference Architecture 2.1
これによると、Azure IoT の Core Subsystems には 「IoT デバイス」 「IoT Hub」 「Stream Processing」 「Storage」 そして分析系があることがわかります。

デバイスは今回は Raspberry Pi 3 Model B+ を使用しています。Raspberry Pi は ARM アーキテクチャの小型コンピュータで、Debian 系 Linux OS である Raspbian をはじめとして、Windows 10 IoT Core なども利用できます。40ピンの GPIO (汎用インターフェースバス) を使って、上に乗せる形でセンサボード (「HAT」) を搭載することができます。通信には無線・有線 LAN 接続のほか、USB や GPIO 経由で通信モジュールを接続することが可能です。システムイメージは microSD カードに書き込んで配布します。microSD カードがそのままシステムドライブになります。

IoT Hubはデバイスを管理します。HTTP、MQTT、AMQP、AMQP over WebSockets などでのテレメトリーの収集だけでなく、デバイスと情報を共有する機能 (デバイス ツイン) もあります。この機能はデバイスの正常性を報告させるのに有効です。さらにダイレクト メソッド機能を利用すれば、デバイスに最新のファームウェアをダウンロード・インストールさせることが可能です。
また、デバイスを多数配置するには管理の仕組みが必要です。100台・200台ならまだしも、数万台となると、一台一台、Excel ファイルの台帳でホスト名を付けていったのではたまりません。キッティングしたデバイスを起動するだけで台帳に登録されるように構成する必要があります。IoT Hub ではデバイスからの要求でデバイスを登録する機能があるので、これを利用しましょう。

Stream Processingは収集されたテレメトリーの加工・処理を行います。Stream Analytics ではストリーム分析クエリ言語 (SQL に似た構文) を用いてテレメトリーを整形し、オブジェクトストレージやデータベースに保存する機能があります。もしくは Functions や App Service WebJobs を用いてテレメトリーを直接、プログラムで処理することも可能です。
Storageには Storage Account や SQL Database、Cosmos DB などが使えます。特性に応じて選択しましょう。画像データであれば BLOB に置いてインデックスを SQL Database に作成したり、温湿度であれば Cosmos DB に全部保存しておいて後から分析するときは加工して SQL Database に書き出すのもよいでしょう。場合によっては、同じデータを異なる形式でそれぞれに保存しておいた方がよいケースもあります。直近 1ヵ月分は Web のダッシュボード用に SQL Database に保存し、分析や長期保存用に Cosmos DB にも出力するなど。


それでは、各コンポーネントを構築していきましょう。

3. IoT システムの構築

3.1 各コンポーネントのデプロイメント

IoT Hub のデプロイメントは Azure ポータル Marketplace を用いて行います。今回はデモンストレーション環境なので最小限の構成でよいです。
続いて、ストレージ アカウントを作成します。これも Marketplace からデプロイメントします。
さらに、同様にして Stream Analytics ジョブを作成します。
設定は次項で行います。

3.2 IoT Hub の設定

IoT Hub の設定はここでは特にありません。「価格とスケール」が F1、もしくは F1 が作成できない場合は S1~S3 になっていることを確認してください。

3.3 Storage Account の設定

Storage Account もここでは設定しません。デプロイして器を用意しておくだけです。

3.4 Stream Analytics の設定

Stream Analytics では、入力元である IoT Hub からテレメトリーを取得し、出力先である Storage Account に格納するジョブを設定します。

IoT Hub からの入力を新規作成してください。

入力ができたら、今度は出力です。

今回は Storage Account のテーブルストレージに出力してみましょう。

テーブルストレージでは パーティション キー と 行キー のみインデックスが生成されます。
保存直後、Storage Account に新規のテーブルが作成されます。
次に、入力を出力に渡す処理を記述します。クエリを以下の通り作成してください。

入力したクエリは以下の通りです。

SELECT
    DeviceId,
    Avg(Number) Number,
    Max(Time) Time
INTO
    [StorageOutput]
FROM
    [DeviceInput] TIMESTAMP by Time
GROUP BY
    DeviceId, TumblingWindow(Second, 10)

クエリを保存したら、概要からジョブを開始してください。

デバイスに Device ID を払い出す作業は Azure IoT Hub SDK で自動化が可能ですが、ここでは 1台だけ手動登録しましょう。

参考:Azure IoT Hub - デバイスの登録について

IoT HubIoT デバイスから新規作成を選択してください。デバイス 1号を作成しましょう。

本来は自動採番が望ましいですが、今回はデバイス名はDevice01にします。この名前はデバイス側のアプリでも使用します。

リストに Device01 が作成されるので、クリックしてプライマリ接続文字列をコピーしておきましょう。
これで、Azure 側の設定は完了です。次に、デバイス側のセットアップをしていきます。

4. デバイスの実装

4.1 Windows 10 IoT Core の紹介

Windows 10 IoT は、Windows 10 カーネルで動作するエンベデッド向け OS で、Raspberry Pi 2/3 などで動作します。
(参考:Suggested Prototype Boards )

IoT Core と IoT Enterprise の 2つのエディションがあり、IoT Core は無料で提供されます。IoT Enterprise はロックダウンなどの機能追加がされています。今回は IoT Core エディションを使用します。

4.2 ディスクイメージ作成

ディスクイメージは microSD カードに書き込みます。イメージを書き込むツールは Windows 10 IoT Core ダッシュボードです。ダウンロードしてインストールしてください。イメージはダッシュボードが自動的にダウンロードします。
(参考:Windows 10 IoT Core ダッシュボード )

ただし、Raspberry Pi 3 Model B+ 用は下記からダウンロードする必要があります。中段にある RaspberryPi 3B+ Technical Preview Build 17661 がそれです。
(参考:Windows Insider Preview Downloads )

ダウンロードされるのは ISO ファイルです。中にはインストールパッケージ (MSI) Windows_10_IoT_Core_RPi3B+.msi が入っていますので、インストールしてください。イメージは C:\Program Files (x86)\Microsoft IoT\FFU\RaspberryPi2\flash.ffu に保存されますので、ダッシュボードでは Custom イメージとしてこれを指定します。
ダッシュボードのインストールが完了したら自動的に起動していると思います。 新しいデバイスのセットアップ を始めましょう。

今回は Raspberry Pi 3 Model B+ を使用するので、Custom イメージを指定します。デバイス名は、IoT Hub で新規作成したものを指定してください。

こうしてできた microSD カードを Raspberry Pi に挿入し、電源を接続すると、LED が点きます。HDMI で画面を接続していれば、見慣れた Windows 10 の起動画面が表示されます。時々、右上に黄色い稲妻のアイコンが表示される場合がありますが、これは USB 給電の容量が不足していることを意味しています。容量の大きいアダプタに交換することをご検討ください。
10分ほどして、デバイスの情報が表示されれば起動完了です。有線 LAN に接続しており、DHCP で IP アドレスを取得できていれば IP アドレスを確認することができますので、控えておいてください。

4.3 Visual Studio から接続

1台めのデバイスなので、ここではデバイスの開発環境を構築することにします。Windows 10 IoT で動作するのは UWP (ユニバーサル Windows プラットフォーム) アプリです。Visual Studio で UWP アプリを開発し、デバイスにインストールします。
ここでは Visual Studio のセットアップは割愛します。Visual Studio Community 2017 に .NET デスクトップ開発 、ユニバーサル Windows プラットフォーム開発 、ASP.NET と Web 開発 、 Azure の開発 、データの保存と処理 のワークロードをインストールしました。さらに拡張機能として Connected Service for Azure IoT Hub と Windows IoT Core Project Templates for VS 2017+ をインストールします。

Connected Service for Azure IoT Hub ダウンロード
Windows IoT Core Project Templates for VS 2017+ ダウンロード

そして、Visual Studio を実行する PC の Windows 10 を開発者モードにしておいてください。
Visual Studio ではデバイス上に直接アプリケーションをデプロイできます。ソリューションプラットフォームを ARM に設定した上で、ターゲット デバイスに リモート コンピューター を選択してください。

デバイスと同一セグメント上にいれば自動検出しますが、検出に失敗したら手動で IP アドレスを入力してください。

※ デバイス名「Device01」が、ここでは小文字で表示されますが仕様です。

4.4 テレメトリーの送信テスト

紙面の都合でコーディングの実際を割愛する点ご容赦ください。基本的には、デバイスの接続文字列を用いて IoT Hub に Message を送信します。AzureIoTHub クラスを使用してください。
(参考:AzureIoTHub クラス

Raspberry Pi での GPIO の操作方法については本論から外れるのでこれも割愛します。送信が成功していれば、Stream Analytics の クエリ で 入力のプレビュー に受信されたテレメトリーが表示されます。

さらに、テーブル ストレージに格納されていることが Storage Explorer から確認できるでしょう。

こうしてビルドしたアプリを microSD に格納し、デバイスの出来上がりです。
さらに、アプリにデバイスの自動登録機能を実装して省力化することで、多数のデバイスを迅速にデプロイすることが可能になります。遠隔からのアプリのアップデート機能も実装したいところですね。

おわりに

Azure IoT Hub を使った IoT システムの企画・設計・構築、いかがでしたでしょうか。 デバイス以外全て、デバイス管理・ストレージ・アプリ開発・デバイスのデプロイなどが全て Microsoft のソリューションで実現可能である点はさすがといったところです。さらには分析ツールにおいても、Power BI などのソリューションを選択可能です。
Azure IoT の世界を垣間見てどんなビジネスアイデアを描かれましたでしょうか。ぜひお聞かせください。

関連サービス

Microsoft Azure

Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。

おすすめの記事

条件に該当するページがございません