3.1K Views
September 20, 22
スライド概要
ITエンジニアリングを知らない人たち向けに作った、ArduinoとAzure IoTHubとStreamExplorerでそれっぽいものを作ったよっていう話。
勉強会とかで作った資料をおいてます。
IoT検証の話 yuki izumoto
Agenda • 前提知識 -> マイコン、IoT、OSI参照モデル、ストレージとかとか。 • 検証内容 • アーキテクチャ設計概要 • 技術詳細 • 発展
DEMO
前提知識
IoT
Internet of Things • 日本語:モノのインターネット • モノがインターネットを経由して通信する。 • • IoTでモノを操作する。 • モノの状態を知る。 • モノ同士でデータを送受信する。 デジタルツインのエッジとも言えるかも。
マイコン
マイコン • 和製英語なので、日本語。 • 正しくはマイクロコントローラー。MCUとも。 • 現代ではOSの存在しない組み込みデバイスを示すことが多い。
マイコン • ちなみに、計算機といえば、メインフレームとかオフィスコンピューター だった時代に、いわゆる個人で使う汎用コンピューター(いわゆるPC) がまだ出始めの頃につけられたのがマイクロコンピューター。(1970年 代とか) • 当時は計算機が物理的に大きかったんじゃないかな。 • 今ではわざわざマイクロコンピューターなんて言わないし、今回の文脈 でマイコンをマイクロコンピューターと言うと間違い。
MCU • マイクロコントローラーユニット。 • より専門的だったり、限定的な用途に使われるICチップ。安い。 • MCUに短期記憶(メモリ)、長期記憶(ストレージ)、中央処理装置 (CPU)などなど、計算処理に必要なものが1つのチップにまとまって る。
MPU • マイクロプロセッサーユニット。 • 計算処理だけが可能なチップ。MCUより速く賢い。 (使える命令セットが多い。) • MCUと違って計算処理だけ可能なチップなので、短期記憶(メモリ)、 長期記憶(ストレージ)、などなどは別で必要。且つ外部装置を管理する 機能を持つ。 • MPUがもっともっと速く賢くいっぱい集まって、現代のCPU。
SoC • System on a Chip • システムに必要なチップをぜんぶ1つにまとめたもの。 • CPU、GPU、メモリ、WiFi、BTなどなど。 • 最新のAndroidのSoCってSnapdragon 888 よねーとか言ったりする。
組み込み機器って?
組み込み機器 • 炊飯器とか、電卓とか、電子レンジとか、テレビとか、ケータイとかとか 世の電化製品のほぼすべて。 • で、こういうのをどうやって開発していく?
ワンボードマイコン
ワンボードマイコン • プログラミング学習だったり、評価、プロ トタイピングだったり、組み込み開発だっ たり。 • 現代では、より広い顧客向けに小さく、扱 いやすくしたボードが製品として登場する。 • シングルボードコンピューター
シングルボードコンピューター ってなにがあるの?
シングルボードコンピューター • Arduino、IchigoJam、PICMICRO、BeagleBoard、Gainer、Intel Galileo、Intel Edison、Adapteva Parallella、Raspberry Pi、LilyPad、 Seeduino Xiao、AZ3166 etc… • ワンボードマイコンのような限定的な利用ではなくなってる。 • 小型、低価格、低消費電力 • PCのような入出力、画面出力、通信、GPIO、プリセットセンサー
センサー
センサー • 温度、湿度、加速度、ジャイロ、赤外線、空気圧、マイク、光、人感、カ メラ、照度、圧力、距離、振動、バーコード、GPS、NFC、回転角速… • IoTでは、このあたりのセンサー情報を集めて得られる現象を把握・利用 して、どういった利益を挙げられるかが目的。
センサー接続方式 • センサーはマイコンのGPIOに回路を組んで利用する。 • センサーの種類は大きく3つ。 • デジタルセンサー • アナログセンサー • I2Cセンサー
センサー接続方式 • デジタルセンサー • デジタルセンサー用のGPIOに接続する。区別しないボードもある。 • 0もしくは1の値がGPIOに出力される。 • あるかないかを検出するセンサーがこのタイプ。 • スイッチとか人感センサーとか。
センサー接続方式 • アナログセンサー • アナログセンサー用のGPIOに接続する。区別しないボードもある。 • 0-255や0-1024の値がGPIOに出力される。 • 物によっては校正が必要。 • 0だったら0度で255だったら359度だから、128は180度だねとか。 • 温度センサーとか。
センサー接続方式 • I2Cセンサー • IC2センサー用のGPIOに接続する。ないボードもある。 • 0 or 1や0-255のような生データではなく、センサー値がセンサー内の マイコンで処理され、実データが出力される。 • 高い。わかりやすい。使いやすい。ライブラリがあればなお良し。
I2Cのコード(温湿度センサー)
#include "HTS221Sensor.h"
DevI2C *i2c;
HTS221Sensor *sensor;
auto temperature = 0f;
void setup() {
}
void loop() {
i2c = new DevI2C(D14, D15);
sensor -> getTemperature(&temperature);
sensor = new HTS221Sensor(*i2c);
Serial.print("Temperature: ");
sensor -> init(NULL);
Serial.println(temperature);
sensor -> enable();
delay(1000);
}
ここまでIoTのTの話
ここからIoTのIの話
OSI参照モデル
OSI参照モデル
OSI参照モデル
OSI参照モデル • https://www.seraku.co.jp/tectec-note/industry/osi-referencemodel/ • https://www.itmanage.co.jp/column/osi-reference-model/
物理でインターネットに繋ぐ
物理でインターネット • LANポートがついてる割と高級ボード • 消費電力もそこそこ高めなイメージ IoT BOARD ETHERNET INTERNET
物理でインターネット • WiFiモジュールがついてるボード、SoCに実装されてる場合も。 • 手に入りやすい価格帯のことが多い(1000円前後) IoT BOARD WiFi INTERNET
物理でインターネット • BTモジュールしか積まれてない最安ボード。 • 別でBT経由でインターネットに繋ぐデバイスが必要。 • 大量にばらまいて利用するパターンで使われる(AirTagとか) IoT BOARD Bluetooth もっと 低価格な Zigbeeとか BT to INTERNET DEVICE WiFi ETHERNET INTERNET
プロトコル
UDP, TCP, HTTP, MQTT
UDP • User Datagram Protocol • トランスポート層で動作。 • パケット量が少ない。通信 トラフィックとして軽い。 • 信頼性が低い、到達保証が ない、欠損しやすい。 • 高速、ガンガン投げつけ る。
TCP • Transmission Control Protocol • トランスポート層で動作 • 誤り訂正、再送処理などがプロト コルとして実装。信頼性が高い。 • 高負荷。 • ハンドシェイク。
HTTP • Hyper Text Transfer Protocol • アプリケーション層で動作。TCPの上位プロトコル(HTTP2) • いわゆるWebサーバーとWebクライアントでの通信 • 暗号化したものがHTTPS • (HTTP3はUDP…)
MQTT • Message Queueing Telemetry Transport • アプリケーション層で動作。TCPの上位プロトコル • M2M(Machine-to-Machine)で短いメッセージを頻繁に大量に通信。 • 1:nでの通信を想定。 • 軽量。(パケットのヘッダー:HTTPが50byte、MQTTが2byte)
なんでこんなこと話すの?
例えばPCで.NET YOUR CODE(C#) WPF SDK Windows App SDK Compiler .NET Runtime Windows Runtime Windows OS Windows PC ASP.NET CORE SDK
例えばPCでC++ YOUR CODE(C++) TARGET SDK Win32 API Compiler Windows OS Windows PC
IoT YOUR CODE(C/C++) Compiler IoT BOARD
で、なにが違うの? 例えばインターネットからデータを取得するとき
.NET • var client = new HttpClient(); var response = await client.GetAsync(“https://name-less.space”); var html = response.Content.ReadAsStringAsync();
IoT • IoT Boardの実装に依存するし、積まれてるインタフェースモジュールに 依存する! • どこのメーカーのどんなWiFiモジュール?どこのどんなEthernetモジュー ル?どこのどんなBTモジュール? • そのモジュール作ってるメーカーは通信用のライブラリ公開してる? • そのライブラリはどのプロトコルに対応してる? • TCPからHTTP実装しないとだめ?MQTTは?
I2Cのコード(温湿度センサー)
#include "HTS221Sensor.h"
DevI2C *i2c;
HTS221Sensor *sensor;
auto temperature = 0f;
void setup() {
}
void loop() {
i2c = new DevI2C(D14, D15);
sensor -> getTemperature(&temperature);
sensor = new HTS221Sensor(*i2c);
Serial.print("Temperature: ");
sensor -> init(NULL);
Serial.println(temperature);
sensor -> enable();
delay(1000);
}
IoT • 有線LANモジュールとWiFiモジュールじゃ、 もちろん通信するためのコードは違う。 • なんなら同じ有線LANでもモジュールが違えば、 もちろんコードも変わってくる。
だからボード選定がすごく大事
収集のデータストレージ
Infrastructure / Storage • ローカル • ファイル -> IoT Boardの実装にファイルシステムがあれば。 • • そもそもIoTとは? 収集集約手段がめんどそう。 • SSHでつないでどうこうとか。 • ボード自身にサーバー構築したりとか。
Infrastructure / Storage • オンプレミス(LAN環境) • すべてを自分で実装・構築 -> ちなみに会議室のは完全に自作 • • NAS(Network Access Storage) • DB ボードでファイル操作する?サーバーに任せる? • そのサーバーは秒間nリクエストに耐えられる?
Infrastructure / Storage • オンプレミス APIサーバー DB NETWORK IoT BOARD ストレージサーバー ファイル サーバー
Infrastructure / Storage • クラウド • • フルマネージド • 高負荷対応。 • SDKによる開発効率。 • IoT専用に作られたサービスがいっぱい。-> デバイス管理・メッセージング etc… IaaS / PaaSから、IaCへ -> 構築展開の簡易性 • 手作業で構築する時代は終わり
Infrastructure / Storage • クラウド DB サービス IoT BOARD Internet クラウド IoTサービス ファイル サービス
Agenda • 前提知識 -> マイコン、IoT、OSI参照モデル、ストレージとかとか。 • 検証内容 • やったこと、つかったもの • アーキテクチャ • 検証できてないこと
ここまででなにか
検証内容
今回やったこと • センサーデータを、再利用性を考慮して、逐次保存。 • dashboardで可視化。 • Excel連携。
できあがりのDEMO
今回つかったもの • 使ったマイコン • Microsoft Azure Certified IoT DevKit (IOT-AZ3166) • センサー • 内蔵加速度センサー、内蔵温湿度センサー • 使ったサービス • Azure IoT Hub、Azure Stream Analytics、 Azure Blob Storage、Azure Data Explorer
AZ3166
IOT-AZ3166 • Azure Serviceに簡単につながるよう にある程度お膳立てされたボード • 設計:MS 製造:MXCHIP • SoC:ARM Coretex-M • 完全Arduino互換、Microbit互換端子 • Amazonで5800円ぐらい。
IOT-AZ3166 • 内蔵センサー • Sensor: Humidity & Temperature (HTS221) • Sensor: Magnetic (LIS2MDL) • Sensor: Pressure (LPS22HB) • Sensor: Accelerometer & Gyroscope (LSM6DSL)
IOT-AZ3166 • ドキュメントが豊富 • https://microsoft.github.io/azure-iot-developer-kit/docs/projects/ • Boot loaderがある • Boot loaderにWiFi接続情報、設定情報を書き込める。 • どのWiFiにつないで、どのAzureに繋ぐかを、ハードコーディング しなくていい。 • USB経由で設定可能。ブラウザ経由でもいくつか可能。
IOT-AZ3166 • 開発環境を作るのが少し手間。 • • ArduinoのパスをVisual Studio Codeに通して、 Azure IoTKitの拡張機能いれて、どうこう。。。 作ってしまえば便利ではある。 • AzureとAzureから取得できるボードの状態、メッセージングを 一括監視、操作できる。
実装
コード • Azure IoT Device WorkbenchのGet Startedをちょこっといじった。 • ちょっとだけ読んでみる。
Azure IoT Services
Azure IoT Services • 用途に応じて、いろいろいっぱい。フルマネージドサービス。 • 今回は • Azure IoT Hub • Azure Stream Analytics • Azure Blob Storage • Azure Data Explorer
Azure IoT Hub • IoTエッジを集約する役目のPaaS • テレメトリーの集約を行う。 テレメトリー (センサーデータ) Azure IoT Hub MQTT || HTTP EDGE (IoTボート、PC、スマートフォン…)
Azure IoT Hub • 未登録EDGE IoTエッジの管理、メッセージング メッセージ Azure IoT Hub MQTT || HTTP EDGE (IoTボート、PC、スマートフォン…)
Azure Stream Analytics • IoT Hubから流れてきたテレメトリーをストリーム(リアルタイム)として、 他のAzureのサービスで扱えるようにする。 • ストリームに対してクエリ式をかけられる。 Azure hoge テレメトリ Azure IoT Hub Azure Stream Analytics Query Azure fuga Azure piyo
Azure Blob Storage • Azureのファイルサービス • SurveyMapのデータとか全部ここに保存してる。 • Stream Analyticsの設定で、ある程度任意のパスで保存できる。 • 今回は、[container]/YYYY/MM/DD/HH.jsonが作られて、毎データごとに1行ずつ追記。 Azure Stream Analytics Query Azure Blob Storage
Azure Data Explorer • ストリーミングデータに最適化された Azureのデータ探索・データ分析サービス • IoTとかいわゆるビッグデータで、時系列分析とか。 • KQLでDashboardの構築、外部サービスで分析結果を利用したり。 Azure Stream Analytics Query Azure Data Explorer
アーキテクチャ をまとめるとこんなかんじ。
AZ3166 テレメトリー (センサーデータ) JSON MQTT || HTTP Azure IoT Hub Azure Blob Storage 分析・ダッシュボード Azure Stream Analytics Query SELECT * INTO Blob FROM IoTHub Azure Data Explorer
Portal.Azure みながら、 インフラの流れをもう一回説明
AZ3166 テレメトリー (センサーデータ) MQTT || HTTP Azure IoT Hub Azure Stream Analytics SELECT * INTO Blob FROM IoTHub Query OTHER SERVICES Azure ML Azure Data Explorer Azure Functions Azure SQL Database Power BI CosmosDB Event Hub …
費用 • Azure Blob Storage • 置いたファイルの大きさとAzure外への通信費次第。 • Azure IoT Hub • 今回はフリー版(F1) -> 今はS1で構築しなおした。 • 繋げられるAzureのサービスの数と通信回数に制限。 • プロダクションでは有料ユニットを使ったほうがいい(セキュリティ機能とか • Azure Stream Analytics • 1ユニット月9000円ぐらい
ASAを使わない • 月額ほぼ数百円で運用、かわりにリアルタイム処理ではなくなる。 • バッチ処理になるから60秒に1回IoT HubにたまったJSONを作成。 • 取得データがエッジのコードに依存しそう? • IoT Hubが対応してるサービスにしか投げれない(Blob、Event Hub、Service Bus) AZ3166 テレメトリー (センサーデータ) JSON MQTT || HTTP Azure IoT Hub メッセージルーティング Azure Blob Storage
環境構築とAzure構築 • IoT HubにつないだStream Analyticsが高すぎるので、メッセージルー ティングでなんとかする話。 • • https://c-mitsuba.hatenablog.com/entry/2022/03/04/011626 IoT HubにつないだStream Analyticsが高すぎるので、メッセージルー ティングでなんとかする話。 • https://c-mitsuba.hatenablog.com/entry/2022/03/04/011626
検証してないこと • Azure IoT Centralでエッジ側も実装するか (結局裏がIoTHubらしいけど) • 今回のPaaSからSaaSへ。 • エッジデバイスが対応してないとだめ(AZ3166はOK) • Azure Degital Twinsで構築するとできるらしい?、とかとか。
検証してないこと • https://blog.devmobile.co.nz/2021/01/11/azure-iot-centralconnectivity-part2/ • https://qiita.com/yukimatsu/items/783316924e8e296cbe33 • https://elbruno.com/2021/01/19/coding4fun-how-to-control-yourdrone-%E2%9C%88-with-20-lines-of-code-23-n-azureiot/
検証してないこと • エッジデバイスへのメッセージング -> デジタルツイン • Blob、Data Explorer以外への接続 • • Azure MLだと、ストリームが流れるたびにMLにかけるとか。 • NoSQLにデータためるとか。(高い) もろもろ要件次第。