チュートリアル:Linux または Windows 上で実行されている IoT プラグ アンド プレイの複数コンポーネントのデバイス アプリケーションを IoT Hub に接続する

このチュートリアルでは、複数のコンポーネントを使用する IoT プラグ アンド プレイのサンプル デバイス アプリケーションをビルドし、それを IoT ハブに接続して、ハブに送信される情報を Azure IoT エクスプローラー ツールを使用して表示する方法について説明します。 このサンプル アプリケーションは C で記述され、C 対応の Azure IoT device SDK に含められています。ソリューション ビルダーは、Azure IoT エクスプローラー ツールを使用すれば、デバイス コードを表示しなくても IoT プラグ アンド プレイ デバイスの機能を理解することができます。

コードを参照

このチュートリアルでは、次の作業を行いました。

  • サンプル コードをダウンロードします。
  • サンプル コードをビルドします。
  • サンプル デバイス アプリケーションを実行して、IoT ハブに接続することを確認します。
  • ソース コードを確認します。

前提条件

続行する前に、IoT ハブを含め、環境が設定されていることを確認してください。

このチュートリアルは Linux または Windows で実行できます。 このチュートリアルのシェル コマンドは、パス区切り記号を "/" とする Linux 規則に従っています。Windows 方式に従う場合は、必ずこれらの区切り記号を "\" に置き換えてください。

前提条件は、次のように、オペレーティング システムによって異なります。

Linux

このチュートリアルは、Ubuntu Linux を使用することを前提としています。 このチュートリアルの手順は、Ubuntu 18.04 を使用してテストされました。

このチュートリアルを Linux で完了するには、ご利用のローカルの Linux 環境に以下のソフトウェアをインストールする必要があります。

apt-get コマンドを使用して、GCCGitcmake、および必要なすべての依存関係をインストールします。

sudo apt-get update
sudo apt-get install -y git cmake build-essential curl libcurl4-openssl-dev libssl-dev uuid-dev

cmake のバージョンが 2.8.12 より大きく、GCC のバージョンが 4.4.7 より大きいことを確認します。

cmake --version
gcc --version

Windows

Windows でこのチュートリアルを完了するには、ご利用のローカル Windows 環境に次のソフトウェアをインストールします。

コードのダウンロード

チュートリアル: Linux または Windows 上で実行されている IoT プラグ アンド プレイのサンプル デバイス アプリケーションを IoT Hub に接続する (C)」を完了している場合は、コードを既にダウンロードしています。

このチュートリアルでは、Azure IoT Hub Device C SDK をクローンしてビルドするために使用できる開発環境を準備します。

任意のフォルダーでコマンド プロンプトを開きます。 次のコマンドを実行して、Azure IoT C SDK およびライブラリの GitHub リポジトリをこの場所にクローンします。

git clone https://github.com/Azure/azure-iot-sdk-c.git
cd azure-iot-sdk-c
git submodule update --init

この操作が完了するまで数分かかることが予想されます。

コードのビルドと実行

コードをビルドして実行するには、Visual Studio を使用するか、コマンドラインで cmake を使用します。

Visual Studio を使用する

  1. クローンされたリポジトリのルート フォルダーを開きます。 数秒後、プロジェクトを実行してデバッグするのに必要なものがすべて Visual Studio の CMake サポートによって作成されます。

  2. Visual Studio の準備ができたら、ソリューション エクスプローラーで、サンプル iothub_client/samples/pnp/pnp_temperature_controller/ に移動します。

  3. pnp_temperature_controller.c ファイルを右クリックし、 [Add Debug Configuration](デバッグ構成の追加) を選択します。 [既定値] を選択します。

  4. Visual Studio によって、launch.vs.json ファイルが開かれます。 このファイルを、次のスニペットに示すように編集して、必要な環境変数を設定します。 「IoT プラグ アンド プレイのクイックスタートとチュートリアル用の環境の設定」を完了したときに、スコープ ID と登録プライマリ キーを書き留めました。

    {
      "version": "0.2.1",
      "defaults": {},
      "configurations": [
        {
          "type": "default",
          "project": "iothub_client\\samples\\pnp\\pnp_temperature_controller\\pnp_temperature_controller.c",
          "projectTarget": "",
          "name": "pnp_temperature_controller.c",
          "env": {
            "IOTHUB_DEVICE_SECURITY_TYPE": "DPS",
            "IOTHUB_DEVICE_DPS_ID_SCOPE": "<Your ID scope>",
            "IOTHUB_DEVICE_DPS_DEVICE_ID": "my-pnp-device",
            "IOTHUB_DEVICE_DPS_DEVICE_KEY": "<Your enrollment primary key>"
          }
        }
      ]
    }
    
  5. pnp_temperature_controller.c ファイルを右クリックし、 [スタートアップ アイテムとして設定] を選択します。

  6. Visual Studio でコードの実行をトレースするには、main ファイルの main 関数にブレークポイントを追加します。

  7. これで、 [デバッグ] メニューからサンプルを実行およびデバッグできるようになりました。

これで、デバイスはコマンドとプロパティの更新情報を受信する準備ができ、ハブへのテレメトリ データの送信が開始されました。 次の手順を完了するまで、サンプルを実行したままにしておきます。

コマンド ラインで cmake を使用する

サンプルをビルドするには、次の手順に従います。

  1. クローンされたデバイス SDK のルート フォルダーに cmake サブフォルダーを作成し、そのフォルダーに移動します。

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  2. 次のコマンドを実行して、SDK とサンプル用のプロジェクト ファイルを生成およびビルドします。

    cmake ..
    cmake --build .
    

環境の設定で、Device Provisioning Service (DPS) を使用して IoT ハブに接続するようにサンプルを構成するための 4 つの環境変数を作成しました。

  • 値が DPSIOTHUB_DEVICE_SECURITY_TYPE
  • DPS の ID スコープを格納する IOTHUB_DEVICE_DPS_ID_SCOPE
  • my-pnp-device を格納する IOTHUB_DEVICE_DPS_DEVICE_ID
  • 登録プライマリ キーを格納する IOTHUB_DEVICE_DPS_DEVICE_KEY
  • global.azure-devices-provisioning.net を格納する IOTHUB_DEVICE_DPS_ENDPOINT

サンプル構成の詳細については、サンプルの readme を参照してください。

サンプルを実行するには

  1. cmake フォルダーから、実行可能ファイルを含むフォルダーに移動し、そのファイルを実行します。

    # Bash
    cd iothub_client/samples/pnp/pnp_temperature_controller
    ./pnp_temperature_controller
    
    REM Windows
    cd iothub_client\samples\pnp\pnp_temperature_controller\Debug
    pnp_temperature_controller.exe
    

