メインコンテンツまでスキップ

IoTの深堀り

このレッスンの概要を示すスケッチノート

スケッチノート: Nitya Narasimhan 作。画像をクリックすると大きなバージョンが表示されます。

このレッスンはMicrosoft ReactorHello IoTシリーズの一環として教えられました。このレッスンは1時間のレッスンと、レッスンの一部をさらに深く掘り下げて質問に答える1時間のオフィスアワーの2つのビデオとして教えられました。

レッスン2: IoTの深堀り

レッスン2: IoTの深堀り - オフィスアワー

🎥 上の画像をクリックしてビデオを視聴してください

講義前のクイズ

講義前のクイズ

はじめに

このレッスンでは、前回のレッスンでカバーしたいくつかの概念をさらに深く掘り下げます。

このレッスンでカバーする内容は次のとおりです:

IoTアプリケーションのコンポーネント

IoTアプリケーションの2つのコンポーネントは、インターネットモノです。これらの2つのコンポーネントをもう少し詳しく見てみましょう。

モノ

Raspberry Pi 4

IoTのモノ部分は、物理的な世界と相互作用できるデバイスを指します。これらのデバイスは通常、小型で低価格のコンピューターであり、低速で動作し、低電力を使用します。例えば、数百メガヘルツ(PCのギガヘルツに対して)で動作し、時にはバッテリーで数週間、数ヶ月、さらには数年も動作することができるキロバイトのRAM(PCのギガバイトに対して)を持つシンプルなマイクロコントローラーです。

これらのデバイスは、センサーを使用して周囲からデータを収集したり、出力やアクチュエーターを制御して物理的な変化を加えたりすることで、物理的な世界と相互作用します。典型的な例はスマートサーモスタットです。これは、温度センサー、ダイヤルやタッチスクリーンなどの希望温度を設定する手段、および希望温度範囲外の温度が検出されたときにオンにできる暖房または冷房システムへの接続を持つデバイスです。温度センサーが部屋が寒すぎることを検出し、アクチュエーターが暖房をオンにします。

温度とダイヤルをIoTデバイスへの入力として示し、ヒーターの制御を出力として示す図

IoTデバイスとして機能するさまざまなモノがあり、専用のハードウェアから一般的なデバイス、さらにはスマートフォンまであります。スマートフォンは、周囲の世界を検出するためのセンサーと、目的地へのナビゲーション指示を与えるためのスピーカーなどのアクチュエーターを使用して、世界と相互作用することができます。

✅ センサーからデータを読み取り、それを使用して意思決定を行う他のシステムを考えてみてください。例えば、オーブンのサーモスタットがその一例です。もっと見つけられますか?

インターネット

IoTアプリケーションのインターネット側は、IoTデバイスがデータを送受信するために接続できるアプリケーション、およびIoTデバイスからのデータを処理し、IoTデバイスのアクチュエーターに送信するリクエストを決定するのに役立つ他のアプリケーションで構成されます。

典型的なセットアップの一例として、IoTデバイスが接続するクラウドサービスがあり、このクラウドサービスがセキュリティの処理、IoTデバイスからのメッセージの受信、およびデバイスへのメッセージの送信を行います。このクラウドサービスは、センサーのデータを処理または保存する他のアプリケーションに接続し、他のシステムからのデータと組み合わせて意思決定を行います。

デバイスは必ずしもWiFiや有線接続を介して直接インターネットに接続するわけではありません。一部のデバイスは、Bluetoothなどの技術を使用してメッシュネットワーキングを行い、インターネット接続を持つハブデバイスを介して接続します。

スマートサーモスタットの例では、サーモスタットは家庭のWiFiを使用してクラウドサービスに接続します。温度データをこのクラウドサービスに送信し、そこからデータベースに書き込まれ、ホームオーナーが電話アプリを使用して現在および過去の温度を確認できるようにします。クラウド内の別のサービスがホームオーナーの希望温度を知り、クラウドサービスを介してIoTデバイスにメッセージを送信し、暖房システムをオンまたはオフにするように指示します。

温度とダイヤルをIoTデバイスへの入力として示し、IoTデバイスからクラ�ウドへの双方向通信、クラウドから電話への双方向通信、およびIoTデバイスからヒーターへの制御を示す図

