iot検証の話

2.7K Views

September 20, 22

スライド概要

ITエンジニアリングを知らない人たち向けに作った、ArduinoとAzure IoTHubとStreamExplorerでそれっぽいものを作ったよっていう話。

profile-image

勉強会とかで作った資料をおいてます。

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

IoT検証の話 yuki izumoto

2.

Agenda • 前提知識 -> マイコン、IoT、OSI参照モデル、ストレージとかとか。 • 検証内容 • アーキテクチャ設計概要 • 技術詳細 • 発展

3.

DEMO

4.

前提知識

5.

IoT

6.

Internet of Things • 日本語:モノのインターネット • モノがインターネットを経由して通信する。 • • IoTでモノを操作する。 • モノの状態を知る。 • モノ同士でデータを送受信する。 デジタルツインのエッジとも言えるかも。

7.

マイコン

8.

マイコン • 和製英語なので、日本語。 • 正しくはマイクロコントローラー。MCUとも。 • 現代ではOSの存在しない組み込みデバイスを示すことが多い。

9.

マイコン • ちなみに、計算機といえば、メインフレームとかオフィスコンピューター だった時代に、いわゆる個人で使う汎用コンピューター(いわゆるPC) がまだ出始めの頃につけられたのがマイクロコンピューター。(1970年 代とか) • 当時は計算機が物理的に大きかったんじゃないかな。 • 今ではわざわざマイクロコンピューターなんて言わないし、今回の文脈 でマイコンをマイクロコンピューターと言うと間違い。

10.

MCU • マイクロコントローラーユニット。 • より専門的だったり、限定的な用途に使われるICチップ。安い。 • MCUに短期記憶(メモリ)、長期記憶(ストレージ)、中央処理装置 (CPU)などなど、計算処理に必要なものが1つのチップにまとまって る。

11.

MPU • マイクロプロセッサーユニット。 • 計算処理だけが可能なチップ。MCUより速く賢い。 (使える命令セットが多い。) • MCUと違って計算処理だけ可能なチップなので、短期記憶(メモリ)、 長期記憶(ストレージ)、などなどは別で必要。且つ外部装置を管理する 機能を持つ。 • MPUがもっともっと速く賢くいっぱい集まって、現代のCPU。

12.

SoC • System on a Chip • システムに必要なチップをぜんぶ1つにまとめたもの。 • CPU、GPU、メモリ、WiFi、BTなどなど。 • 最新のAndroidのSoCってSnapdragon 888 よねーとか言ったりする。

13.

組み込み機器って?

14.

組み込み機器 • 炊飯器とか、電卓とか、電子レンジとか、テレビとか、ケータイとかとか 世の電化製品のほぼすべて。 • で、こういうのをどうやって開発していく?

15.

ワンボードマイコン

16.

ワンボードマイコン • プログラミング学習だったり、評価、プロ トタイピングだったり、組み込み開発だっ たり。 • 現代では、より広い顧客向けに小さく、扱 いやすくしたボードが製品として登場する。 • シングルボードコンピューター

17.

シングルボードコンピューター ってなにがあるの?

18.

シングルボードコンピューター • Arduino、IchigoJam、PICMICRO、BeagleBoard、Gainer、Intel Galileo、Intel Edison、Adapteva Parallella、Raspberry Pi、LilyPad、 Seeduino Xiao、AZ3166 etc… • ワンボードマイコンのような限定的な利用ではなくなってる。 • 小型、低価格、低消費電力 • PCのような入出力、画面出力、通信、GPIO、プリセットセンサー

19.

センサー

20.

センサー • 温度、湿度、加速度、ジャイロ、赤外線、空気圧、マイク、光、人感、カ メラ、照度、圧力、距離、振動、バーコード、GPS、NFC、回転角速… • IoTでは、このあたりのセンサー情報を集めて得られる現象を把握・利用 して、どういった利益を挙げられるかが目的。

21.