これで、デバイスはコマンドとプロパティの更新情報を受信する準備ができ、ハブへのテレメトリ データの送信が開始されました。 次の手順を完了するまで、サンプルを実行したままにしておきます。

Azure IoT Explorer を使用してコードを検証する

デバイス クライアントのサンプルが開始された後、Azure IoT エクスプローラー ツールを使用して、それが動作していることを確認します。

  1. Azure IoT エクスプローラーを開きます。

  2. IoT ハブへの接続をまだ追加していない場合は、 [IoT ハブ] ページで、 [+ 接続の追加] を選択します。 先ほど作成した IoT ハブの接続文字列を入力して、 [保存] を選択します。

  3. [IoT プラグ アンド プレイの設定] ページで、[+ 追加] > [ローカル フォルダー] の順に選択し、モデル ファイルを保存したローカルの [モデル] フォルダーを選択します。

  4. [IoT ハブ] ページで、操作するハブの名前をクリックします。 IoT ハブに登録されたデバイスの一覧が表示されます。

  5. 先ほど作成したデバイスのデバイス ID をクリックします。

  6. 左側のメニューに、デバイスで利用できるさまざまな種類の情報が表示されます。

  7. [IoT プラグ アンド プレイ コンポーネント] を選択して、デバイスのモデル情報を表示します。

  8. デバイスのさまざまなコンポーネントを表示できます。 既定のコンポーネントと追加のコンポーネント。 操作するコンポーネントを選択します。

  9. [テレメトリ] ページを選択し、 [開始] を選択して、デバイスから送信されているこのコンポーネントのテレメトリ データを表示します。

  10. [プロパティ (読み取り専用)] ページを選択して、このコンポーネントについて報告された読み取り専用プロパティを表示します。

  11. [プロパティ (書き込み可能)] ページを選択して、このコンポーネントに対して更新を行うことができる書き込み可能なプロパティを表示します。

  12. 名前でプロパティを選択し、新しい値を入力して、 [Update desired value](必要な値の更新) を選択します。

  13. 新しい値が表示されるようにするには、[更新] ボタンを選択します。

  14. [コマンド] ページを選択して、このコンポーネントを対象とするすべてのコマンドを表示します。

  15. テストするコマンドを選択します。パラメーターがある場合は、それを設定します。 [コマンドの送信] を選択して、デバイス上でコマンドを呼び出します。 サンプル コードが実行されているコマンド プロンプト ウィンドウで、デバイスがコマンドに応答していることを確認できます。

コードの確認

このサンプルにより、IoT プラグ アンド プレイの温度コントローラー デバイスが実装されます。 このサンプルでは、複数のコンポーネントを使用してモデルが実装されます。 温度デバイスの Digital Twins Definition Language (DTDL) モデル ファイルにより、デバイスによって実装されるテレメトリ、プロパティ、コマンドが定義されます。

IoT プラグ アンド プレイ ヘルパー関数

このサンプルの場合、コードで使用されるいくつかのヘルパー関数は /common フォルダーからのものです。

pnp_device_client_ll には、パラメーターとして model-id が指定される IoT プラグ アンド プレイ用の connect メソッドが含まれています: PnP_CreateDeviceClientLLHandle

pnp_protocol: 以下の IoT プラグ アンド プレイ ヘルパー関数が含まれています。

  • PnP_CreateReportedProperty
  • PnP_CreateReportedPropertyWithStatus
  • PnP_ParseCommandName
  • PnP_CreateTelemetryMessageHandle
  • PnP_ProcessTwinData
  • PnP_CopyPayloadToString
  • PnP_CreateDeviceClientLLHandle_ViaDps

これらのヘルパー関数は、独自のプロジェクトで使用するのに十分な汎用性を備えています。 このサンプルでそれらは、モデル内の各コンポーネントに対応する次の 3 つのファイル内で使用されます。

  • pnp_deviceinfo_component
  • pnp_temperature_controller
  • pnp_thermostat_component

たとえば、pnp_deviceinfo_component ファイル内の SendReportedPropertyForDeviceInformation 関数では、次の 2 つのヘルパー関数が使用されています。

if ((jsonToSend = PnP_CreateReportedProperty(componentName, propertyName, propertyValue)) == NULL)
{
    LogError("Unable to build reported property response for propertyName=%s, propertyValue=%s", propertyName, propertyValue);
}
else
{
    const char* jsonToSendStr = STRING_c_str(jsonToSend);
    size_t jsonToSendStrLen = strlen(jsonToSendStr);

    if ((iothubClientResult = IoTHubDeviceClient_LL_SendReportedState(deviceClientLL, (const unsigned char*)jsonToSendStr, jsonToSendStrLen, NULL, NULL)) != IOTHUB_CLIENT_OK)
    {
        LogError("Unable to send reported state for property=%s, error=%d", propertyName, iothubClientResult);
    }
    else
    {
        LogInfo("Sending device information property to IoTHub.  propertyName=%s, propertyValue=%s", propertyName, propertyValue);
    }
}

このサンプルの各コンポーネントは、このパターンに従っています。

コード フロー

main 関数によって、接続が初期化され、モデル ID が送信されます。

deviceClient = CreateDeviceClientAndAllocateComponents();

このコードでは、PnP_CreateDeviceClientLLHandle を使用して IoT ハブに接続し、オプションとして modelId が設定され、ダイレクト メソッドおよびデバイス ツイン更新用にデバイス メソッドとデバイス ツイン コールバック ハンドラーが設定されます。

g_pnpDeviceConfiguration.deviceMethodCallback = PnP_TempControlComponent_DeviceMethodCallback;
g_pnpDeviceConfiguration.deviceTwinCallback = PnP_TempControlComponent_DeviceTwinCallback;
g_pnpDeviceConfiguration.modelId = g_temperatureControllerModelId;
...

deviceClient = PnP_CreateDeviceClientLLHandle(&g_pnpDeviceConfiguration);

&g_pnpDeviceConfiguration には接続情報も含まれます。 環境変数 IOTHUB_DEVICE_SECURITY_TYPE では、サンプルが IoT ハブに接続するのに接続文字列またはデバイス プロビジョニング サービスのどちらを使用するかが決定されます。

デバイスはモデル ID を送信すると、IoT プラグ アンド プレイ デバイスになります。

