Share via


チュートリアル: ESPRESSIF ESP32-Azure IoT キットを IoT Hub に接続する

このチュートリアルでは、FreeRTOS 向け Azure IoT ミドルウェアを使用して、ESPRESSIF ESP32-Azure IoT キット (現時点では ESP32 DevKit) を Azure IoT に接続します。

次のタスクを実行します。

  • ESP32 DevKit をプログラミングするための、一連の組み込み開発ツールをインストールする
  • イメージをビルドして ESP32 DevKit にフラッシュする
  • Azure CLI を使って、ESP32 DevKit が接続する Azure IoT ハブを作成し、管理する
  • Azure IoT エクスプローラーを使用して、IoT ハブへのデバイスの登録、デバイスのプロパティの表示、デバイス テレメトリの表示、デバイスでのダイレクト コマンドの呼び出しを行う

前提条件

  • Windows 10 または Windows 11 を実行している PC
  • リポジトリを複製するための Git
  • ハードウェア
  • 有効な Azure サブスクリプション Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

開発環境の準備

ツールのインストール

開発環境をセットアップするには、最初に ESPRESSIF のビルド環境をインストールします。 インストーラーには、デバイスの複製、ビルド、フラッシュ、および監視に必要なすべてのツールが含まれています。

ESP IDF ツールをインストールするには、次のようにします。

  1. ESP-IDF v5.0 Offline インストーラーをダウンロードして起動します。
  2. インストーラーによりインストールするコンポーネントが一覧表示されたら、すべてのコンポーネントを選択してインストールを完了します。

リポジトリを複製する

次のリポジトリを複製して、すべてのサンプル デバイス コード、設定スクリプト、SDK のドキュメントをダウンロードします。 このリポジトリを複製している場合は、もう一度実行する必要はありません。

リポジトリを複製するには、次のコマンドを実行します。

git clone --recursive  https://github.com/Azure-Samples/iot-middleware-freertos-samples.git

Windows 10 と 11 の場合は、長いパスが有効になっていることを確認します。

  1. 長いパスを有効にするには、Windows 10 で長いパスを有効にする方法に関するページを参照してください。

  2. Git において、ターミナルで管理者アクセス許可を使用して次のコマンドを実行します。

    git config --system core.longpaths true
    

クラウド コンポーネントを作成する

IoT Hub の作成

Azure CLI を使用して、デバイスのイベントとメッセージングを処理する IoT ハブを作成できます。

IoT ハブを作成するには:

  1. CLI アプリを起動します。 このクイックスタートの以降の部分で CLI コマンドを実行するには、コマンド構文をコピーして CLI アプリに貼り付け、変数の値を編集して Enter キーを押します。

    • Cloud Shell を使ってい場合は、こちらの Cloud Shell のリンクを右クリックし、新しいタブで開くオプションを選びます。
    • Azure CLI をローカルで使用している場合は、CLI コンソール アプリを起動し、Azure CLI にサインインします。
  2. az extension add を実行して、azure-iot 拡張機能をインストールするか、最新バージョンにアップグレードします。

    az extension add --upgrade --name azure-iot
    
  3. az group create コマンドを実行してリソース グループを作成します。 次のコマンドでは、MyResourceGroup という名前のリソース グループが centralus リージョンに作成されます。

    注意

    必要に応じて、別の location を設定することもできます。 利用可能な場所を確認するには、az account list-locations を実行します。

    az group create --name MyResourceGroup --location centralus
    
  4. az iot hub create コマンドを実行して、IoT ハブを作成します。 IoT ハブの作成には数分かかることがあります。

    YourIotHubName: コード内のこのプレースホルダーは、IoT Hub の実際の名前に置き換えてください。 IoT ハブ名は Azure でグローバルに一意である必要があります。 このプレースホルダーは、このクイックスタートの残りの部分で、一意の IoT ハブ名を表すために使用されます。

    --sku F1 パラメーターにより、Free レベルの IoT ハブが作成されます。 Free レベルのハブは機能セットが限られており、概念実証アプリケーションに使用されます。 IoT Hub のレベル、機能、価格の詳細については、「Azure IoT Hub の価格」を参照してください。

    az iot hub create --resource-group MyResourceGroup --name {YourIoTHubName} --sku F1 --partition-count 2
    
  5. IoT ハブが作成されたら、コンソールに JSON 出力を表示し、後の手順で使用するために hostName 値をコピーします。 hostName 値は次の例のようになります。

    {Your IoT hub name}.azure-devices.net