センサー接続方式 • センサーはマイコンのGPIOに回路を組んで利用する。 • センサーの種類は大きく3つ。 • デジタルセンサー • アナログセンサー • I2Cセンサー

22.

センサー接続方式 • デジタルセンサー • デジタルセンサー用のGPIOに接続する。区別しないボードもある。 • 0もしくは1の値がGPIOに出力される。 • あるかないかを検出するセンサーがこのタイプ。 • スイッチとか人感センサーとか。

23.

センサー接続方式 • アナログセンサー • アナログセンサー用のGPIOに接続する。区別しないボードもある。 • 0-255や0-1024の値がGPIOに出力される。 • 物によっては校正が必要。 • 0だったら0度で255だったら359度だから、128は180度だねとか。 • 温度センサーとか。

24.

センサー接続方式 • I2Cセンサー • IC2センサー用のGPIOに接続する。ないボードもある。 • 0 or 1や0-255のような生データではなく、センサー値がセンサー内の マイコンで処理され、実データが出力される。 • 高い。わかりやすい。使いやすい。ライブラリがあればなお良し。

25.
[beta]
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);
}

26.

ここまでIoTのTの話

27.

ここからIoTのIの話

28.

OSI参照モデル

29.

OSI参照モデル

30.

OSI参照モデル

31.

OSI参照モデル • https://www.seraku.co.jp/tectec-note/industry/osi-referencemodel/ • https://www.itmanage.co.jp/column/osi-reference-model/

32.

物理でインターネットに繋ぐ

33.

物理でインターネット • LANポートがついてる割と高級ボード • 消費電力もそこそこ高めなイメージ IoT BOARD ETHERNET INTERNET

34.

物理でインターネット • WiFiモジュールがついてるボード、SoCに実装されてる場合も。 • 手に入りやすい価格帯のことが多い(1000円前後) IoT BOARD WiFi INTERNET

35.

物理でインターネット • BTモジュールしか積まれてない最安ボード。 • 別でBT経由でインターネットに繋ぐデバイスが必要。 • 大量にばらまいて利用するパターンで使われる(AirTagとか) IoT BOARD Bluetooth もっと 低価格な Zigbeeとか BT to INTERNET DEVICE WiFi ETHERNET INTERNET

36.

プロトコル

37.

UDP, TCP, HTTP, MQTT

38.

UDP • User Datagram Protocol • トランスポート層で動作。 • パケット量が少ない。通信 トラフィックとして軽い。 • 信頼性が低い、到達保証が ない、欠損しやすい。 • 高速、ガンガン投げつけ る。

39.

TCP • Transmission Control Protocol • トランスポート層で動作 • 誤り訂正、再送処理などがプロト コルとして実装。信頼性が高い。 • 高負荷。 • ハンドシェイク。

40.

HTTP • Hyper Text Transfer Protocol • アプリケーション層で動作。TCPの上位プロトコル(HTTP2) • いわゆるWebサーバーとWebクライアントでの通信 • 暗号化したものがHTTPS • (HTTP3はUDP…)

41.

MQTT • Message Queueing Telemetry Transport • アプリケーション層で動作。TCPの上位プロトコル • M2M(Machine-to-Machine)で短いメッセージを頻繁に大量に通信。 • 1:nでの通信を想定。 • 軽量。(パケットのヘッダー:HTTPが50byte、MQTTが2byte)

42.

なんでこんなこと話すの?

43.

例えばPCで.NET YOUR CODE(C#) WPF SDK Windows App SDK Compiler .NET Runtime Windows Runtime Windows OS Windows PC ASP.NET CORE SDK

44.

例えばPCでC++ YOUR CODE(C++) TARGET SDK Win32 API Compiler Windows OS Windows PC

45.

IoT YOUR CODE(C/C++) Compiler IoT BOARD

46.

で、なにが違うの? 例えばインターネットからデータを取得するとき

47.

.NET • var client = new HttpClient(); var response = await client.GetAsync(“https://name-less.space”); var html = response.Content.ReadAsStringAsync();

48.

IoT • IoT Boardの実装に依存するし、積まれてるインタフェースモジュールに 依存する! • どこのメーカーのどんなWiFiモジュール?どこのどんなEthernetモジュー ル?どこのどんなBTモジュール? • そのモジュール作ってるメーカーは通信用のライブラリ公開してる? • そのライブラリはどのプロトコルに対応してる? • TCPからHTTP実装しないとだめ?MQTTは?

49.
[beta]
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);
}

