IoT デバイス開発

この概要では、一般的な Azure IoT ソリューションに接続するデバイスの開発に関する主要な概念について説明します。 各セクションには、追加の詳細とガイダンスを提供するコンテンツへのリンクが含まれています。

一般的な IoT ソリューションのコンポーネントの概要を次の図に示します。 この記事では、図に示されているデバイスとゲートウェイに重点を置きます。

デバイスの接続領域を強調表示した、IoT ソリューション アーキテクチャの概要を示す図。

Azure IoT では、デバイス開発者がソリューション内のデバイスで実行するコードを書きます。 通常、このコードでは次のことを行います。

  • クラウド エンドポイントへのセキュリティで保護された接続を確立する。
  • 接続されているセンサーから収集されたテレメトリをクラウドに送信する。
  • デバイスの状態を管理し、その状態をクラウドと同期する。
  • クラウドから送信されたコマンドに応答する。
  • クラウドからのソフトウェア更新プログラムのインストールを可能にする。
  • デバイスがクラウドから切断されている間も機能し続けることができるようにする。

デバイスの種類

IoT デバイスは、マイクロコントローラー (MCU) とマイクロプロセッサ (MPU) の 2 つのカテゴリに大別できます。

  • 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 未満) をサポートするように設計されています。

Azure Sphere とは、インターネットに接続されたデバイスのための通信およびセキュリティ機能が組み込まれている、セキュリティで保護された高水準のアプリケーション プラットフォームです。 これは、セキュリティで保護されたコネクテッド クロスオーバー MCU と、カスタムの高レベル Linux ベース オペレーティングシステムと、継続的で更新可能なセキュリティを提供するクラウドベースのセキュリティ サービスとによって構成されています。

プリミティブ

Azure IoT デバイスでは、次のプリミティブを使用してクラウドと対話できます。

  • "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 プラグ アンド プレイにより、ソリューション ビルダーは、手動で構成することなく、独自のソリューションに IoT デバイスを統合することができます。 IoT プラグ アンド プレイの中核となるのは、IoT Central のような IoT プラグ アンド プレイ対応アプリケーションにデバイスが自身の機能を公開するために使用するデバイス モデルです。 このモデルは、次の内容を定義する要素のセットとして構成されます。

  • デバイスまたは他のエンティティの読み取り専用および書き込み可能な状態を表す プロパティ。 たとえば、デバイスのシリアル番号は読み取り専用のプロパティであり、サーモスタットでの目標温度は書き込み可能なプロパティとなる場合があります。
  • デバイスによって出力されるデータである "テレメトリ"。このデータはセンサー読み取り値の通常のストリーム、偶発的なエラー、または情報メッセージのいずれかです。
  • デバイス上で実行できる関数または操作を記述した "コマンド"。 たとえば、コマンドでは、ゲートウェイを再起動したり、リモート カメラを使用して写真を撮影したりすることが可能です。

インターフェイス内でこれらの要素をグループ化してモデル間で再利用すれば、コラボレーションを容易にし、開発を高速化することができます。

このモデルは Digital Twins Definition Language (DTDL) を使用して指定されます。

IoT プラグ アンド プレイ、モデリング、および DTDL の使用はオプションです。 IoT デバイス プリミティブは、IoT プラグ アンド プレイやモデリングを使用せずに使用できます。 また、Azure Digital Twins サービスでは、DTDL モデルを使用して、建物や工場などの環境のデジタル モデルに基づいてツイン グラフを作成します。

デバイス開発者は、IoT プラグ アンド プレイ デバイスを実装するときに、一連の規則に従う必要があります。 これらの規則では、デバイス SDK で使用可能なプリミティブを使用して、コードにデバイス モデルを実装するための標準的な方法が提供されます。

詳細については、以下をご覧ください。

コンテナー化されたデバイス コード

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 simulateaz iot device c2d-messageaz iot hub monitor-events などのコマンドが含まれています。

次のステップ

Azure IoT ソリューションでのデバイス開発の概要を確認したので、次に推奨される手順をいくつか次に示します。