IoT のアセットとデバイスの開発
[アーティクル] 01/17/2025
2 人の共同作成者
フィードバック
この記事の内容
この概要では、一般的な 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 と FreeRTOS 用 Azure IoT ミドルウェアを使って、デバイスを 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 を使用してクラウドに接続し、テレメトリを送信し、他のプリミティブを使用する方法を示すサンプルが含まれています。
IoT デバイス開発 のサイトには、さまざまなデバイスの種類とシナリオのためのコードを実装する方法を示すチュートリアルとハウツー ガイドが含まれています。
その他のサンプルについては、コード サンプル ブラウザー を参照してください。
デバイス 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 クラスターにデプロイします。
IoT Hub へのエッジ ベースのゲートウェイとして 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 デバイス開発ツールの一部です。