50.

IoT • 有線LANモジュールとWiFiモジュールじゃ、 もちろん通信するためのコードは違う。 • なんなら同じ有線LANでもモジュールが違えば、 もちろんコードも変わってくる。

51.

だからボード選定がすごく大事

52.

収集のデータストレージ

53.

Infrastructure / Storage • ローカル • ファイル -> IoT Boardの実装にファイルシステムがあれば。 • • そもそもIoTとは? 収集集約手段がめんどそう。 • SSHでつないでどうこうとか。 • ボード自身にサーバー構築したりとか。

54.

Infrastructure / Storage • オンプレミス(LAN環境) • すべてを自分で実装・構築 -> ちなみに会議室のは完全に自作 • • NAS(Network Access Storage) • DB ボードでファイル操作する?サーバーに任せる? • そのサーバーは秒間nリクエストに耐えられる?

55.

Infrastructure / Storage • オンプレミス APIサーバー DB NETWORK IoT BOARD ストレージサーバー ファイル サーバー

56.

Infrastructure / Storage • クラウド • • フルマネージド • 高負荷対応。 • SDKによる開発効率。 • IoT専用に作られたサービスがいっぱい。-> デバイス管理・メッセージング etc… IaaS / PaaSから、IaCへ -> 構築展開の簡易性 • 手作業で構築する時代は終わり

57.

Infrastructure / Storage • クラウド DB サービス IoT BOARD Internet クラウド IoTサービス ファイル サービス

58.

Agenda • 前提知識 -> マイコン、IoT、OSI参照モデル、ストレージとかとか。 • 検証内容 • やったこと、つかったもの • アーキテクチャ • 検証できてないこと

59.

ここまででなにか

60.

検証内容

61.

今回やったこと • センサーデータを、再利用性を考慮して、逐次保存。 • dashboardで可視化。 • Excel連携。

62.

できあがりのDEMO

63.

今回つかったもの • 使ったマイコン • Microsoft Azure Certified IoT DevKit (IOT-AZ3166) • センサー • 内蔵加速度センサー、内蔵温湿度センサー • 使ったサービス • Azure IoT Hub、Azure Stream Analytics、 Azure Blob Storage、Azure Data Explorer

64.

AZ3166

65.

IOT-AZ3166 • Azure Serviceに簡単につながるよう にある程度お膳立てされたボード • 設計:MS 製造:MXCHIP • SoC:ARM Coretex-M • 完全Arduino互換、Microbit互換端子 • Amazonで5800円ぐらい。

66.

IOT-AZ3166 • 内蔵センサー • Sensor: Humidity & Temperature (HTS221) • Sensor: Magnetic (LIS2MDL) • Sensor: Pressure (LPS22HB) • Sensor: Accelerometer & Gyroscope (LSM6DSL)

67.

IOT-AZ3166 • ドキュメントが豊富 • https://microsoft.github.io/azure-iot-developer-kit/docs/projects/ • Boot loaderがある • Boot loaderにWiFi接続情報、設定情報を書き込める。 • どのWiFiにつないで、どのAzureに繋ぐかを、ハードコーディング しなくていい。 • USB経由で設定可能。ブラウザ経由でもいくつか可能。

68.

IOT-AZ3166 • 開発環境を作るのが少し手間。 • • ArduinoのパスをVisual Studio Codeに通して、 Azure IoTKitの拡張機能いれて、どうこう。。。 作ってしまえば便利ではある。 • AzureとAzureから取得できるボードの状態、メッセージングを 一括監視、操作できる。