コールバック ハンドラーが配置されると、デバイスはツイン更新とダイレクト メソッド呼び出しに反応します。

  • デバイス ツイン コールバックの場合は、PnP_TempControlComponent_DeviceTwinCallback によって、データを処理する PnP_ProcessTwinData 関数が呼び出されます。 PnP_ProcessTwinData は "PnP_ProcessTwinData" を使用して JSON を解析してから、各プロパティにアクセスします。これにより、各要素に対して PnP_TempControlComponent_ApplicationPropertyCallback が呼び出されます。

  • コマンド コールバックでは、PnP_TempControlComponent_DeviceMethodCallback 関数がヘルパー関数を使用して、コマンドおよびコンポーネントの名前を解析します。

    PnP_ParseCommandName(methodName, &componentName, &componentNameSize, &pnpCommandName);
    

    次に、PnP_TempControlComponent_DeviceMethodCallback 関数は、コンポーネントに対してコマンドを呼び出します。

    LogInfo("Received PnP command for component=%.*s, command=%s", (int)componentNameSize, componentName, pnpCommandName);
    if (strncmp((const char*)componentName, g_thermostatComponent1Name, g_thermostatComponent1Size) == 0)
    {
        result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle1, pnpCommandName, rootValue, response, responseSize);
    }
    else if (strncmp((const char*)componentName, g_thermostatComponent2Name, g_thermostatComponent2Size) == 0)
    {
        result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle2, pnpCommandName, rootValue, response, responseSize);
    }
    else
    {
        LogError("PnP component=%.*s is not supported by TemperatureController", (int)componentNameSize, componentName);
        result = PNP_STATUS_NOT_FOUND;
    }
    

main 関数は、IoT ハブに送信される読み取り専用プロパティを初期化します。

PnP_TempControlComponent_ReportSerialNumber_Property(deviceClient);
PnP_DeviceInfoComponent_Report_All_Properties(g_deviceInfoComponentName, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle1, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle2, deviceClient);

main 関数は、各コンポーネントのイベントとテレメトリ データを更新するためのループに入ります。

while (true)
{
    PnP_TempControlComponent_SendWorkingSet(deviceClient);
    PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle1, deviceClient);
    PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle2, deviceClient);
}

PnP_ThermostatComponent_SendTelemetry 関数を見れば、PNP_THERMOSTAT_COMPONENT 構造体の使用方法がわかります。 このサンプルでは、この構造体を使用して、気温コントローラー内の 2 個のサーモスタットに関する情報が格納されます。 このコードでは、PnP_CreateTelemetryMessageHandle 関数を使用して、メッセージが準備および送信されます。

messageHandle = PnP_CreateTelemetryMessageHandle(pnpThermostatComponent->componentName, temperatureStringBuffer);
...
iothubResult = IoTHubDeviceClient_LL_SendEventAsync(deviceClientLL, messageHandle, NULL, NULL);

main 関数によって最終的にさまざまなコンポーネントが破棄され、ハブへの接続が閉じられます。

このチュートリアルでは、複数のコンポーネントを使用する IoT プラグ アンド プレイのサンプル デバイス アプリケーションをビルドし、それを IoT ハブに接続して、ハブに送信される情報を Azure IoT エクスプローラー ツールを使用して表示する方法について説明します。 このサンプル アプリケーションは C# で記述されており、C# 用 Azure IoT device SDK に含まれています。 ソリューション ビルダーは Azure IoT エクスプローラー ツールを使用して、デバイス コードを表示しなくても IoT プラグ アンド プレイ デバイスの機能を理解することができます。

コードを参照

このチュートリアルでは、次の作業を行いました。

  • サンプル コードをダウンロードします。
  • サンプル コードをビルドします。
  • サンプル デバイス アプリケーションを実行して、IoT ハブに接続することを確認します。
  • ソース コードを確認します。

前提条件

続行する前に、IoT ハブを含め、環境が設定されていることを確認してください。

このチュートリアルは Linux または Windows で実行できます。 このチュートリアルのシェル コマンドは、パス区切り記号を "/" とする Linux 規則に従っています。Windows 方式に従う場合は、必ずこれらの区切り記号を "\" に置き換えてください。

  • お使いのプラットフォーム用の最新 .NET SDK
  • Git.

サンプル コードを使用して SDK リポジトリをクローンする