IoT エクスプローラーの構成

このクイックスタートの残りの部分では、IoT エクスプローラーを使用して、IoT ハブへのデバイスの登録、デバイスのプロパティとテレメトリの表示、デバイスへのコマンドの送信を行います。 このセクションでは、作成した IoT ハブに接続して、パブリック モデル リポジトリからプラグ アンド プレイ モデルを読み取るように、IoT エクスプローラーを構成します。

IoT ハブへの接続を追加するには:

  1. Azure IoT エクスプローラーをインストールします。 このツールは、Azure IoT リソースを監視および管理するためのクロスプラットフォーム ユーティリティです。

  2. CLI アプリで az iot hub connection-string show コマンドを実行して、IoT ハブの接続文字列を取得します。

    az iot hub connection-string  show --hub-name {YourIoTHubName}
    
  3. 引用符で囲まずに接続文字列をコピーします。

  4. Azure IoT エクスプローラーで、左側のメニューの [IoT Hub] を選びます。

  5. [+ 接続の追加] を選択します。

  6. 接続文字列を [接続文字列] ボックスに貼り付けます。

  7. [保存] を選択します。

    IoT エクスプローラーでの接続の追加のスクリーンショット。

接続が成功すると、IoT エクスプローラーが [デバイス] ビューに切り替わります。

パブリック モデル リポジトリを追加するには:

  1. IoT エクスプローラーで、 [ホーム] を選択してホーム ビューに戻ります。

  2. 左側のメニューで、 [IoT プラグ アンド プレイの設定] を選択し、 [+ 追加] を選択して、ドロップダウン メニューから [パブリック リポジトリ] を選択します。

  3. https://devicemodels.azure.com に、パブリック モデル リポジトリのエントリが表示されます。

    IoT エクスプローラーでのパブリック モデル リポジトリの追加のスクリーンショット。

  4. [保存] を選択します。

デバイスの登録

このセクションでは、新しいデバイス インスタンスを作成し、作成した IoT ハブに登録します。 新しく登録したデバイスの接続情報を使用して、後のセクションで物理デバイスを安全に接続します。

デバイスを登録するには:

  1. IoT エクスプローラーのホーム ビューで、 [IoT Hub] を選択します。

  2. 前に追加した接続が表示されます。 接続プロパティの下にある [View devices in this hub](このハブのデバイスを表示) を選択します。

  3. [+ 新規] を選択し、デバイスのデバイス ID (例: mydevice) を入力します。 他のプロパティはすべてそのままにしておきます。

  4. [作成] を選択します。

    Azure IoT エクスプローラーのデバイス ID のスクリーンショット。

  5. コピー ボタンを使って、[デバイス ID][主キー] フィールドをコピーしておきます。

次のセクションに進む前に、前の手順で取得した次の各値を安全な場所に保存します。 次のセクションでは、これらの値を使ってデバイスを構成します。

  • hostName
  • deviceId
  • primaryKey

デバイスの準備

ESP32 DevKit を Azure に接続するには、構成設定を変更し、イメージをリビルドして、イメージをデバイスにフラッシュします。

環境をセットアップする

ESP-IDF 環境を起動するには、次のようにします。

  1. Windows で [スタート] を選択し、ESP-IDF 5.0 CMD を見つけて実行します。

  2. ESP-IDF 5.0 CMD で、前に複製した iot-middleware-freertos-samples ディレクトリに移動します。

  3. ESP32-Azure IoT キットのプロジェクト ディレクトリ (demos\projects\ESPRESSIF\aziotkit) に移動します。

  4. 次のコマンドを実行して、構成メニューを起動します。

    idf.py menuconfig
    

構成を追加する

ワイヤレス ネットワーク構成を追加するには、次のようにします。

  1. ESP-IDF 5.0 CMD で、[FreeRTOS サンプル用の Azure IoT ミドルウェアの構成 ---]> を選択し、Enter キーを押します。

  2. ローカル ワイヤレス ネットワークの資格情報を使用して、次の構成設定を行います。

    設定
    WiFi SSID {自分の Wi-Fi SSID}
    WiFi パスワード {自分の Wi-Fi パスワード}
  3. Esc キーを選択して、前のメニューに戻ります。