さらにスマートなバージョンでは、他のIoTデバイスに接続された他のセンサーからのデータや、天気、さらにはカレンダーなどのデータを使用して、温度をスマートに設定するための意思決定を行うためにクラウド内のAIを使用することができます。例えば、カレンダーから休暇中であることを読み取ると暖房をオフにしたり、使用する部屋に応じて部屋ごとに暖房をオフにしたりすることができます。データから学習して時間とともにますます正確になります。

複数の温度センサーとダイヤルをIoTデバイスへの入力として示し、IoTデバイスからクラウドへの双方向通信、クラウドから電話、カレンダー、天気サービスへの双方向通信、およびIoTデバイスからヒーターへの制御を示す図

✅ インターネット接続されたサーモスタットをよりスマートにするのに役立つ他のデータは何ですか?

エッジでのIoT

IoTのIはインターネットを意味しますが、これらのデバイスはインターネットに接続する必要はありません。場合によっては、デバイスはローカルネットワーク上で実行されるゲートウェイデバイスである「エッジ」デバイスに接続し、インターネット経由の呼び出しを行わずにデータを処理することができます。これは、大量のデータがある場合やインターネット接続が遅い場合に高速であり、船上や人道的危機に対応する際の災害地域など、インターネット接続が不可能な場所でオフラインで実行することができ、データをプライベートに保つことができます。一部のデバイスは、クラウドツールを使用して作成された処理コードを含み、インターネット接続を使用せずにデータを収集して応答するためにローカルで実行します。

この一例として、Apple HomePod、Amazon Alexa、Google Homeなどのスマートホームデバイスがあります。これらのデバイスは、クラウドでトレーニングされたAIモデルを使用して音声を聞きますが、デバイス上でローカルに実行されます。これらのデバイスは、特定の単語やフレーズが話されたときに「目覚め」、その後に音声をインターネット経由で処理するために送信します。デバイスは、音声の一時停止を検出したときなど、適切なポイントで音声の送信を停止します。デバイスを目覚めさせる前に話されたすべてのこと、およびデバイスがリスニングを停止した後に話されたすべてのことは、インターネット経由でデバイスプロバイダーに送信されず、したがってプライベートになります。

✅ プライバシーが重要な他のシナリオを考えてみてください。データの処理がクラウドではなくエッジで行われた方が良い場合があります。ヒントとして、カメラやその他のイメージングデバイスを搭載したIoTデバイスを考えてみてください。

IoTセキュリティ

インターネット接続がある場合、セキュリティは重要な考慮事項です。「IoTのSはセキュリティを意味する」という古いジョークがありますが、IoTには「S」がないため、セキュリティがないことを暗示しています。

IoTデバイスはクラウドサービスに接続するため、そのクラウドサービスのセキュリティに依存します。クラウドサービスが任意のデバイスの接続を許可する場合、悪意のあるデータが送信されたり、ウイルス攻撃が発生したりする可能性があります。これは、IoTデバイスが他のデバイスと相互作用し制御するため、非常に現実的な影響を及ぼす可能性があります。例えば、Stuxnetワームは遠心分離機のバルブを操作して損傷を与えました。ハッカーはまた、セキュリティの不備を利用してベビーモニターやその他の家庭用監視デバイスにアクセスしたこともあります。

💁 時には、IoTデバイスやエッジデバイスはデータをプライベートかつ安全に保つためにインターネットから完全に隔離されたネットワークで実行されます。これはエアギャップとして知られています。

マイクロコントローラーの深堀り

前回のレッスンでは、マイクロコントローラーを紹介しました。今回はそれをさらに深く掘り下げてみましょう。

CPU

CPUはマイクロコントローラーの「脳」です。これはコードを実行し、接続されたデバイスからデータを送受信するプロセッサです。CPUには1つ以上のコアが含まれており、これらのコアは協力してコードを実行することができます。

CPUは毎秒何百万回または何十億回も刻むクロックに依存しています。各ティックまたはサイクルは、CPUが実行できるアクションを同期させます。各ティックで、CPUはプログラムからの命令を実行できます。例えば、外部デバイスからデータを取得したり、数学的な計算を実行したりします。この規則的なサイクルにより、次の命令が処理される前にすべてのアクションが完了することができます。