[チュートリアル: Windows 上で実行されている IoT プラグ アンド プレイのサンプル デバイス アプリケーションを IoT Hub に接続する (C#)] を完了している場合、リポジトリは既にクローンされています。

Azure IoT Samples for C# GitHub リポジトリからサンプルをクローンします。 任意のフォルダーでコマンド プロンプトを開きます。 次のコマンドを実行して、Microsoft Azure IoT SDK for .NET GitHub リポジトリをクローンします。

git clone https://github.com/Azure/azure-iot-sdk-csharp.git

コードのビルド

これで、サンプルをビルドして実行できます。 次のコマンドを実行して、サンプルをビルドします。

cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/TemperatureController
dotnet build

デバイス サンプルを実行する

サンプルを実行するには、次のコマンドを実行します。

dotnet run

これで、デバイスはコマンドとプロパティの更新情報を受信する準備ができ、ハブへのテレメトリ データの送信が開始されました。 次の手順を完了するまで、サンプルを実行したままにしておきます。

Azure IoT エクスプローラーを使用してコードを確認する

デバイス クライアントのサンプルが開始された後、Azure IoT エクスプローラー ツールを使用して、それが動作していることを確認します。

  1. Azure IoT エクスプローラーを開きます。

  2. IoT ハブへの接続をまだ追加していない場合は、 [IoT ハブ] ページで、 [+ 接続の追加] を選択します。 先ほど作成した IoT ハブの接続文字列を入力して、 [保存] を選択します。

  3. [IoT プラグ アンド プレイの設定] ページで、[+ 追加] > [ローカル フォルダー] の順に選択し、モデル ファイルを保存したローカルの [モデル] フォルダーを選択します。

  4. [IoT ハブ] ページで、操作するハブの名前をクリックします。 IoT ハブに登録されたデバイスの一覧が表示されます。

  5. 先ほど作成したデバイスのデバイス ID をクリックします。

  6. 左側のメニューに、デバイスで利用できるさまざまな種類の情報が表示されます。

  7. [IoT プラグ アンド プレイ コンポーネント] を選択して、デバイスのモデル情報を表示します。

  8. デバイスのさまざまなコンポーネントを表示できます。 既定のコンポーネントと追加のコンポーネント。 操作するコンポーネントを選択します。

  9. [テレメトリ] ページを選択し、 [開始] を選択して、デバイスから送信されているこのコンポーネントのテレメトリ データを表示します。

  10. [プロパティ (読み取り専用)] ページを選択して、このコンポーネントについて報告された読み取り専用プロパティを表示します。

  11. [プロパティ (書き込み可能)] ページを選択して、このコンポーネントに対して更新を行うことができる書き込み可能なプロパティを表示します。

  12. 名前でプロパティを選択し、新しい値を入力して、 [Update desired value](必要な値の更新) を選択します。

  13. 新しい値が表示されるようにするには、[更新] ボタンを選択します。

  14. [コマンド] ページを選択して、このコンポーネントを対象とするすべてのコマンドを表示します。

  15. テストするコマンドを選択します。パラメーターがある場合は、それを設定します。 [コマンドの送信] を選択して、デバイス上でコマンドを呼び出します。 サンプル コードが実行されているコマンド プロンプト ウィンドウで、デバイスがコマンドに応答していることを確認できます。

コードの確認

このサンプルにより、IoT プラグ アンド プレイの温度コントローラー デバイスが実装されます。 このサンプルによって実装されるモデルにより、複数のコンポーネントが使用されます。 温度デバイスの Digital Twins Definition Language (DTDL) モデル ファイルにより、デバイスによって実装されるテレメトリ、プロパティ、コマンドが定義されます。

デバイス コードにより、標準の CreateFromConnectionString メソッドが使用され、IoT ハブに接続されます。 デバイスにより、接続要求で実装される DTDL モデルのモデル ID が送信されます。 モデル ID を送信するデバイスは、IoT プラグ アンド プレイ デバイスです。

private static DeviceClient InitializeDeviceClient(string hostname, IAuthenticationMethod authenticationMethod)
{
    var options = new ClientOptions
    {
        ModelId = ModelId,
    };

    var deviceClient = DeviceClient.Create(hostname, authenticationMethod, TransportType.Mqtt, options);
    deviceClient.SetConnectionStatusChangesHandler((status, reason) =>
    {
        s_logger.LogDebug($"Connection status change registered - status={status}, reason={reason}.");
    });

    return deviceClient;
}

モデル ID は、次のスニペットに示すように、コードに格納されます。

private const string ModelId = "dtmi:com:example:TemperatureController;1";

デバイスが IoT ハブに接続された後、コードによってコマンド ハンドラーが登録されます。 reboot コマンドは、既定のコンポーネントで定義されています。 getMaxMinReport コマンドは、次の 2 つのサーモスタット コンポーネントのそれぞれに定義されています。

await _deviceClient.SetMethodHandlerAsync("reboot", HandleRebootCommandAsync, _deviceClient, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat1*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat1, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat2*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat2, cancellationToken);

2 つのサーモスタット コンポーネントには、必要なプロパティの更新用の個別のハンドラーがあります。

_desiredPropertyUpdateCallbacks.Add(Thermostat1, TargetTemperatureUpdateCallbackAsync);
_desiredPropertyUpdateCallbacks.Add(Thermostat2, TargetTemperatureUpdateCallbackAsync);

このサンプル コードによって、各サーモスタット コンポーネントからテレメトリが送信されます。

await SendTemperatureAsync(Thermostat1, cancellationToken);
await SendTemperatureAsync(Thermostat2, cancellationToken);

SendTemperatureTelemetryAsync メソッドによって、各コンポーネントのメッセージを作成するために PnpHhelper クラスが使用されます。

using Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(currentTemperature), componentName);

PnpHelper クラスには、複数コンポーネントのモデルで使用できるその他のサンプル メソッドが含まれています。

2 つのサーモスタット コンポーネントからのテレメトリとプロパティを表示するには、Azure IoT エクスプローラー ツールを使用します。

Azure IoT エクスプローラーの複数コンポーネントのデバイス

また、Azure IoT エクスプローラー ツールを使用して、2 つのサーモスタット コンポーネントのいずれか、または既定のコンポーネントでコマンドを呼び出すこともできます。

このチュートリアルでは、複数のコンポーネントを使用する IoT プラグ アンド プレイのサンプル デバイス アプリケーションをビルドし、それを IoT ハブに接続して、ハブに送信される情報を Azure IoT エクスプローラー ツールを使用して表示する方法について説明します。 このサンプル アプリケーションは Java で記述されており、Java 用 Azure IoT device SDK に含まれています。 ソリューション ビルダーは Azure IoT エクスプローラー ツールを使用して、デバイス コードを表示しなくても IoT プラグ アンド プレイ デバイスの機能を理解することができます。

コードを参照

このチュートリアルでは、次の作業を行いました。

  • サンプル コードをダウンロードします。
  • サンプル コードをビルドします。
  • サンプル デバイス アプリケーションを実行して、IoT ハブに接続することを確認します。
  • ソース コードを確認します。

前提条件

続行する前に、IoT ハブを含め、環境が設定されていることを確認してください。

このチュートリアルは Linux または Windows で実行できます。 このチュートリアルのシェル コマンドは、パス区切り記号を "/" とする Linux 規則に従っています。Windows 方式に従う場合は、必ずこれらの区切り記号を "\" に置き換えてください。

このチュートリアルを完了するには、ローカル開発環境に次のソフトウェアをインストールします。

コードのダウンロード

チュートリアル: IoT Plug and Play のサンプル デバイス アプリケーションを IoT Hub に接続する (Java)」を完了している場合、リポジトリは既にクローンされています。

任意のディレクトリでコマンド プロンプトを開きます。 次のコマンドを実行して、Azure IoT Java SDK およびライブラリの GitHub リポジトリをこの場所にクローンします。

git clone https://github.com/Azure/azure-iot-sdk-java.git

この操作が完了するまで数分かかることが予想されます。

コードのビルド

複製された Java SDK リポジトリ内の温度コントローラー サンプルのルート フォルダーに移動し、ビルドします。

cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample
mvn clean package

デバイス サンプルを実行する

環境の設定で、Device Provisioning Service (DPS) を使用して IoT ハブに接続するようにサンプルを構成するための 4 つの環境変数を作成しました。

  • 値が DPSIOTHUB_DEVICE_SECURITY_TYPE
  • DPS の ID スコープを格納する IOTHUB_DEVICE_DPS_ID_SCOPE
  • my-pnp-device を格納する IOTHUB_DEVICE_DPS_DEVICE_ID
  • 登録プライマリ キーを格納する IOTHUB_DEVICE_DPS_DEVICE_KEY
  • global.azure-devices-provisioning.net を格納する IOTHUB_DEVICE_DPS_ENDPOINT

サンプル アプリケーションを実行するには、/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample フォルダーに移動し、次のコマンドを実行します。

mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.device.TemperatureController"

これで、デバイスはコマンドとプロパティの更新情報を受信する準備ができ、ハブへのテレメトリ データの送信が開始されました。 次の手順を完了するまで、サンプルを実行したままにしておきます。

Azure IoT エクスプローラーを使用してコードを確認する

デバイス クライアントのサンプルが開始された後、Azure IoT エクスプローラー ツールを使用して、それが動作していることを確認します。

  1. Azure IoT エクスプローラーを開きます。

  2. IoT ハブへの接続をまだ追加していない場合は、 [IoT ハブ] ページで、 [+ 接続の追加] を選択します。 先ほど作成した IoT ハブの接続文字列を入力して、 [保存] を選択します。

  3. [IoT プラグ アンド プレイの設定] ページで、[+ 追加] > [ローカル フォルダー] の順に選択し、モデル ファイルを保存したローカルの [モデル] フォルダーを選択します。

  4. [IoT ハブ] ページで、操作するハブの名前をクリックします。 IoT ハブに登録されたデバイスの一覧が表示されます。

  5. 先ほど作成したデバイスのデバイス ID をクリックします。

  6. 左側のメニューに、デバイスで利用できるさまざまな種類の情報が表示されます。

  7. [IoT プラグ アンド プレイ コンポーネント] を選択して、デバイスのモデル情報を表示します。

  8. デバイスのさまざまなコンポーネントを表示できます。 既定のコンポーネントと追加のコンポーネント。 操作するコンポーネントを選択します。

  9. [テレメトリ] ページを選択し、 [開始] を選択して、デバイスから送信されているこのコンポーネントのテレメトリ データを表示します。

  10. [プロパティ (読み取り専用)] ページを選択して、このコンポーネントについて報告された読み取り専用プロパティを表示します。

  11. [プロパティ (書き込み可能)] ページを選択して、このコンポーネントに対して更新を行うことができる書き込み可能なプロパティを表示します。

  12. 名前でプロパティを選択し、新しい値を入力して、 [Update desired value](必要な値の更新) を選択します。

  13. 新しい値が表示されるようにするには、[更新] ボタンを選択します。

  14. [コマンド] ページを選択して、このコンポーネントを対象とするすべてのコマンドを表示します。

  15. テストするコマンドを選択します。パラメーターがある場合は、それを設定します。 [コマンドの送信] を選択して、デバイス上でコマンドを呼び出します。 サンプル コードが実行されているコマンド プロンプト ウィンドウで、デバイスがコマンドに応答していることを確認できます。

コードの確認

このサンプルにより、IoT プラグ アンド プレイの温度コントローラー デバイスが実装されます。 このサンプルによって実装されるモデルにより、複数のコンポーネントが使用されます。 温度デバイスの Digital Twins Definition Language (DTDL) モデル ファイルにより、デバイスによって実装されるテレメトリ、プロパティ、コマンドが定義されます。

デバイス コードによって、IoT ハブに接続するために標準の DeviceClient クラスが使用されます。 デバイスにより、接続要求で実装される DTDL モデルのモデル ID が送信されます。 モデル ID を送信するデバイスは、IoT プラグ アンド プレイ デバイスです。

private static void initializeDeviceClient() throws URISyntaxException, IOException {
    ClientOptions options = new ClientOptions();
    options.setModelId(MODEL_ID);
    deviceClient = new DeviceClient(deviceConnectionString, protocol, options);

    deviceClient.registerConnectionStatusChangeCallback((status, statusChangeReason, throwable, callbackContext) -> {
        log.debug("Connection status change registered: status={}, reason={}", status, statusChangeReason);

        if (throwable != null) {
            log.debug("The connection status change was caused by the following Throwable: {}", throwable.getMessage());
            throwable.printStackTrace();
        }
    }, deviceClient);

    deviceClient.open();
}

モデル ID は、次のスニペットに示すように、コードに格納されます。

private static final String MODEL_ID = "dtmi:com:example:Thermostat;1";

デバイスが IoT ハブに接続された後、コードによってコマンド ハンドラーが登録されます。

deviceClient.subscribeToDeviceMethod(new MethodCallback(), null, new MethodIotHubEventCallback(), null);

2 つのサーモスタット コンポーネントには、必要なプロパティの更新用の個別のハンドラーがあります。

deviceClient.startDeviceTwin(new TwinIotHubEventCallback(), null, new GenericPropertyUpdateCallback(), null);
Map<Property, Pair<TwinPropertyCallBack, Object>> desiredPropertyUpdateCallback = Stream.of(
        new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
                new Property(THERMOSTAT_1, null),
                new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_1)),
        new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
                new Property(THERMOSTAT_2, null),
                new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_2))
).collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));