Azure IoT Hub に接続するための構成を追加するには、次のようにします。

  1. [FreeRTOS のメイン タスク用の Azure IoT ミドルウェアの構成 ---]> を選択し、Enter キーを押します。

  2. 次の Azure IoT 構成設定を、Azure リソースを作成した後に保存した値に設定します。

    設定
    Azure IoT Hub FQDN {自分のホスト名}
    Azure IoT デバイス ID {自分のデバイス ID}
    Azure IoT デバイスの対称キー {自分のプライマリ キー}

    Note

    [Azure IoT 認証方法] の設定で、[対称キー] の既定値が選択されていることを確認します。

  3. Esc キーを選択して、前のメニューに戻ります。

構成を保存するには、次のようにします。

  1. Shift+S キーを選択して [保存] オプションを開きます。 このメニューにより、現在の .\aziotkit ディレクトリの skconfig という名前のファイルに構成を保存できます。
  2. Enter キーを選択して構成を保存します。
  3. Enter キーを選択して確認メッセージを閉じます。
  4. Q キーを選択して構成メニューを終了します。

イメージのビルドとフラッシュ

このセクションでは、ESP32 DevKit を Azure IoT に接続するときに、ESP-IDF ツールを使用して ESP32 DevKit をビルド、フラッシュ、および監視します。

注意

このセクションの次のコマンドでは、ルート ディレクトリの近くに短いビルド出力パスを使用します。 必要な各コマンドで、-B パラメーターの後にビルド パスを指定します。 この短いパスを使用すると、長いビルド パス名を使用するとエラーが発生する可能性がある ESPRESSIF ESP-IDF ツールの現在の問題を回避できます。 次のコマンドでは、例としてローカル パス C:\espbuild を使用します。

イメージをビルドするには、次のようにします。

  1. ESP-IDF 5.0 CMDiot-middleware-freertos-samples\demos\projects\ESPRESSIF\aziotkit ディレクトリから、次のコマンドを実行してイメージをビルドします。

    idf.py --no-ccache -B "C:\espbuild" build 
    
  2. ビルドが完了したら、前に指定したビルド パスにバイナリ イメージ ファイルが作成されたことを確認します。

    C:\espbuild\azure_iot_freertos_esp32.bin

イメージをフラッシュするには、次のようにします。

  1. ESP32 DevKit で、次のイメージで強調表示されているマイクロ USB ポートを探します。

    ESP32-Azure IoT Kit ボードの写真。

  2. マイクロ USB ケーブルを ESP32 DevKit のマイクロ USB ポートに接続し、それをコンピューターに接続します。

  3. Windows で [デバイス マネージャー] を開き、[ポート] を表示して、ESP32 DevKit が接続されている COM ポートを確認します。

    接続デバイスの COM ポートが表示されている Windows デバイス マネージャーのスクリーンショット。

  4. ESP-IDF 5.0 CMD で、次のコマンドを実行し、<現在の COM ポート> のプレースホルダーとブラケットを前の手順で確認した正しい COM ポートに置き換えます。 たとえば、プレースホルダーを COM3 に置き換えます。

    idf.py --no-ccache -B "C:\espbuild" -p <Your-COM-port> flash
    
  5. 出力が次のテキストのようになり、フラッシュが成功したことを確認します。

    Hash of data verified
    
    Leaving...
    Hard resetting via RTS pin...
    Done
    

デバイスが Azure IoT Central に接続されていることを確認するには、次のようにします。

  1. ESP-IDF 5.0 CMD で、次のコマンドを実行して監視ツールを起動します。 前のコマンドで行った操作と同様に、<現在の COM ポート> のプレースホルダーとブラケットをデバイスの接続先の COM ポートに置き換えます。

    idf.py -B "C:\espbuild" -p <Your-COM-port> monitor
    
  2. 次の例のような出力ブロックの繰り返しを確認します。 この出力により、デバイスが Azure IoT に接続され、テレメトリが送信されることを確認できます。

    I (50807) AZ IOT: Successfully sent telemetry message
    I (50807) AZ IOT: Attempt to receive publish message from IoT Hub.
    
    I (51057) MQTT: Packet received. ReceivedBytes=2.
    I (51057) MQTT: Ack packet deserialized with result: MQTTSuccess.
    I (51057) MQTT: State record updated. New state=MQTTPublishDone.
    I (51067) AZ IOT: Puback received for packet id: 0x00000008
    I (53067) AZ IOT: Keeping Connection Idle...
    