クロックサイクルが速いほど、毎秒処理できる命令が多くなり、したがってCPUが速くなります。CPUの速度はヘルツ(Hz)で測定されます。1Hzは1秒あたりの1サイクルまたはクロックティックを意味します。

🎓 CPUの速度は通常MHzまたはGHzで示されます。1MHzは100万Hz、1GHzは10億Hzです。

💁 CPUはフェッチ-デコード-実行サイクルを使用してプログラムを実行します。各クロックティックごとに、CPUはメモリから次の命令をフェッチし、それをデコードし、次にそれを実行します。例えば、算術論理ユニット(ALU)を使用して2つの数値を加算します。一部の実行には複数のティックが必要なため、次のサイクルは命令が完了した後の次のティックで実行されます。

フェッチ-デコード-実行サイクルを示す図。フェッチはRAMに保存されたプログラムから命令を取得し、次にCPUでデコードおよび実行します

マイクロコントローラーのクロック速度は、デスクトップやラップトップコンピューター、さらにはほとんどのスマートフォンよりもはるかに低いです。例えば、Wio TerminalのCPUは120MHz、つまり1秒間に120,000,000サイクルで動作します。

✅ 平均的なPCやMacのCPUは、複数のコアを持ち、複数のギガヘルツで動作します。つまり、クロックティックは1秒間に数十億回です。あなたのコンピューターのクロック速度を調べ、Wio Terminalよりもどれだけ速いかを比較してください。

各クロックサイクルは電力を消費し、熱を生成します。ティックが速いほど、消費される電力が多くなり、生成される熱も多くなります。PCにはヒートシンクとファンがあり、熱を除去します。これがなければ、数秒以内に過熱してシャットダウンします。マイクロコントローラーは通常、これらを持たず、はるかに低速で動作するため、はるかに低温で動作します。PCはメイン電源または数時間持続する大きなバッテリーで動作しますが、マイクロコントローラーは小さなバッテリーで数日、数ヶ月、さらには数年も動作することができます。マイクロコントローラーには、異なる速度で動作するコアがあり、CPUの負荷が低いときに低速の低電力コアに切り替えて電力消費を削減することができます。

💁 一部のPCやMacは、同じ高速高電力コアと低速低電力コアの組み合わせを採用しており、実行されるタスクに応じてバッテリー寿命または速度を最適化するために切り替えます。例えば、最新のAppleラップトップのM1チップは、4つのパフォーマンスコアと4つの効率コアを切り替えて、バッテリー寿命または速度を最適化します。

✅ 少し調査してみましょう: WikipediaのCPU記事でCPUについて調べてみてください。

タスク

Wio Terminalを調査します。

これらのレッスンでWio Terminalを使用している場合、CPUを見つけてください。Wio Terminal製品ページハードウェア概要セクションで内部の写真を見つけ、背面の透明なプラスチックウィンドウを通してCPUを見つけてください。

メモリ

マイクロコントローラーには通常、プログラムメモリとランダムアクセスメモリ(RAM)の2種類のメモリがあります。

プログラムメモリは不揮発性であり、デバイスに電力が供給されていないときでも書き込まれたものが保持されます。これはプログラムコードを保存するメモリです。

RAMはプログラムが実行されるために使用され、プログラムによって割り当てられた変数や周辺機器から収集されたデータを含みます。RAMは揮発性であり、電力が失われると内容が失われ、プログラムがリセットされます。

🎓 プログラムメモリはコードを保存し、電力がなくても保持されます。

🎓 RAMはプログラムを実行するために使用され、電力がなくなるとリセットされます。

CPUと同様に、マイクロコントローラーのメモリはPCやMacよりも桁違いに小さいです。典型的なPCには8ギガバイト(GB)のRAM、つまり8,000,000,000バイトがあり、各バイトは1文字または0〜255の数値を保存するのに十分なスペースです。マイクロコントローラーには通常、キロバイト(KB)のRAMしかなく、キロバイトは1,000バイトです。上記のWio Terminalには192KBのRAM、つまり192,000バイトがあります。これは平均的なPCの40,000倍以上少ないです!

以下の図は、192KBと8GBの相対サイズの違いを示しています。中央の小さな点が192KBを表しています。