deviceClient.subscribeToTwinDesiredProperties(desiredPropertyUpdateCallback);

このサンプル コードによって、各サーモスタット コンポーネントからテレメトリが送信されます。

sendTemperatureReading(THERMOSTAT_1);
sendTemperatureReading(THERMOSTAT_2);

sendTemperatureReading メソッドによって、各コンポーネントのメッセージを作成するために PnpHhelper クラスが使用されます。

Message message = PnpHelper.createIotHubMessageUtf8(telemetryName, currentTemperature, componentName);

PnpHelper クラスには、複数コンポーネントのモデルで使用できるその他のサンプル メソッドが含まれています。

2 つのサーモスタット コンポーネントからのテレメトリとプロパティを表示するには、Azure IoT エクスプローラー ツールを使用します。

Azure IoT エクスプローラーの複数コンポーネントのデバイス

また、Azure IoT エクスプローラー ツールを使用して、2 つのサーモスタット コンポーネントのいずれか、または既定のコンポーネントでコマンドを呼び出すこともできます。

このチュートリアルでは、複数のコンポーネントを使用する IoT プラグ アンド プレイのサンプル デバイス アプリケーションをビルドし、それを IoT ハブに接続して、ハブに送信される情報を Azure IoT エクスプローラー ツールを使用して表示する方法について説明します。 このサンプル アプリケーションは Node.js 用に記述されており、Node.js 用 Azure IoT Hub デバイス SDK に含まれています。 ソリューション ビルダーは Azure IoT エクスプローラー ツールを使用して、デバイス コードを表示しなくても IoT プラグ アンド プレイ デバイスの機能を理解することができます。

コードを参照

