この概要では、一般的なAzure IoT ソリューションに接続するデバイスの開発に関する主要な概念について説明します。 各セクションには、追加の詳細とガイダンスを提供するコンテンツへのリンクが含まれています。
クラウドに接続されたソリューションでは、デバイスは IoT Hub などのクラウドに接続されたサービスに直接接続し、エッジに接続されたソリューション では、Azure IoT Operationsなどの環境内のエッジ接続サービスに接続します。
次の図は、一般的な エッジ接続 IoT ソリューションのコンポーネントの概要を示しています。 この記事では、図に示されているデバイス、資産、コネクタに焦点を当てます。
通常、アセットには標準プロトコルを実装するファームウェアが組み込まれています。 たとえば、ロボット アームが OPC UA クライアントである場合や、セキュリティ ビデオ カメラが ONVIF を実装している場合があります。 Azure IoT Operationsには、これらのプロトコルを使用して資産と通信し、資産から MQTT メッセージにメッセージを変換できるさまざまなコネクタが含まれています。 一部のアセットは、ユーザーがそれに対して次のような操作を実行できるメッセージを受信できます。
- セキュリティ カメラをパンしたり傾けたりします。
- ロボット アームでのログ レベルを変更します。
- ファームウェアの更新を開始します。
独自のカスタム コネクタを作成して、Azure IoT Operationsでネイティブにサポートされていないプロトコルを使用する資産に接続できます。
次の図は、一般的な クラウドに接続された IoT ソリューションのコンポーネントの概要を示しています。 この記事では、図に示されているデバイスとゲートウェイについて重点的に説明します。
Azure IoTでは、デバイス開発者がソリューション内のデバイスで実行するコードを記述します。 通常、このコードでは次のことを行います。
- クラウド エンドポイントへのセキュリティで保護された接続を確立する。
- 接続されているセンサーから収集されたテレメトリをクラウドに送信する。
- デバイスの状態を管理し、その状態をクラウドと同期する。
- クラウドから送信されたコマンドに応答する。
- クラウドからのソフトウェア更新プログラムのインストールを可能にする。
- デバイスがクラウドから切断されている間も機能し続けることができるようにする。
デバイスの種類
IoT ソリューションには、多くの種類のアセットとデバイスを含めることができます。
エッジ接続ソリューションのアセットの例を次に示します。
- ロボットアーム、コンベヤベルト、エレベーター。
- 産業用 CNC 機械、旋盤、のこぎり、ドリル。
- 医療診断用イメージングマシン。
- セキュリティ ビデオ カメラ。
- プログラマブル ロジック コントローラー。
通常、これらのアセットには標準プロトコルを実装するファームウェアが組み込まれています。 たとえば、ロボット アームが OPC UA クライアントである場合や、セキュリティ ビデオ カメラが ONVIF プロトコルを実装している場合があります。 エッジ接続ソリューションでは、特殊なコネクタを使用してこれらの資産に接続し、それらの資産から共通の形式にメッセージを変換します。
アセットの場合、デバイス開発者ロールに直接相当するものはありません。 代わりに、オペレーターがアセットに接続するようにコネクタを構成できます。 ただし、エッジ接続ソリューションでネイティブにサポートされていないプロトコルを使用する資産に接続するには、カスタム コネクタの開発が必要になる場合があります。
クラウドに接続されたソリューションのデバイスの例を次に示します。
- リモート オイル ポンプの圧力センサー。
- 空調設備の温度センサーと湿度センサー。
- エレベーターの加速度計。
- 室内の存在センサー。
これらのデバイスは、通常、マイクロコントローラー (MCU) またはマイクロプロセッサ (MTU) を使って構築されます。
- MCU は、MPU よりも低コストで操作が簡単です。
- MCU は、チップ自体の中に多くの機能 (メモリ、インターフェイス、入出力など) を組み込んでいます。 MPU は、サポート チップ内のコンポーネントからこの機能にアクセスします。
- 多くの場合、MCU ではリアルタイム OS (RTOS) が使用されるかベアメタル (OS なし) が実行され、リアルタイムの応答と、外部イベントに対する非常に決定的な反応が提供されます。 一般に、MPU は、非決定的なリアルタイム応答を提供する Windows、Linux、macOS などの汎用 OS を実行します。 通常、タスクがいつ完了するかを保証するものではありません。
特殊なハードウェアとオペレーティング システムの例を次に示します。
Windows for IoT は、クラウド接続を備えた MPU 用の埋め込みバージョンのWindowsであり、プロビジョニングと管理が容易なセキュリティで保護されたデバイスを作成できます。
Eclipse ThreadX は、MCU を搭載した IoT デバイスとエッジ デバイスのためのリアル タイム オペレーティング システムです。 Eclipse ThreadX は、制約が厳しいデバイス (バッテリ駆動で、フラッシュ メモリが 64 KB 未満) をサポートするように設計されています。
FreeRTOS は、埋め込みデバイス用のリアルタイム オペレーティング システムです。 FreeRTOS 用の Azure IoT ミドルウェアで FreeRTOS を使用して、デバイスをAzure IoTに接続できます。 デバイス開発のための RTOS オプションの概要については、「C SDK と埋め込み C SDK の使用シナリオ」をご覧ください。
Azure Sphere (統合) は、インターネット ベースのデバイス用の通信機能とセキュリティ機能が組み込まれた、セキュリティで保護された高度なアプリケーション プラットフォームです。 これは、セキュリティで保護されたコネクテッド クロスオーバー MCU と、カスタムの高レベル Linux ベース オペレーティングシステムと、継続的で更新可能なセキュリティを提供するクラウドベースのセキュリティ サービスとによって構成されています。
デバイス プリミティブ
デバイス開発者は、通常、クラウドと対話するため、デバイスのコードで次のプリミティブを実装します。
- "device-to-cloud" メッセージ。クラウドに時系列テレメトリを送信します。 たとえば、デバイスに接続されているセンサーから収集された温度データです。
- "ファイル アップロード"。キャプチャされた画像やビデオなどのメディア ファイル用です。 断続的に接続されるデバイスは、テレメトリ バッチを送信できます。 デバイスではアップロードを圧縮して帯域幅を節約できます。
- "デバイス ツイン"。状態データをクラウドと共有および同期します。 たとえば、デバイスはデバイス ツインを使用して、制御するバルブの現在の状態をクラウドに報告し、クラウドから目的の目標温度を受け取ることができます。
- "デジタル ツイン"。デジタル世界のデバイスを表します。 たとえば、デジタル ツインは、デバイスの物理的な場所、その機能、および他のデバイスとの関係を表すことができます。
- "ダイレクト メソッド"。クラウドからコマンドを受け取ります。 ダイレクト メソッドはパラメーターを使用し、応答を返すことができます。 たとえば、クラウドはダイレクト メソッドを呼び出して、30 秒以内に再起動することをデバイスに要求できます。
- クラウドからクラウドから一方向の通知を受け取る cloud-to-device メッセージ。 たとえば、更新プログラムをダウンロードする準備ができていることを示す通知です。
詳細については、「device-to-cloud 通信に関するガイダンス」および「cloud-to-device 通信に関するガイダンス」を参照してください。
SDK とライブラリ
デバイス SDK には、基になる通信プロトコルを知らなくてもプリミティブを使用できる高度な抽象化が用意されています。 また、デバイス SDK では、クラウドへのセキュリティ保護された接続の確立とデバイスの認証の詳細についても扱います。
MPU デバイスの場合、デバイス SDK は次の言語で使用できます。
MCU デバイスの場合、次を参照してください。
サンプルとガイダンス
すべてのデバイス SDK には、SDK を使用してクラウドに接続し、テレメトリを送信し、他のプリミティブを使用する方法を示すサンプルが含まれています。
その他のサンプルについては、コード サンプル ブラウザーを参照してください。
デバイス SDK を使用しないデバイス開発
いずれかのデバイス SDKS を使用することをお勧めしますが、そうしたくないシナリオがある場合もあります。 これらのシナリオでは、デバイス コードで、IoT Hubおよび Device Provisioning Service (DPS) でサポートされている通信プロトコルのいずれかを直接使用する必要があります。
詳細については、次を参照してください。
モデリングとスキーマ
デバイスとアセットのモデルでは、デバイスとアセットがクラウドと交換するデータを定義します。 モデルによって、デバイスとアセットを IoT ソリューションと統合するための、ロー コードまたはノー コードのさまざまなシナリオが可能になります。
エッジ接続ソリューションでは、オペレーターが資産に接続するようにコネクタを構成します。 この構成には、アセットのデータとクラウドのスキーマの間のマッピングが含まれます。 たとえば、OPC UA コネクタを使用すると、オペレーターは OPC UA ノード ID を MQTT ブローカーと交換された JSON メッセージ内のデータ ポイントとイベントにマップできます。 次のスクリーンショットは、このような 2 つのマッピングを定義するデジタル操作エクスペリエンス Web UI の例を示しています。
ソリューションの他の場所では、オペレーターは OPC UA ノード ID の詳細を知らなくても 、Temperature タグと Tag 10 タグを直接参照できます。
クラウドに接続されたソリューションでは、IoT プラグ アンド プレイを使用すると、ソリューション ビルダーは、手動で構成することなく、IoT デバイスをソリューションと統合できます。 IoT プラグ アンド プレイの中核となるのは、デバイスがその機能を IoT Central などのIoT プラグ アンド プレイ対応アプリケーションにアドバタイズするために使用するデバイス モデルです。 このモデルは、次の内容を定義する要素のセットとして構成されます。
- デバイスまたは他のエンティティの読み取り専用および書き込み可能な状態を表す プロパティ。 たとえば、デバイスのシリアル番号は読み取り専用のプロパティであり、サーモスタットでの目標温度は書き込み可能なプロパティとなる場合があります。
- デバイスによって出力されるデータである "テレメトリ"。このデータはセンサー読み取り値の通常のストリーム、偶発的なエラー、または情報メッセージのいずれかです。
- デバイス上で実行できる関数または操作を記述した "コマンド"。 たとえば、コマンドでは、ゲートウェイを再起動したり、リモート カメラを使用して写真を撮影したりすることが可能です。
インターフェイス内でこれらの要素をグループ化してモデル間で再利用すれば、コラボレーションを容易にし、開発を高速化することができます。
モデルは、Digital Twins Definition Language (DTDL) を使用して指定します。
IoT プラグ アンド プレイ、モデリング、DTDL の使用は省略可能です。 ioT デバイス プリミティブは、IoT プラグ アンド プレイやモデリングを使用せずに使用できます。 また、Azure Digital Twins サービスでは、DTDL モデルを使用して、建物や工場などの環境のデジタル モデルに基づいてツイン グラフを作成します。
デバイス開発者として、IoT プラグ アンド プレイ デバイスを実装する場合は、一連の規則に従う必要があります。 これらの規則では、デバイス SDK で使用可能なプリミティブを使用して、コードにデバイス モデルを実装するための標準的な方法が提供されます。
コンテナー詰め
コンテナ化は、軽量の分離された環境にコードをパッケージ化して実行する方法です。 コンテナーは移植可能であり、コンテナー ランタイムをサポートする任意のプラットフォームで実行できます。 コンテナーは、コードに一貫したランタイム環境を提供するので、コードをパッケージ化してデプロイするのによい方法です。 ランタイム環境には、通常、コードの実行に必要なサービス、ライブラリ、パッケージが含まれます。
Azure IoT Operationsは、エッジで実行されるすべてのコネクタ、ブローカー、およびその他のコンポーネントをコンテナー化します。 Azure IoT Operationsコンテナー オーケストレーション プラットフォームである Kubernetes クラスターにデプロイされます。 ユーザーが作成したカスタム コネクタまたは他のコンポーネントを、Kubernetes クラスターにデプロイします。
Azure IoT Edgeをエッジ接続ゲートウェイとして使用するソリューションは、エッジ接続ソリューションとクラウド接続ソリューションの両方の要素を組み合わせたハイブリッドソリューションとして評価できます。
Docker などのコンテナーを使用してデバイス コードを実行する場合は、コンテナー インフラストラクチャの機能を使用してデバイスにコードをデプロイできます。 コンテナーを使用すると、インストール済みの必要なすべてのライブラリとパッケージ バージョンを使用して、コードのランタイム環境を定義することもできます。 コンテナーを使用すると、更新プログラムをデプロイし、IoT デバイスのライフサイクルを管理することが容易になります。
Azure IoT Edgeコンテナーでデバイス コードを実行します。 Azure IoT Edgeを使用して、コード モジュールをデバイスに展開できます。 詳細については、「独自のIoT Edge モジュールを開発するを参照してください。
ヒント
Azure IoT Edgeにより、複数のシナリオが可能になります。 コンテナーで IoT デバイス コードを実行するだけでなく、Azure IoT Edgeを使用してデバイスでAzure サービスを実行し、フィールド ゲートウェイを実装できます。 詳細については、「Azure IoT Edgeですか?
次の表で示すのは、使用可能な IoT デバイス開発ツールの一部です。
| ツール |
説明 |
|
Azure IoT Hub (VS Code 拡張機能) |
この VS Code 拡張機能を使用すると、VS Code 内からIoT Hubリソースとデバイスを管理できます。 |
|
Azure IoT エクスプローラー |
このクロスプラットフォーム ツールを使用すると、デスクトップ アプリケーションからIoT Hubリソースとデバイスを管理できます。 |
| Azure CLI の Azure IoT拡張機能 |
この CLI 拡張機能には、デバイスとの対話をテストするのに役立つ az iot device simulate、az iot device c2d-message、az iot hub monitor-events などのコマンドが含まれています。 |
関連するコンテンツ