192KBと8GBの比較 - 40,000倍以上の差

プログラムストレージもPCよりも小さいです。典型的なPCには500GBのハードドライブがあり、プログラムストレージとして使用されますが、マイクロコントローラーには通常、キロバイトまたは数メガバイト(MB)のストレージしかありません(1MBは1,000KB、つまり1,000,000バイトです)。Wio Terminalには4MBのプログラムストレージがあります。

✅ 少し調査してみましょう: あなたがこれを読んでいるコンピューターにはどれだけのRAMとストレージがありますか?これをマイクロコントローラーと比較してみてください。

入出力

マイクロコントローラーは、センサーからデータを読み取り、アクチュエーターに制御信号を送信するための入出力(I/O)接続が必要です。通常、いくつかの汎用入出力(GPIO)ピンが含まれています。これらのピンは、ソフトウェアで入力(信号を受信する)または出力(信号を送信する)に設定できます。

🧠⬅️ 入力ピンはセンサーからの値を読み取るために使用されます

🧠➡️ 出力ピンはアクチュエーターに指示を送信します

✅ これについては後のレッスンで詳しく学びます。

タスク

Wio Terminalを調査します。

これらのレッスンでWio Terminalを使用している場合、GPIOピンを見つけてください。Wio Terminal製品ページピンアウト図セクションで各ピンの詳細を学びます。Wio Terminalにはピン番号が記載されたステッカーが付属しているので、まだ取り付けていない場合は今すぐ取り付けてください。

物理的なサイズ

マイクロコントローラーは通常、小型です。最小のものはFreescale Kinetis KL03 MCUで、ゴルフボールのくぼみに収まるほど小さいです。PCのCPUだけでも40mm x 40mmのサイズであり、数秒以上動作するために必要なヒートシンクやファンを含まないため、完全なマイクロコントローラーよりもはるかに大きいです。マイクロコントローラー、ケース、画面、およびさまざまな接続とコンポーネントを備えたWio Terminal開発キットは、裸のIntel i9 CPUよりも少し大きいだけであり、ヒートシンクとファンを備えたCPUよりもはるかに小さいです。

デバイスサイズ
Freescale Kinetis KL031.6mm x 2mm x 1mm
Wio Terminal72mm x 57mm x 12mm
Intel i9 CPU、ヒートシンクとファン136mm x 145mm x 103mm

フレームワークとオペレーティングシステム

低速とメモリサイズのため、マイクロコントローラーはデスクトップの意味でのオペレーティングシステム(OS)を実行しません。コンピューターを動作させるオペレーティングシステム(Windows、Linux、macOS)は、多くのメモリと処理能力を必要とし、マイクロコントローラーには不要なタスクを実行します。マイクロコントローラーは通常、非常に特定のタスクを実行するようにプログラムされているため、ユーザーインターフェースのサポート、音楽や映画の再生、ドキュメントやコードの作成ツールの提供、ゲームのプレイ、インターネットの閲覧などを行う必要があるPCやMacとは異なります。

OSなしでマイクロコントローラーをプログラムするには、周辺機器と通信できるAPIを使用してコードをビルドし、マイクロコントローラーで実行できるようにするツールが必要です。各マイクロコントローラーは異なるため、メーカーは通常、標準フレームワークをサポートしており、標準の「レシピ」に従ってコードをビルドし、サポートされている任意のマイクロコントローラーで実行できるようにします。

マイクロコントローラーをプログラムするためにOSを使用することもできます。これらはリアルタイムオペレーティングシステム(RTOS)と呼ばれ、リアルタイムで周辺機器にデータを送受信するように設計されています。これらのオペレーティングシステムは非常に軽量であり、次のような機能を提供します:

  • マルチスレッド、複数のコアで同時にコードの複数のブロックを実行するか、1つのコアで順番に実行することができます
  • インターネット経由で安全に通信するためのネットワーキング
  • 画面を持つデバイスのユーザーインターフェース(UI)を構築するためのグラフィカルユーザーインターフェース(GUI)コンポーネント

✅ いくつかの異なるRTOSについて調べてみましょう: Azure RTOS, FreeRTOS, Zephyr

Arduino

Arduinoのロゴ