このチュートリアルでは、次の作業を行いました。

  • サンプル コードをダウンロードします。
  • サンプル デバイス アプリケーションを実行して、IoT ハブに接続することを確認します。
  • ソース コードを確認します。

前提条件

続行する前に、IoT ハブを含め、環境が設定されていることを確認してください。

このチュートリアルを完了するには、開発用コンピューターに Node.js が必要です。 nodejs.org から、複数のプラットフォームに対応した最新の推奨バージョンをダウンロードできます。

開発コンピューターに現在インストールされている Node.js のバージョンは、次のコマンドを使って確認できます。

node --version

コードのダウンロード

[チュートリアル: Windows 上で実行されている IoT プラグ アンド プレイのサンプル デバイス アプリケーションを IoT Hub に接続する (Node)] を完了している場合、リポジトリは既にクローンされています。

任意のディレクトリでコマンド プロンプトを開きます。 次のコマンドを実行して、Node.js 用 Microsoft Azure IoT SDK GitHub リポジトリをこの場所にクローンします。

git clone https://github.com/Azure/azure-iot-sdk-node

必要なライブラリをインストールする

デバイス SDK を使用して、含まれているサンプル コードをビルドします。 ビルドするアプリケーションにより、IoT ハブに接続する、複数のコンポーネントを使用するプラグ アンド プレイ デバイスがシミュレートされます。 アプリケーションによりテレメトリとプロパティが送信され、コマンドが受け取られます。

  1. ローカル ターミナル ウィンドウで、クローンしたリポジトリのフォルダーに移動し、 /azure-iot-sdk-node/device/samples/javascript フォルダーに移動します。 次に、次のコマンドを実行して、必要なライブラリをインストールします。
npm install

このコマンドにより、フォルダー内のサンプルを実行するために必要な関連する npm ファイルがインストールされます。

コードの確認

azure-iot-sdk-node/device/samples/javascript フォルダーに移動します。

azure-iot-sdk-node/device/samples/javascript フォルダーには、IoT Plug and Play の温度コントローラー デバイス用のサンプル コードが含まれています。

pnp_temperature_controller.js ファイル内のコードにより、IoT Plug and Play の温度コントローラー デバイスが実装されます。 このサンプルによって実装されるモデルにより、複数のコンポーネントが使用されます。 温度デバイスの Digital Twins Definition Language (DTDL) モデル ファイルにより、デバイスによって実装されるテレメトリ、プロパティ、コマンドが定義されます。

任意のコード エディターで pnp_temperature_controller.js ファイルを開きます。 このサンプル コードは、次の方法を示しています。

  • 実装するデバイスの DTMI である modelId を定義します。 この DTMI はユーザー定義であり、温度コントローラー DTDL モデルの DTMI と一致している必要があります。

  • 温度コントローラー DTDL モデルで定義されているコンポーネントを実装します。 実際の温度コントローラー内のコンポーネントによって、これら 2 つのインターフェイスが実装される必要があります。 これら 2 つのインターフェイスは、中央リポジトリで既に公開されています。 このサンプルには、次の 2 つのインターフェイスがあります。

    • Thermostat
    • Azure によって開発されたデバイスの情報
  • コンポーネント名を定義します。 このサンプルには、2 つのサーモスタットと 1 つのデバイス情報コンポーネントが含まれています。

  • デバイスが応答するコマンドのコマンド名を定義します。

  • serialNumber 定数を定義します。 serialNumber は、特定のデバイスに固定されています。

  • コマンド ハンドラーを定義します。

  • コマンド応答を送信するための関数を定義します。

  • コマンド要求をログに記録するためのヘルパー関数を定義します。

  • プロパティを作成するためのヘルパー関数を定義します。

  • プロパティ更新のリスナーを定義します。

  • このデバイスからテレメトリを送信するための関数を定義します。 サーモスタットと既定のコンポーネントの両方によってテレメトリが送信されます。 この関数により、パラメーターとしてコンポーネント名が受信されます。

  • 次のような main 関数を定義します。

    • デバイス SDK を使用してデバイス クライアントを作成し、IoT ハブに接続します。 IoT Hub によりデバイスが IoT プラグ アンド プレイ デバイスとして識別できるように、デバイスによって modelId が提供されます。

    • onDeviceMethod 関数を使用するコマンド要求のリッスンを開始します。 関数によって、サービスからのコマンド要求のリスナーが設定されます。

      • デバイス DTDL によって、reboot および getMaxMinReport コマンドが定義されます。
      • commandHandler 関数によって、コマンドに対するデバイスの応答方法が定義されます。
    • setIntervalsendTelemetry を使用するテレメトリの送信を開始します。

    • helperCreateReportedPropertiesPatch 関数を使用してプロパティを作成し、updateComponentReportedProperties を使用してプロパティを更新します。

    • desiredPropertyPatchListener を使用して、プロパティの更新をリッスンします。

    • すべてのリスナーとタスクを無効にし、Q または q キーが押されたときにループを終了します。

環境の設定で、Device Provisioning Service (DPS) を使用して IoT ハブに接続するようにサンプルを構成するための 4 つの環境変数を作成しました。

  • 値が DPSIOTHUB_DEVICE_SECURITY_TYPE
  • DPS の ID スコープを格納する IOTHUB_DEVICE_DPS_ID_SCOPE
  • my-pnp-device を格納する IOTHUB_DEVICE_DPS_DEVICE_ID
  • 登録プライマリ キーを格納する IOTHUB_DEVICE_DPS_DEVICE_KEY
  • global.azure-devices-provisioning.net を格納する IOTHUB_DEVICE_DPS_ENDPOINT

サンプル構成の詳細については、サンプルの readme を参照してください。

コードを確認したので、次のコマンドを使用してサンプルを実行します。

node pnp_temperature_controller.js

次の出力が表示されます。これは、デバイスがハブへの利用統計情報の送信を開始し、コマンドとプロパティの更新情報を受信する準備ができたことを示します。

デバイス確認メッセージ

次の手順を完了するまで、サンプルを実行したままにしておきます。

Azure IoT エクスプローラーを使用してコードを確認する