デバイスのプロパティを表示する

Azure IoT エクスプローラーを使用して、デバイスのプロパティを表示および管理できます。 以降のセクションでは、IoT エクスプローラーに表示されるプラグ アンド プレイ機能を使って、ESP32 DevKit の管理と操作を行います。 これらの機能は、パブリック モデル リポジトリで ESP32 DevKit 用に公開されているデバイス モデルに依存します。 このチュートリアルの前の方で、このリポジトリでデバイス モデルを検索するように IoT Explorer を構成しました。 多くの場合、IoT エクスプローラーのメニュー オプションを選ぶことで、プラグ アンド プレイを使わずに同じアクションを実行できます。 ただし、プラグ アンド プレイを使用すると、エクスペリエンスが強化されることが多々あります。 IoT エクスプローラーでは、プラグ アンド プレイ デバイスで指定されたデバイス モデルを読み取り、そのデバイスに固有の情報を提示できます。

IoT エクスプローラーでデバイスの IoT プラグ アンド プレイ コンポーネントにアクセスするには:

  1. IoT エクスプローラーのホーム ビューで [IoT Hub] を選択し、 [View devices in this hub](このハブのデバイスを表示) を選択します。

  2. デバイスを選択します。

  3. [IoT プラグ アンド プレイ コンポーネント] を選択します。

  4. [既定のコンポーネント] を選択します。 IoT エクスプローラーに、デバイスに実装されている IoT プラグ アンド プレイ コンポーネントが表示されます。

    IoT エクスプローラーでのデバイスの既定コンポーネントのスクリーンショット。

  5. [インターフェイス] タブで、デバイス モデルの [説明] の JSON コンテンツを確認します。 JSON には、デバイス モデルの各 IoT プラグ アンド プレイ コンポーネントの構成の詳細が含まれています。

    IoT エクスプローラーの各タブは、デバイス モデルの IoT プラグ アンド プレイ コンポーネントの 1 つに対応しています。

    タブ Type 名前 説明
    Interface インターフェイス Espressif ESP32 Azure IoT Kit ESP32 DevKit のデバイス モデル例
    プロパティ (書き込み可能) プロパティ telemetryFrequencySecs デバイスがテレメトリを送信する間隔
    コマンド コマンド ToggleLed1 LED のオン/オフを切り替えます
    コマンド コマンド ToggleLed2 LED のオン/オフを切り替えます
    コマンド コマンド DisplayText 送信されたテキストをデバイス画面に表示します

Azure IoT エクスプローラーを使用してデバイスのプロパティを表示および編集するには:

  1. [プロパティ (書き込み可能)] タブを選択します。テレメトリが送信される間隔が表示されます。

  2. telemetryFrequencySecs の値を 5 に変更し、[必要な値の更新] を選択します。 これにより、デバイスでは、この間隔を使用してテレメトリが送信されるようになります。

    IoT エクスプローラーでのデバイスのテレメトリ間隔の設定を示すスクリーンショット。

  3. IoT エクスプローラーは通知で応答します。

Azure CLI を使用してデバイスのプロパティを表示するには:

  1. CLI コンソールで、az iot hub device-twin show コマンドを実行します。

    az iot hub device-twin show --device-id mydevice --hub-name {YourIoTHubName}
    
  2. コンソール出力でデバイスのプロパティを調べます。

ヒント

Azure IoT Explorer を使用してデバイスのプロパティを表示することもできます。 左側のナビゲーションで、[デバイス ツイン] を選択します。

利用統計情報データを表示する

Azure IoT エクスプローラーを使用すると、デバイスからクラウドへのテレメトリのフローを表示できます。 必要に応じて、Azure CLI を使用して同じタスクを実行することもできます。

Azure IoT エクスプローラーでテレメトリを表示するには:

  1. IoT エクスプローラーで、デバイスの [IoT プラグ アンド プレイ コンポーネント] (既定のコンポーネント) ペインから、 [テレメトリ] タブを選択します。 [Use built-in event hub](組み込みのイベント ハブを使用する)[はい] に設定されていることを確認します。

  2. [スタート] を選択します。

  3. デバイスからクラウドにメッセージが送信されるときのテレメトリを表示します。

    IoT エクスプローラーでのデバイス テレメトリのスクリーンショット。

  4. [Show modeled events](モデル化されたイベントを表示する) チェック ボックスをオンにして、デバイス モデルで指定されたデータ形式でイベントを表示します。

    IoT エクスプローラーでのモデル化されたテレメトリ イベントのスクリーンショット。

  5. [停止] を選択して、イベントの受信を終了します。