Arduinoは、おそらく学生、ホビイスト、メーカーの間で最も人気のあるマイクロコントローラーフレームワークです。Arduinoは、ソフトウェアとハードウェアを組み合わせたオープンソースのエレクトロニクスプラットフォームです。Arduino自体や他のメーカーからArduino互換ボードを購入し、Arduinoフレームワークを使用してコードを作成できます。

ArduinoボードはCまたはC++でコーディングされます。C/C++を使用することで、コードを非常に小さくコンパイルし、制約のあるデバイスであるマイクロコントローラーで高速に実行できます。Arduinoアプリケーションのコアはスケッチと呼ばれ、2つの関数を持つC/C++コードです - setuploop。ボードが起動すると、Arduinoフレームワークコードはsetup関数を1回実行し、その後loop関数を繰り返し実行し、電源がオフになるまで連続して実行します。

setup関数には、WiFiやクラウドサービスへの接続や入力および出力用のピンの初期化などのセットアップコードを記述します。loop関数には、センサーからの読み取りやクラウドへの値の送信などの処理コードを記述します。通常、各ループの最後に遅延を含めます。例えば、センサーデータを10秒ごとに送信したい場合は、ループの最後に10秒の遅延を追加してマイクロコントローラーをスリープさせ、10秒後に再度ループを実行します。

setupを最初に実行し、その後loopを繰り返し実行するArduinoスケッチ

✅ このプログラムアーキテクチャはイベントループまたはメッセージループとして知られています。多くのアプリケーションがこのアーキテクチャを使用しており、Windows、macOS、LinuxなどのOSで実行されるほとんどのデスクトップアプリケーションの標準です。loopはボタンなどのユーザーインターフェースコンポーネントやキーボードなどのデバイスからのメッセージをリッスンし、それに応答します。詳細はイベントループに関する記事で読むことができます。

Arduinoは、マイクロコントローラーとI/Oピンと対話するための標準ライブラリを提供しており、異なるマイクロコントローラーで実行するための異なる実装を提供します。例えば、delay関数は、指定された期間プログラムを一時停止し、digitalRead関数は、どのボードでコードが実行されているかに関係なく、指定されたピンからHIGHまたはLOWの値を読み取ります。これらの標準ライブラリにより、1つのボード用に書かれたArduinoコードは、他のArduinoボード用に再コンパイルして実行することができ、ピンが同じであり、ボードが同じ機能をサポートしている限り動作します。

Arduinoプロジェクトに追加機能を追加するためのサードパーティのArduinoライブラリの大規模なエコシステムがあり、センサーやアクチュエーターの使用やクラウドIoTサービスへの接続などが可能です。

タスク

Wio Terminalを調査します。

これらのレッスンでWio Terminalを使用している場合、前回のレッスンで書いたコードを再読してください。setup関数とloop関数を見つけてください。ループ関数が繰り返し呼び出されるシリアル出力を監視します。setup関数にシリアルポートに書き込むコードを追加し、デバイスを再起動するたびにこのコードが1回だけ呼び出されることを確認します。側面の電源スイッチでデバイスを再起動して、デバイスが再起動するたびにこれが呼び出されることを示します。

シングルボードコンピューターの深堀り

前回のレッスンでは、シングルボードコンピューターを紹介しました。今回はそれをさらに深く掘り下げてみましょう。

Raspberry Pi

Raspberry Piのロゴ

Raspberry Pi Foundationは、特に学校レベルでのコンピューターサイエンスの学習を促進するために2009年に設立された英国の慈善団体です。この使命の一環として、Raspberry Piと呼ばれるシングルボードコンピューターを開発しました。現在、Raspberry Piは3つのバリエーションで提供されています - フルサイズバージョン、小型のPi Zero、および最終的なIoTデバイスに組み込むことができるコンピュートモジュールです。

Raspberry Pi 4

最新のフルサイズRaspberry PiはRaspberry Pi 4Bです。これは、1.5GHzで動作するクアッドコア(4コア)CPU、2、4、または8GBのRAM、ギガビットイーサネット、WiFi、2つの4k画面をサポートするHDMIポート、オーディオおよびコンポジットビデオ出力ポート、USBポート(2つのUSB 2.0、2つのUSB 3.0)、40のGPIOピン、Raspberry Piカメラモジュール用のカメラコネクタ、およびSDカードスロットを備えています。これらすべてが88mm x 58mm x 19.5mmのボードに収まり、3AのUSB-C電源で動作します。これらは35米ドルから始まり、PCやMacよりもはるかに安価です。