デバイス クライアントのサンプルが開始された後、Azure IoT エクスプローラー ツールを使用して、それが動作していることを確認します。

  1. Azure IoT エクスプローラーを開きます。

  2. IoT ハブへの接続をまだ追加していない場合は、 [IoT ハブ] ページで、 [+ 接続の追加] を選択します。 先ほど作成した IoT ハブの接続文字列を入力して、 [保存] を選択します。

  3. [IoT プラグ アンド プレイの設定] ページで、[+ 追加] > [ローカル フォルダー] の順に選択し、モデル ファイルを保存したローカルの [モデル] フォルダーを選択します。

  4. [IoT ハブ] ページで、操作するハブの名前をクリックします。 IoT ハブに登録されたデバイスの一覧が表示されます。

  5. 先ほど作成したデバイスのデバイス ID をクリックします。

  6. 左側のメニューに、デバイスで利用できるさまざまな種類の情報が表示されます。

  7. [IoT プラグ アンド プレイ コンポーネント] を選択して、デバイスのモデル情報を表示します。

  8. デバイスのさまざまなコンポーネントを表示できます。 既定のコンポーネントと追加のコンポーネント。 操作するコンポーネントを選択します。

  9. [テレメトリ] ページを選択し、 [開始] を選択して、デバイスから送信されているこのコンポーネントのテレメトリ データを表示します。

  10. [プロパティ (読み取り専用)] ページを選択して、このコンポーネントについて報告された読み取り専用プロパティを表示します。

  11. [プロパティ (書き込み可能)] ページを選択して、このコンポーネントに対して更新を行うことができる書き込み可能なプロパティを表示します。

  12. 名前でプロパティを選択し、新しい値を入力して、 [Update desired value](必要な値の更新) を選択します。

  13. 新しい値が表示されるようにするには、[更新] ボタンを選択します。

  14. [コマンド] ページを選択して、このコンポーネントを対象とするすべてのコマンドを表示します。

  15. テストするコマンドを選択します。パラメーターがある場合は、それを設定します。 [コマンドの送信] を選択して、デバイス上でコマンドを呼び出します。 サンプル コードが実行されているコマンド プロンプト ウィンドウで、デバイスがコマンドに応答していることを確認できます。

このチュートリアルでは、複数のコンポーネントを使用する IoT プラグ アンド プレイのサンプル デバイス アプリケーションをビルドし、それを IoT ハブに接続して、ハブに送信される情報を Azure IoT エクスプローラー ツールを使用して表示する方法について説明します。 このサンプル アプリケーションは Python で記述されており、Python 用 Azure IoT device SDK に含まれています。 ソリューション ビルダーは Azure IoT エクスプローラー ツールを使用して、デバイス コードを表示しなくても IoT プラグ アンド プレイ デバイスの機能を理解することができます。

コードを参照

このチュートリアルでは、次の作業を行いました。

  • サンプル コードをダウンロードします。
  • サンプル デバイス アプリケーションを実行して、IoT ハブに接続することを確認します。
  • ソース コードを確認します。

前提条件

続行する前に、IoT ハブを含め、環境が設定されていることを確認してください。

このチュートリアルは Linux または Windows で実行できます。 このチュートリアルのシェル コマンドは、パス区切り記号を "/" とする Linux 規則に従っています。Windows 方式に従う場合は、必ずこれらの区切り記号を "\" に置き換えてください。

このチュートリアルを完了するには、開発用コンピューターに Python をインストールする必要があります。 現在の Python バージョンの要件については、Azure IoT Python SDK を確認してください。 次のコマンドを使用して、ご利用の Python のバージョンを確認できます。

python --version

python.org から、複数のプラットフォームに対応した最新の推奨バージョンをダウンロードできます。

コードのダウンロード

azure-iot-device パッケージは PIP として公開されています。

ローカルの Python 環境で、次のようにパッケージをインストールします。

pip install azure-iot-device

[チュートリアル: Windows 上で実行されている IoT プラグ アンド プレイのサンプル デバイス アプリケーションを IoT Hub に接続する (Python)] を完了している場合、リポジトリは既にクローンされています。

Python SDK IoT リポジトリをクローンします。

git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python

コードの確認

このサンプルにより、IoT プラグ アンド プレイの温度コントローラー デバイスが実装されます。 このサンプルによって実装されるモデルにより、複数のコンポーネントが使用されます。 温度デバイスの Digital Twins Definition Language (DTDL) モデル ファイルにより、デバイスによって実装されるテレメトリ、プロパティ、コマンドが定義されます。

azure-iot-sdk-python/samples/pnp フォルダーには、IoT プラグ アンド プレイ デバイスのサンプル コードが含まれています。 温度コントローラー サンプルのファイルは次のとおりです。

  • temp_controller_with_thermostats.py
  • pnp_helper.py

温度コントローラーには、温度コントローラー DTDL モデルに基づく、複数のコンポーネントと既定のコンポーネントがあります。

任意のエディターで temp_controller_with_thermostats.py ファイルを開きます。 このファイルのコードによって、次のことが行われます。

  1. ヘルパー メソッドにアクセスするために pnp_helper.py がインポートされます。

  2. DTDL モデルで定義されている、2 つの異なるインターフェイスを一意に表す 2 つの Digital Twin Model Identifier (DTMI) が定義されます。 実際の温度コントローラー内のコンポーネントによって、これら 2 つのインターフェイスが実装される必要があります。 これら 2 つのインターフェイスは、中央リポジトリで既に公開されています。 これらの DTMI は、ユーザーに認識されている必要があり、デバイス実装のシナリオによって異なります。 現在のサンプルの場合、これら 2 つのインターフェイスは以下を表します。

    • サーモスタット
    • Azure によって作成されたデバイス情報。
  3. 実装されているデバイスの DTMI model_id が定義されます。 DTMI はユーザー定義であり、DTMI モデル ファイル内の DTMI と一致している必要があります。

  4. DTDL ファイル内のコンポーネントに指定された名前が定義されます。 2 つのサーモスタット (DTDL 内) と 1 つのデバイス情報コンポーネントがあります。 serial_number という定数は、既定のコンポーネントでも定義されています。 デバイスの serial_number を変更することはできません。

  5. コマンド ハンドラーの実装が定義されます。 これらのハンドラーにより、コマンド要求を受信したときのデバイスの動作が定義されます。

  6. コマンド応答を作成するための関数が定義されます。 これらの関数により、コマンド要求に対して、デバイスによってどのように応答されるかが定義されます。 コマンドによりカスタム応答を IoT ハブに戻す必要がある場合は、コマンドの応答関数を作成します。 コマンドの応答関数が指定されていない場合は、一般的な応答が送信されます。 このサンプルでは、getMaxMinReport コマンドにのみカスタム応答があります。

  7. このデバイスからテレメトリを送信するための関数が定義されます。 サーモスタットと既定のコンポーネントの両方によってテレメトリが送信されます。 テレメトリを送信したコンポーネントを識別できるように、この関数には、省略可能なコンポーネント名のパラメーターがあります。

  8. コマンド要求のリスナーが定義されます。

  9. 必要なプロパティ更新のリスナーが定義されます。

  10. 次のような main 関数があります。

    • デバイス SDK を使用してデバイス クライアントを作成し、IoT ハブに接続します。 IoT ハブによりデバイスが IoT プラグ アンド プレイ デバイスとして識別できるように、デバイスによって model_id が送信されます。

    • ヘルパー ファイルの create_reported_properties 関数を使用して、プロパティを作成します。 コンポーネント名、およびプロパティをキー値のペアとして、この関数に渡します。

    • patch_twin_reported_properties を呼び出すことによって、そのコンポーネントの読み取り可能なプロパティを更新します。

    • execute_command_listener 関数を使用するコマンド要求のリッスンを開始します。 この関数により、サービスからのコマンド要求のリスナーが設定されます。 リスナーを設定するときに、method_nameuser_command_handler、および省略可能な create_user_response_handler をパラメーターとして指定します。

      • method_name によってコマンド要求が定義されます。 このサンプルでは、モデルによって、コマンドの reboot、および getMaxMinReport が定義されます。
      • user_command_handler 関数により、コマンドを受信したときにデバイスによって行われる必要がある内容が定義されます。
      • create_user_response_handler 関数により、コマンドが正常に実行されたときに IoT ハブに送信される応答が作成されます。 この応答はポータルで確認できます。 この関数が指定されていない場合は、一般的な応答がサービスに送信されます。
    • execute_property_listener を使用して、プロパティの更新をリッスンします。

    • send_telemetry を使用するテレメトリの送信が開始されます。 サンプル コードにより、3 つのテレメトリの送信関数を呼び出すためにループが使用されます。 それぞれが 8 秒ごとに呼び出されます。

    • すべてのリスナーとタスクを無効にし、Q または q キーが押されたときにループを終了します。