Azure CLI を使用してデバイス テレメトリを表示するには:

  1. az iot hub monitor-events コマンドを実行します。 Azure IoT で以前に作成した、デバイスと IoT ハブの名前を使用します。

    az iot hub monitor-events --device-id mydevice --hub-name {YourIoTHubName}
    
  2. コンソールに JSON 出力を表示します。

    {
        "event": {
            "origin": "mydevice",
            "module": "",
            "interface": "dtmi:azureiot:devkit:freertos:Esp32AzureIotKit;1",
            "component": "",
            "payload": "{\"temperature\":28.6,\"humidity\":25.1,\"light\":116.66,\"pressure\":-33.69,\"altitude\":8764.9,\"magnetometerX\":1627,\"magnetometerY\":28373,\"magnetometerZ\":4232,\"pitch\":6,\"roll\":0,\"accelerometerX\":-1,\"accelerometerY\":0,\"accelerometerZ\":9}"
        }
    }
    
  3. Ctrl + C キーを押して監視を終了します。

デバイス上のダイレクト メソッドを呼び出す

Azure IoT エクスプローラーを使用して、デバイスに実装したダイレクト メソッドを呼び出すこともできます。 ダイレクト メソッドには名前があり、必要に応じて、JSON ペイロード、構成可能な接続、メソッドのタイムアウトを設定できます。 このセクションでは、LED のオン/オフを切り替えるメソッドを呼び出します。 必要に応じて、Azure CLI を使用して同じタスクを実行することもできます。

Azure IoT エクスプローラーでメソッドを呼び出すには:

  1. IoT エクスプローラーで、デバイスの [IoT プラグ アンド プレイ コンポーネント] (既定のコンポーネント) ペインから [コマンド] タブを選択します。

  2. ToggleLed1 コマンドの場合は [コマンドの送信] を選択します。 ESP32 DevKit の LED はオンまたはオフに切り替わります。 IoT Explorer に通知も表示されます。

    IoT エクスプローラーでのメソッドの呼び出しのスクリーンショット。

  3. DisplayText コマンドの場合は、[コンテンツ] フィールドにテキストを入力します。

  4. [コマンドの送信] を選択します。 テキストは ESP32 DevKit 画面に表示されます。

Azure CLI を使用してメソッドを呼び出すには:

  1. az iot hub invoke-device-method コマンドを実行し、メソッド名とペイロードを指定します。 この方法では、method-payloadtrue に設定すると、LED が現在の状態と反対の状態に切り替わります。

    az iot hub invoke-device-method --device-id mydevice --method-name ToggleLed2 --method-payload true --hub-name {YourIoTHubName}
    

    CLI コンソールに、デバイスでのメソッド呼び出しの状態が表示されます。200 は成功を示しています。

    {
      "payload": {},
      "status": 200
    } 
    
  2. デバイスを調べて LED の状態を確認します。

トラブルシューティングとデバッグ

デバイス コードのビルド、デバイスのフラッシュ、または接続で問題が発生した場合は、トラブルシューティングに関する記事を参照してください。

アプリケーションのデバッグについては、「Visual Studio Code を使用したデバッグ」を参照してください。

リソースをクリーンアップする

このクイックスタートで作成した Azure リソースが不要になった場合は、Azure CLI を使用して、リソース グループとそのすべてのリソースを削除できます。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそこに含まれるすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。

名前でリソース グループを削除するには、以下の手順を実行します。

  1. az group delete コマンドを実行します。 このコマンドにより、作成したリソース グループ、IoT Hub、デバイスの登録が削除されます。

    az group delete --name MyResourceGroup
    
  2. az group list コマンドを実行して、リソース グループが削除されていることを確認します。

    az group list
    

次のステップ

このチュートリアルでは、FreeRTOS 向け Azure IoT ミドルウェアのサンプル コードを含むカスタム イメージをビルドし、そのイメージを ESP32 DevKit デバイスにフラッシュしました。 ESP32 DevKit を Azure IoT Hub に接続し、テレメトリの表示やデバイスでのメソッドの呼び出しなどのタスクを実行しました。

次の手順として、次の記事を読んで、埋め込み開発オプションの詳細を確認してください。