69.

実装

70.

コード • Azure IoT Device WorkbenchのGet Startedをちょこっといじった。 • ちょっとだけ読んでみる。

71.

Azure IoT Services

72.

Azure IoT Services • 用途に応じて、いろいろいっぱい。フルマネージドサービス。 • 今回は • Azure IoT Hub • Azure Stream Analytics • Azure Blob Storage • Azure Data Explorer

73.

Azure IoT Hub • IoTエッジを集約する役目のPaaS • テレメトリーの集約を行う。 テレメトリー (センサーデータ) Azure IoT Hub MQTT || HTTP EDGE (IoTボート、PC、スマートフォン…)

74.

Azure IoT Hub • 未登録EDGE IoTエッジの管理、メッセージング メッセージ Azure IoT Hub MQTT || HTTP EDGE (IoTボート、PC、スマートフォン…)

75.

Azure Stream Analytics • IoT Hubから流れてきたテレメトリーをストリーム(リアルタイム)として、 他のAzureのサービスで扱えるようにする。 • ストリームに対してクエリ式をかけられる。 Azure hoge テレメトリ Azure IoT Hub Azure Stream Analytics Query Azure fuga Azure piyo

76.

Azure Blob Storage • Azureのファイルサービス • SurveyMapのデータとか全部ここに保存してる。 • Stream Analyticsの設定で、ある程度任意のパスで保存できる。 • 今回は、[container]/YYYY/MM/DD/HH.jsonが作られて、毎データごとに1行ずつ追記。 Azure Stream Analytics Query Azure Blob Storage

77.

Azure Data Explorer • ストリーミングデータに最適化された Azureのデータ探索・データ分析サービス • IoTとかいわゆるビッグデータで、時系列分析とか。 • KQLでDashboardの構築、外部サービスで分析結果を利用したり。 Azure Stream Analytics Query Azure Data Explorer

78.

アーキテクチャ をまとめるとこんなかんじ。

79.

AZ3166 テレメトリー (センサーデータ) JSON MQTT || HTTP Azure IoT Hub Azure Blob Storage 分析・ダッシュボード Azure Stream Analytics Query SELECT * INTO Blob FROM IoTHub Azure Data Explorer

82.

Portal.Azure みながら、 インフラの流れをもう一回説明

83.

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 …

84.

費用 • Azure Blob Storage • 置いたファイルの大きさとAzure外への通信費次第。 • Azure IoT Hub • 今回はフリー版(F1) -> 今はS1で構築しなおした。 • 繋げられるAzureのサービスの数と通信回数に制限。 • プロダクションでは有料ユニットを使ったほうがいい(セキュリティ機能とか • Azure Stream Analytics • 1ユニット月9000円ぐらい

85.

ASAを使わない • 月額ほぼ数百円で運用、かわりにリアルタイム処理ではなくなる。 • バッチ処理になるから60秒に1回IoT HubにたまったJSONを作成。 • 取得データがエッジのコードに依存しそう? • IoT Hubが対応してるサービスにしか投げれない(Blob、Event Hub、Service Bus) AZ3166 テレメトリー (センサーデータ) JSON MQTT || HTTP Azure IoT Hub メッセージルーティング Azure Blob Storage

86.

環境構築と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

87.

検証してないこと • Azure IoT Centralでエッジ側も実装するか (結局裏がIoTHubらしいけど) • 今回のPaaSからSaaSへ。 • エッジデバイスが対応してないとだめ(AZ3166はOK) • Azure Degital Twinsで構築するとできるらしい?、とかとか。

88.

検証してないこと • 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/

89.

検証してないこと • エッジデバイスへのメッセージング -> デジタルツイン • Blob、Data Explorer以外への接続 • • Azure MLだと、ストリームが流れるたびにMLにかけるとか。 • NoSQLにデータためるとか。(高い) もろもろ要件次第。