環境の設定で、Device Provisioning Service (DPS) を使用して IoT ハブに接続するようにサンプルを構成するための 4 つの環境変数を作成しました。

  • 値が DPSIOTHUB_DEVICE_SECURITY_TYPE
  • DPS の ID スコープを格納する IOTHUB_DEVICE_DPS_ID_SCOPE
  • my-pnp-device を格納する IOTHUB_DEVICE_DPS_DEVICE_ID
  • 登録プライマリ キーを格納する IOTHUB_DEVICE_DPS_DEVICE_KEY
  • global.azure-devices-provisioning.net を格納する IOTHUB_DEVICE_DPS_ENDPOINT

サンプル構成の詳細については、サンプルの readme を参照してください。

次のコマンドを使用して、サンプルを実行します。

python temp_controller_with_thermostats.py

サンプル デバイスによって、数秒ごとにテレメトリ メッセージが IoT ハブに送信されます。

次の出力が表示されます。これは、デバイスによってハブにテレメトリ データが送信され、コマンドとプロパティの更新情報を受信する準備ができたことを示します。

デバイス確認メッセージ

次の手順を完了するまで、サンプルを実行したままにしておきます。

Azure IoT エクスプローラーを使用してコードを確認する

デバイス クライアントのサンプルが開始された後、Azure IoT エクスプローラー ツールを使用して、それが動作していることを確認します。

  1. Azure IoT エクスプローラーを開きます。

  2. IoT ハブへの接続をまだ追加していない場合は、 [IoT ハブ] ページで、 [+ 接続の追加] を選択します。 先ほど作成した IoT ハブの接続文字列を入力して、 [保存] を選択します。

  3. [IoT プラグ アンド プレイの設定] ページで、[+ 追加] > [ローカル フォルダー] の順に選択し、モデル ファイルを保存したローカルの [モデル] フォルダーを選択します。

  4. [IoT ハブ] ページで、操作するハブの名前をクリックします。 IoT ハブに登録されたデバイスの一覧が表示されます。

  5. 先ほど作成したデバイスのデバイス ID をクリックします。

  6. 左側のメニューに、デバイスで利用できるさまざまな種類の情報が表示されます。

  7. [IoT プラグ アンド プレイ コンポーネント] を選択して、デバイスのモデル情報を表示します。

  8. デバイスのさまざまなコンポーネントを表示できます。 既定のコンポーネントと追加のコンポーネント。 操作するコンポーネントを選択します。

  9. [テレメトリ] ページを選択し、 [開始] を選択して、デバイスから送信されているこのコンポーネントのテレメトリ データを表示します。

  10. [プロパティ (読み取り専用)] ページを選択して、このコンポーネントについて報告された読み取り専用プロパティを表示します。

  11. [プロパティ (書き込み可能)] ページを選択して、このコンポーネントに対して更新を行うことができる書き込み可能なプロパティを表示します。

  12. 名前でプロパティを選択し、新しい値を入力して、 [Update desired value](必要な値の更新) を選択します。

  13. 新しい値が表示されるようにするには、[更新] ボタンを選択します。

  14. [コマンド] ページを選択して、このコンポーネントを対象とするすべてのコマンドを表示します。

  15. テストするコマンドを選択します。パラメーターがある場合は、それを設定します。 [コマンドの送信] を選択して、デバイス上でコマンドを呼び出します。 サンプル コードが実行されているコマンド プロンプト ウィンドウで、デバイスがコマンドに応答していることを確認できます。

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

引き続きその他のデバイス開発者の記事に進む場合は、この記事で使用したリソースを保持し、再使用できます。 それ以外の場合、さらに多くの料金が発生するのを防ぐために、この記事で作成したリソースは削除してください。

次の Azure CLI コマンドを使用してリソース グループ全体を削除することで、ハブと登録済みデバイスの両方を一度に削除できます。 ただし、これらのリソースと保持したい他のリソースがリソース グループを共有している場合、このコマンドは使用しないでください。

az group delete --name <YourResourceGroupName>

IoT ハブのみを削除するには、Azure CLI を使用して次のコマンドを実行します。

az iot hub delete --name <YourIoTHubName>

IoT ハブに登録したデバイス ID のみを削除するには、Azure CLI を使用して次のコマンドを実行します。

az iot hub device-identity delete --hub-name <YourIoTHubName> --device-id <YourDeviceID>

また、クローンしたサンプル ファイルをお使いの開発用マシンから削除することもできます。

次のステップ

このチュートリアルでは、コンポーネントを使用する IoT プラグ アンド プレイ デバイスを IoT ハブに接続する方法を学習しました。 IoT プラグ アンド プレイ デバイス モデルの詳細については、以下を参照してください。