💁 Pi4がキーボードに組み込まれたオールインワンコンピューターであるPi400もあります。

Raspberry Pi Zero

Pi Zeroははるかに小型で、低電力です。1GHzで動作するシングルコアCPU、512MBのRAM、WiFi(Zero Wモデル)、単一のHDMIポート、マイクロUSBポート、40のGPIOピン、Raspberry Piカメラモジュール用のカメラコネクタ、およびSDカードスロットを備えています。サイズは65mm x 30mm x 5mmで、非常に少ない電力を消費します。Zeroは5米ドル、WiFi付きのWバージョンは10米ドルです。

🎓 これらの両方のCPUはARMプロセッサであり、ほとんどのPCやMacに見られるIntel/AMD x86またはx64プロセッサとは異なります。これらは、いくつかのマイクロコントローラー、およびほぼすべての携帯電話、Microsoft Surface X、および新しいApple SiliconベースのApple Macに見られるCPUと同様です。

すべてのRaspberry Piバリエーションは、Raspberry Pi OSと呼ばれるDebian Linuxのバージョンを実行します。これは、画面が不要な「ヘッドレス」プロジェクトに最適なデスクトップなしのライトバージョン、またはWebブラウザ、オフィスアプリケーション、コーディングツール、ゲームを備えたフルデスクトップ環境を備えたフルバージョンとして利用できます。OSがDebian Linuxのバージョンであるため、ARMプロセッサ用にビルドされたDebianで実行される任意のアプリケーションやツールをインストールできます。

タスク

Raspberry Piを調査します。

これらのレッスンでRaspberry Piを使用している場合、ボード上のさまざまなハードウェアコンポーネントについて調べてください。

シングルボードコンピューターのプログラミング

シングルボードコンピューターはフルコンピューターであり、フルOSを実行します。これにより、マイクロコントローラーがArduinoなどのフレームワークのサポートに依存するのとは異なり、さまざまなプログラミング言語、フレームワーク、およびツールを使用してコードを作成できます。ほとんどのプログラミング言語には、センサーやアクチュエーターからデータを送受信するためのGPIOピンにアクセスできるライブラリがあります。

✅ あなたが知っているプログラミング言語は何ですか?それらはLinuxでサポートされていますか?

Raspberry PiでIoTアプリケーションを構築するための最も一般的なプログラミング言語はPythonです。Pi用に設計されたハードウェアの大規模なエコシステムがあり、ほぼすべてのこれらにはPythonライブラリとして使用するために必要なコードが含まれています。これらのエコシステムの一部は「ハット」に基づいており、Piの上に帽子のように座り、40のGPIOピンに大きなソケットで接続します。これらのハットは、画面、センサー、リモートコントロールカー、または標準化されたケーブルを持つセンサーを接続するためのアダプターなどの追加機能を提供します。

プロフェッショナルなIoT展開におけるシングルボードコンピューターの使用

シングルボードコンピューターは、開発キットとしてだけでなく、プロフェッショナルなIoT展開にも使用されます。これらは、ハードウェアを制御し、機械学習モデルの実行などの複雑なタスクを実行するための強力な方法を提供します。例えば、Raspberry Pi 4コンピュートモジュールは、ほとんどのポートを持たないコンパクトで安価な形態でRaspberry Pi 4のすべてのパワーを提供し、カスタムハードウェアに組み込むように設計されています。


🚀 チャレンジ

前回のレッスンのチャレンジは、家庭、学校、職場にあるIoTデバイスをできるだけ多くリストアップすることでした。このリストの各デバイスについて、それらがマイクロコントローラー、シングルボードコンピューター、またはその両方の混合で構築されていると思いますか?

講義後のクイズ

講義後のクイズ

レビューと自己学習

✅ これらのガイドと、ハードウェアガイドのリンクをたどって表示されるコストを使用して、使用するハードウェアプラットフォームを決定するか、仮想デバイスを使用するかを決定してください。

課題

マイクロコントローラーとシングルボードコンピューターの比較と対比