クイック スタート: IoT ハブに接続されたデバイスを制御する

このクイック スタートでは、"ダイレクト メソッド" を使って、IoT Hub に接続されているシミュレートされたデバイスを制御します。 IoT Hub は、クラウドから IoT デバイスを管理し、大量のデバイス テレメトリを格納または処理のためにクラウドに取り込むことができるようにする Azure サービスです。 ダイレクト メソッドを使うと、IoT ハブに接続されたデバイスの動作をリモートで変更できます。

このクイック スタートでは、あらかじめ作成されている次の 2 つの .NET アプリケーションを使います。

  • サービス アプリケーションから呼び出されたダイレクト メソッドに応答するシミュレートされたデバイス アプリケーション。 ダイレクト メソッドの呼び出しを受け取るため、このアプリケーションは IoT Hub 上のデバイス固有のエンドポイントに接続します。

  • シミュレートされたデバイス上でダイレクト メソッドを呼び出すサービス アプリケーション。 デバイスでダイレクト メソッドを呼び出すため、このアプリケーションは IoT Hub 上のサービス側エンドポイントに接続します。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料で作成できます

  • このクイック スタートで実行する 2 つのサンプル アプリケーションは、C# を使って書かれています。 開発用マシン上に .NET SDK 6.0 以上が必要です。

    複数のプラットフォームに対応する .NET Core SDK を .NET からダウンロードできます。

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

    dotnet --version
    
  • GitHub から Azure IoT C# SDK を複製またはダウンロードします。

  • ポート 8883 がファイアウォールで開放されていることを確認してください。 このクイックスタートのデバイス サンプルでは、ポート 8883 を介して通信する MQTT プロトコルを使用しています。 このポートは、企業や教育用のネットワーク環境によってはブロックされている場合があります。 この問題の詳細と対処方法については、「IoT Hub への接続 (MQTT)」を参照してください。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

Note

この記事では、azure-iot と呼ばれる、Azure IoT 拡張機能の最新バージョンを使用します。 従来のバージョンは azure-cli-iot-ext と呼ばれます。一度にインストールできるバージョンは 1 つだけです。 コマンド az extension list を使用すると、現在インストールされている拡張機能を確認できます。

拡張機能の従来のバージョンを削除するには、az extension remove --name azure-cli-iot-ext を使用します。

拡張機能の新しいバージョンを追加するには、az extension add --name azure-iot を使用します。

インストール済みの拡張機能を表示するには、az extension list を使用してください。

このセクションでは、Azure CLI を使用して IoT ハブとリソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 IoT ハブは、IoT アプリケーションとデバイスの間の双方向通信に対する中央メッセージ ハブとして機能します。

Azure サブスクリプションに IoT ハブが既にある場合は、このセクションをスキップできます。

IoT ハブとリソース グループを作成するには、次のようにします。

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

    • Cloud Shell を使用する場合は、CLI コマンドの [Try It](試してみる) ボタンを選択すると、分割されたブラウザー ウィンドウで Cloud Shell が起動します。 また、別のブラウザー タブで Cloud Shell を開くこともできます。
    • Azure CLI をローカルで使用している場合は、CLI コンソール アプリを起動し、Azure CLI にサインインします。
  2. az extension add を実行して、azure-iot 拡張機能をインストールするか、最新バージョンにアップグレードします。

    az extension add --upgrade --name azure-iot
    
  3. CLI アプリで az group create コマンドを実行してリソース グループを作成します。 次のコマンドは、myResourceGroup という名前のリソース グループを eastus という場所に作成します。

    Note

    必要に応じて、別の場所を設定できます。 選択できる場所を確認するには、az account list-locations を実行します。 コマンド例を見るとわかるように、このクイックスタートでは eastus を使用しています。

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

    YourIotHubName: 以下のコマンドでは、このプレースホルダーとその前後の中かっこを実際の IoT ハブの名前に置き換えます。 IoT ハブ名は Azure でグローバルに一意である必要があります。 以降、このクイックスタートに出現しているプレースホルダーにはすべて、実際の IoT ハブの名前を使用してください。

    az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
    

サービス接続文字列を取得する

サービス アプリケーションがハブに接続してメッセージを取得できるようにするには、IoT ハブの "サービス接続文字列" も必要です。 サービス接続文字列は IoT ハブ全体での文字列であり、前のセクションで取得したデバイス接続文字列とは異なります。

次のコマンドを実行すると、IoT ハブのサービス接続文字列が取得されます。

az iot hub connection-string show --policy-name service --hub-name {YourIoTHubName} --output table

次のようなサービス接続文字列をメモしておきます。

HostName={YourIoTHubName}.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey={YourSharedAccessKey}

この値は、このクイック スタートの後の方で使います。

デバイスのシミュレーション

シミュレートされたデバイス アプリケーションは、IoT Hub 上のデバイス固有エンドポイントに接続し、シミュレートされた利用統計情報を送信して、Hub からのダイレクト メソッド呼び出しをリッスンします。 このクイック スタートでは、ハブからのダイレクト メソッド呼び出しは、利用統計情報の送信間隔を変更するようデバイスに指示します。 シミュレートされたデバイスでは、ダイレクト メソッドを実行した後、ハブに受信確認が返送されます。

  1. ローカル ターミナル ウィンドウで、サンプルの C# プロジェクトのルート フォルダーに移動します。 次に iothub\device\samples\getting started\SimulatedDeviceWithCommand フォルダーに移動します。

  2. 次のコマンドを実行して、シミュレートされたデバイス アプリケーションに必要なパッケージをインストールします。

    dotnet restore
    
  3. 次のコマンドを実行し、シミュレートされたデバイス アプリケーションをビルドして実行します。

    {DeviceConnectionString}: このプレースホルダーは、先ほどメモしたデバイス接続文字列に置き換えてください。

    dotnet run -- -c "{DeviceConnectionString}"
    

    次のスクリーンショットは、シミュレートされたデバイス アプリケーションが IoT Hub にテレメトリを送信したときの出力を示しています。

    シミュレートされたデバイスを実行する

ダイレクト メソッドを呼び出す

サービス アプリケーションは、IoT Hub 上のサービス側エンドポイントに接続します。 アプリケーションにより、IoT ハブを通してデバイスへのダイレクト メソッド呼び出しが行われた後、受信確認がリッスンされます。 通常、IoT Hub サービス アプリケーションはクラウドで実行されます。

  1. 別のローカル ターミナル ウィンドウで、サンプルの C# プロジェクトのルート フォルダーに移動します。 次に iothub\service\samples\getting started\InvokeDeviceMethod フォルダーに移動します。

  2. ローカル ターミナル ウィンドウで次のコマンドを実行して、サービス アプリケーションに必要なライブラリをインストールします。

    dotnet build
    
  3. ローカル ターミナル ウィンドウで次のコマンドを実行し、サービス アプリケーションをビルドして実行します。

    {ServiceConnectionString}: このプレースホルダーは、先ほどメモした IoT Hub サービス接続文字列に置き換えてください。

    {DeviceName}: このプレースホルダーは、登録したデバイスの名前に置き換えてください。

    dotnet run -- -c "{ServiceConnectionString}" -d {DeviceName}
    

    次のスクリーンショットは、アプリケーションによりデバイスに対してダイレクト メソッド呼び出しが行われ、受信確認が受診されたときの出力を示します。

    サービス アプリケーションの実行

    サービス アプリケーションの実行後、シミュレートされたデバイスを実行しているコンソール ウィンドウにメッセージが表示され、メッセージの送信速度が変わります。

    シミュレートされたクライアントでの変更

このクイックスタートでは 2 つの Java アプリケーションを使います。

  • シミュレートされたデバイス アプリケーションは、バックエンド アプリケーションから呼び出されたダイレクト メソッドに応答します。
  • シミュレートされたデバイス上でダイレクト メソッドを呼び出すサービス アプリケーション。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料で作成できます

  • Java SE Development Kit 8。 「Azure および Azure Stack の Java 長期サポート」の「長期サポート」で「Java 8」を選択します。

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

    java -version
    
  • Apache Maven 3

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

    mvn --version
    
  • GitHub から Azure IoT の Java サンプルを複製またはダウンロードします。

  • ポート 8883 がファイアウォールで開放されていることを確認してください。 このクイックスタートのデバイス サンプルでは、ポート 8883 を介して通信する MQTT プロトコルを使用しています。 このポートは、企業や教育用のネットワーク環境によってはブロックされている場合があります。 この問題の詳細と対処方法については、「IoT Hub への接続 (MQTT)」を参照してください。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

Note

この記事では、azure-iot と呼ばれる、Azure IoT 拡張機能の最新バージョンを使用します。 従来のバージョンは azure-cli-iot-ext と呼ばれます。一度にインストールできるバージョンは 1 つだけです。 コマンド az extension list を使用すると、現在インストールされている拡張機能を確認できます。

拡張機能の従来のバージョンを削除するには、az extension remove --name azure-cli-iot-ext を使用します。

拡張機能の新しいバージョンを追加するには、az extension add --name azure-iot を使用します。

インストール済みの拡張機能を表示するには、az extension list を使用してください。

IoT Hub の作成

このセクションでは、Azure CLI を使用して IoT ハブとリソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 IoT ハブは、IoT アプリケーションとデバイスの間の双方向通信に対する中央メッセージ ハブとして機能します。

Azure サブスクリプションに IoT ハブが既にある場合は、このセクションをスキップできます。

IoT ハブとリソース グループを作成するには、次のようにします。

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

    • Cloud Shell を使用する場合は、CLI コマンドの [Try It](試してみる) ボタンを選択すると、分割されたブラウザー ウィンドウで Cloud Shell が起動します。 また、別のブラウザー タブで Cloud Shell を開くこともできます。
    • Azure CLI をローカルで使用している場合は、CLI コンソール アプリを起動し、Azure CLI にサインインします。
  2. az extension add を実行して、azure-iot 拡張機能をインストールするか、最新バージョンにアップグレードします。

    az extension add --upgrade --name azure-iot
    
  3. CLI アプリで az group create コマンドを実行してリソース グループを作成します。 次のコマンドは、myResourceGroup という名前のリソース グループを eastus という場所に作成します。

    Note

    必要に応じて、別の場所を設定できます。 選択できる場所を確認するには、az account list-locations を実行します。 コマンド例を見るとわかるように、このクイックスタートでは eastus を使用しています。

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

    YourIotHubName: 以下のコマンドでは、このプレースホルダーとその前後の中かっこを実際の IoT ハブの名前に置き換えます。 IoT ハブ名は Azure でグローバルに一意である必要があります。 以降、このクイックスタートに出現しているプレースホルダーにはすべて、実際の IoT ハブの名前を使用してください。

    az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
    

デバイスの登録

デバイスを IoT Hub に接続するには、あらかじめ IoT Hub に登録しておく必要があります。 このセクションでは、Azure CLI を使用してデバイス ID を作成します。

IoT ハブにデバイスが既に登録されている場合は、このセクションをスキップできます。

デバイス ID を作成するには:

  1. CLI シェルで、az iot hub device-identity create コマンドを実行します。 このコマンドで、デバイス ID が作成されます。

    "your_iot_hub_name"。 このプレースホルダーは、実際の IoT Hub に対して選んだ名前に置き換えてください。

    myDevice。 この記事全体でデバイス ID にこの名前を使用することも、別のデバイス名を指定することもできます。

    az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
    
  2. az iot hub device-identity connection-string show コマンドを実行します。

    az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
    

    接続文字列出力は次の形式です。

    HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
    
  3. 接続文字列を安全な場所に保存します。

注意

CLI アプリは開いたままにしておいてください。 これは後の手順で使用します。

サービス接続文字列を取得する

また、バックエンド アプリケーションが IoT ハブに接続してメッセージを取得できるようにするには、"サービス接続文字列" が必要です。 次のコマンドを実行すると、IoT ハブのサービス接続文字列が取得されます。

YourIoTHubName: このプレースホルダーは、実際の IoT Hub に対して選んだ名前に置き換えてください。

az iot hub connection-string show --policy-name service --hub-name {YourIoTHubName} --output table

次のようなサービス接続文字列をメモしておきます。

HostName={YourIoTHubName}.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey={YourSharedAccessKey}

この値は、このクイック スタートの後の方で使います。 このサービス接続文字列は、前の手順でメモしたデバイス接続文字列とは異なります。

デバイスのシミュレーション

シミュレートされたデバイス アプリケーションは、IoT Hub 上のデバイス固有エンドポイントに接続し、シミュレートされた利用統計情報を送信して、Hub からのダイレクト メソッド呼び出しをリッスンします。 このクイック スタートでは、ハブからのダイレクト メソッド呼び出しは、利用統計情報の送信間隔を変更するようデバイスに指示します。 シミュレートされたデバイスでは、ダイレクト メソッドを実行した後、ハブに受信確認が返送されます。

  1. ローカル ターミナル ウィンドウで、サンプルの Java プロジェクトのルート フォルダーに移動します。 次に、iot-hub\Quickstarts\simulated-device-2 フォルダーに移動します。

  2. 適当なテキスト エディターで src/main/java/com/microsoft/docs/iothub/samples/SimulatedDevice.java ファイルを開きます。

    connString 変数の値を、前にメモしたデバイス接続文字列に置き換えます。 その後、変更を SimulatedDevice.java に保存します。

  3. ローカル ターミナル ウィンドウで次のコマンドを実行して、必要なライブラリをインストールし、シミュレートされたデバイス アプリケーションをビルドします。

    mvn clean package
    
  4. ローカル ターミナル ウィンドウで次のコマンドを実行して、シミュレートされたデバイス アプリケーションを実行します。

    java -jar target/simulated-device-2-1.0.0-with-deps.jar
    

    次のスクリーンショットは、シミュレートされたデバイス アプリケーションが IoT Hub にテレメトリを送信したときの出力を示しています。

    デバイスによって対象の IoT ハブに送信されたテレメトリからの出力

ダイレクト メソッドを呼び出す

バックエンド アプリケーションは、IoT ハブ上のサービス側エンドポイントに接続します。 アプリケーションにより、IoT ハブを通してデバイスへのダイレクト メソッド呼び出しが行われた後、受信確認がリッスンされます。 通常、IoT Hub のバックエンド アプリケーションはクラウドで実行されます。

  1. 別のローカル ターミナル ウィンドウで、サンプルの Java プロジェクトのルート フォルダーに移動します。 その後、iot-hub\Quickstarts\back-end-application フォルダーに移動します。

  2. 適当なテキスト エディターで src/main/java/com/microsoft/docs/iothub/samples/BackEndApplication.java ファイルを開きます。

    iotHubConnectionString 変数の値を、前にメモしたサービス接続文字列に置き換えます。 変更を BackEndApplication.java に保存します。

  3. ローカル ターミナル ウィンドウで次のコマンドを実行して、必要なライブラリをインストールし、バックエンド アプリケーションをビルドします。

    mvn clean package
    
  4. ローカル ターミナル ウィンドウで次のコマンドを実行して、バックエンド アプリケーションを実行します。

    java -jar target/back-end-application-1.0.0-with-deps.jar
    

    次のスクリーンショットは、アプリケーションによりデバイスに対してダイレクト メソッド呼び出しが行われ、受信確認が受診されたときの出力を示します。

    アプリケーションが対象の IoT ハブを介してダイレクト メソッド呼び出しを行ったときの出力

    バックエンド アプリケーションを実行した後、シミュレートされたデバイスを実行しているコンソール ウィンドウにメッセージが表示され、メッセージの送信速度が変わります。

    デバイスからのコンソール メッセージに変更された速度が示される

このクイックスタートでは 2 つの Node.js アプリケーションを使用します。

  • シミュレートされたデバイス アプリケーションは、バックエンド アプリケーションから呼び出されたダイレクト メソッドに応答します。 ダイレクト メソッドの呼び出しを受け取るため、このアプリケーションは IoT Hub 上のデバイス固有のエンドポイントに接続します。
  • バックエンド アプリケーションは、シミュレートされたデバイスでダイレクト メソッドを呼び出します。 デバイスでダイレクト メソッドを呼び出すため、このアプリケーションは IoT ハブ上のサービス固有のエンドポイントに接続します。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料で作成できます

  • Node.js 12 以降.

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

    node --version
    
  • GitHub から Azure IoT の Node.js サンプルを複製またはダウンロードします。

  • ポート 8883 がファイアウォールで開放されていることを確認してください。 このクイックスタートのデバイス サンプルでは、ポート 8883 を介して通信する MQTT プロトコルを使用しています。 このポートは、企業や教育用のネットワーク環境によってはブロックされている場合があります。 この問題の詳細と対処方法については、「IoT Hub への接続 (MQTT)」を参照してください。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

Note

この記事では、azure-iot と呼ばれる、Azure IoT 拡張機能の最新バージョンを使用します。 従来のバージョンは azure-cli-iot-ext と呼ばれます。一度にインストールできるバージョンは 1 つだけです。 コマンド az extension list を使用すると、現在インストールされている拡張機能を確認できます。

拡張機能の従来のバージョンを削除するには、az extension remove --name azure-cli-iot-ext を使用します。

拡張機能の新しいバージョンを追加するには、az extension add --name azure-iot を使用します。

インストール済みの拡張機能を表示するには、az extension list を使用してください。

IoT Hub の作成

このセクションでは、Azure CLI を使用して IoT ハブとリソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 IoT ハブは、IoT アプリケーションとデバイスの間の双方向通信に対する中央メッセージ ハブとして機能します。

Azure サブスクリプションに IoT ハブが既にある場合は、このセクションをスキップできます。

IoT ハブとリソース グループを作成するには、次のようにします。

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

    • Cloud Shell を使用する場合は、CLI コマンドの [Try It](試してみる) ボタンを選択すると、分割されたブラウザー ウィンドウで Cloud Shell が起動します。 また、別のブラウザー タブで Cloud Shell を開くこともできます。
    • Azure CLI をローカルで使用している場合は、CLI コンソール アプリを起動し、Azure CLI にサインインします。
  2. az extension add を実行して、azure-iot 拡張機能をインストールするか、最新バージョンにアップグレードします。

    az extension add --upgrade --name azure-iot
    
  3. CLI アプリで az group create コマンドを実行してリソース グループを作成します。 次のコマンドは、myResourceGroup という名前のリソース グループを eastus という場所に作成します。

    Note

    必要に応じて、別の場所を設定できます。 選択できる場所を確認するには、az account list-locations を実行します。 コマンド例を見るとわかるように、このクイックスタートでは eastus を使用しています。

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

    YourIotHubName: 以下のコマンドでは、このプレースホルダーとその前後の中かっこを実際の IoT ハブの名前に置き換えます。 IoT ハブ名は Azure でグローバルに一意である必要があります。 以降、このクイックスタートに出現しているプレースホルダーにはすべて、実際の IoT ハブの名前を使用してください。

    az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
    

デバイスの登録

デバイスを IoT Hub に接続するには、あらかじめ IoT Hub に登録しておく必要があります。 このセクションでは、Azure CLI を使用してデバイス ID を作成します。

IoT ハブにデバイスが既に登録されている場合は、このセクションをスキップできます。

デバイス ID を作成するには:

  1. CLI シェルで、az iot hub device-identity create コマンドを実行します。 このコマンドで、デバイス ID が作成されます。

    "your_iot_hub_name"。 このプレースホルダーは、実際の IoT Hub に対して選んだ名前に置き換えてください。

    myDevice。 この記事全体でデバイス ID にこの名前を使用することも、別のデバイス名を指定することもできます。

    az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
    
  2. az iot hub device-identity connection-string show コマンドを実行します。

    az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
    

    接続文字列出力は次の形式です。

    HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
    
  3. 接続文字列を安全な場所に保存します。

注意

CLI アプリは開いたままにしておいてください。 これは後の手順で使用します。

サービス接続文字列を取得する

また、バックエンド アプリケーションから IoT ハブに接続してメッセージを取得できるようにするには、お使いの IoT ハブの "サービス接続文字列" が必要です。 次のコマンドを実行すると、IoT ハブのサービス接続文字列が取得されます。

YourIoTHubName: このプレースホルダーは、実際の IoT Hub に対して選んだ名前に置き換えてください。

az iot hub connection-string show \
  --policy-name service --hub-name {YourIoTHubName} --output table

次のようなサービス接続文字列をメモしておきます。

HostName={YourIoTHubName}.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey={YourSharedAccessKey}

この値は、このクイック スタートの後の方で使います。 このサービス接続文字列は、前の手順でメモしたデバイス接続文字列とは異なります。

デバイスのシミュレーション

シミュレートされたデバイス アプリケーションは、IoT Hub 上のデバイス固有エンドポイントに接続し、シミュレートされた利用統計情報を送信して、Hub からのダイレクト メソッド呼び出しをリッスンします。 このクイック スタートでは、ハブからのダイレクト メソッド呼び出しは、利用統計情報の送信間隔を変更するようデバイスに指示します。 シミュレートされたデバイスでは、ダイレクト メソッドを実行した後、ハブに受信確認が返送されます。

  1. ローカル ターミナル ウィンドウで、サンプルの Node.js プロジェクトのルート フォルダーに移動します。 次に、iot-hub\Quickstarts\simulated-device-2 フォルダーに移動します。

  2. 適当なテキスト エディターで SimulatedDevice.js ファイルを開きます。

    connectionString 変数の値を、前にメモしたデバイス接続文字列に置き換えます。 その後、変更を SimulatedDevice.js に保存します。

  3. ローカル ターミナル ウィンドウで次のコマンドを実行して、必要なライブラリをインストールし、シミュレートされたデバイス アプリケーションを実行します。

    npm install
    node SimulatedDevice.js
    

    次のスクリーンショットは、シミュレートされたデバイス アプリケーションが IoT Hub にテレメトリを送信したときの出力を示しています。

    シミュレートされたデバイスを実行する

ダイレクト メソッドを呼び出す

バックエンド アプリケーションは、IoT ハブ上のサービス側エンドポイントに接続します。 アプリケーションにより、IoT ハブを通してデバイスへのダイレクト メソッド呼び出しが行われた後、受信確認がリッスンされます。 通常、IoT Hub のバックエンド アプリケーションはクラウドで実行されます。

  1. 別のローカル ターミナル ウィンドウで、サンプルの Node.js プロジェクトのルート フォルダーに移動します。 その後、iot-hub\Quickstarts\back-end-application フォルダーに移動します。

  2. 適当なテキスト エディターで BackEndApplication.js ファイルを開きます。

    connectionString 変数の値を、前にメモしたサービス接続文字列に置き換えます。 変更を BackEndApplication.js に保存します。

  3. ローカル ターミナル ウィンドウで次のコマンドを実行して、必要なライブラリをインストールし、バックエンド アプリケーションを実行します。

    npm install
    node BackEndApplication.js
    

    次のスクリーンショットは、アプリケーションによりデバイスに対してダイレクト メソッド呼び出しが行われ、受信確認が受診されたときの出力を示します。

    アプリケーションがデバイスに対してダイレクト メソッドの呼び出しを行うときの出力

    バックエンド アプリケーションを実行した後、シミュレートされたデバイスを実行しているコンソール ウィンドウにメッセージが表示され、メッセージの送信速度が変わります。

    シミュレートされたクライアントに変更があったときの出力

このクイックスタートでは 2 つの Python アプリケーションを使います。

  • シミュレートされたデバイス アプリケーションは、バックエンド アプリケーションから呼び出されたダイレクト メソッドに応答します。
  • バックエンド アプリケーションは、シミュレートされたデバイスでダイレクト メソッドを呼び出します。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 無料で作成できます

  • Python 3.7 以上。 サポートされる他のバージョンの Python については、「Azure IoT デバイスの機能」を参照してください。

  • GitHub から Azure IoT の Python サンプルを複製またはダウンロードします。

  • ポート 8883 がファイアウォールで開放されていることを確認してください。 このクイックスタートのデバイス サンプルでは、ポート 8883 を介して通信する MQTT プロトコルを使用しています。 このポートは、企業や教育用のネットワーク環境によってはブロックされている場合があります。 この問題の詳細と対処方法については、「IoT Hub への接続 (MQTT)」を参照してください。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

Note

この記事では、azure-iot と呼ばれる、Azure IoT 拡張機能の最新バージョンを使用します。 従来のバージョンは azure-cli-iot-ext と呼ばれます。一度にインストールできるバージョンは 1 つだけです。 コマンド az extension list を使用すると、現在インストールされている拡張機能を確認できます。

拡張機能の従来のバージョンを削除するには、az extension remove --name azure-cli-iot-ext を使用します。

拡張機能の新しいバージョンを追加するには、az extension add --name azure-iot を使用します。

インストール済みの拡張機能を表示するには、az extension list を使用してください。

IoT Hub の作成

このセクションでは、Azure CLI を使用して IoT ハブとリソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 IoT ハブは、IoT アプリケーションとデバイスの間の双方向通信に対する中央メッセージ ハブとして機能します。

Azure サブスクリプションに IoT ハブが既にある場合は、このセクションをスキップできます。

IoT ハブとリソース グループを作成するには、次のようにします。

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

    • Cloud Shell を使用する場合は、CLI コマンドの [Try It](試してみる) ボタンを選択すると、分割されたブラウザー ウィンドウで Cloud Shell が起動します。 また、別のブラウザー タブで Cloud Shell を開くこともできます。
    • Azure CLI をローカルで使用している場合は、CLI コンソール アプリを起動し、Azure CLI にサインインします。
  2. az extension add を実行して、azure-iot 拡張機能をインストールするか、最新バージョンにアップグレードします。

    az extension add --upgrade --name azure-iot
    
  3. CLI アプリで az group create コマンドを実行してリソース グループを作成します。 次のコマンドは、myResourceGroup という名前のリソース グループを eastus という場所に作成します。

    Note

    必要に応じて、別の場所を設定できます。 選択できる場所を確認するには、az account list-locations を実行します。 コマンド例を見るとわかるように、このクイックスタートでは eastus を使用しています。

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

    YourIotHubName: 以下のコマンドでは、このプレースホルダーとその前後の中かっこを実際の IoT ハブの名前に置き換えます。 IoT ハブ名は Azure でグローバルに一意である必要があります。 以降、このクイックスタートに出現しているプレースホルダーにはすべて、実際の IoT ハブの名前を使用してください。

    az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
    

デバイスの登録

デバイスを IoT Hub に接続するには、あらかじめ IoT Hub に登録しておく必要があります。 このセクションでは、Azure CLI を使用してデバイス ID を作成します。

IoT ハブにデバイスが既に登録されている場合は、このセクションをスキップできます。

デバイス ID を作成するには:

  1. CLI シェルで、az iot hub device-identity create コマンドを実行します。 このコマンドで、デバイス ID が作成されます。

    "your_iot_hub_name"。 このプレースホルダーは、実際の IoT Hub に対して選んだ名前に置き換えてください。

    myDevice。 この記事全体でデバイス ID にこの名前を使用することも、別のデバイス名を指定することもできます。

    az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
    
  2. az iot hub device-identity connection-string show コマンドを実行します。

    az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
    

    接続文字列出力は次の形式です。

    HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
    
  3. 接続文字列を安全な場所に保存します。

注意

CLI アプリは開いたままにしておいてください。 これは後の手順で使用します。

サービス接続文字列を取得する

また、バックエンド アプリケーションが IoT ハブに接続してメッセージを取得できるようにするには、"サービス接続文字列" が必要です。 次のコマンドを実行すると、IoT ハブのサービス接続文字列が取得されます。

YourIoTHubName: このプレースホルダーは、実際の IoT ハブに対して選んだ名前に置き換えてください。

az iot hub connection-string show \
  --policy-name service \
  --hub-name {YourIoTHubName} \
  --output table

次のようなサービス接続文字列をメモしておきます。

HostName={YourIoTHubName}.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey={YourSharedAccessKey}

この値は、このクイック スタートの後の方で使います。 このサービス接続文字列は、前の手順でメモしたデバイス接続文字列とは異なります。

デバイスのシミュレーション

シミュレートされたデバイス アプリケーションは、IoT Hub 上のデバイス固有エンドポイントに接続し、シミュレートされた利用統計情報を送信して、Hub からのダイレクト メソッド呼び出しをリッスンします。 このクイック スタートでは、ハブからのダイレクト メソッド呼び出しは、利用統計情報の送信間隔を変更するようデバイスに指示します。 シミュレートされたデバイスでは、ダイレクト メソッドを実行した後、ハブに受信確認が返送されます。

  1. ローカル ターミナル ウィンドウで、サンプルの Python プロジェクトのルート フォルダーに移動します。 次に、iot-hub\Quickstarts\simulated-device-2 フォルダーに移動します。

  2. 適当なテキスト エディターで SimulatedDeviceSync.py ファイルを開きます。

    CONNECTION_STRING 変数の値を、前にメモしたデバイス接続文字列に置き換えます。 その後、変更を SimulatedDeviceSync.py に保存します。

  3. ローカル ターミナル ウィンドウで次のコマンドを実行して、シミュレートされたデバイス アプリケーションに必要なライブラリをインストールします。

    pip install azure-iot-device
    
  4. ローカル ターミナル ウィンドウで次のコマンドを実行して、シミュレートされたデバイス アプリケーションを実行します。

    python SimulatedDeviceSync.py
    

    次のスクリーンショットは、シミュレートされたデバイス アプリケーションが IoT Hub にテレメトリを送信したときの出力を示しています。

    シミュレートされたデバイスを実行する

ダイレクト メソッドを呼び出す

バックエンド アプリケーションは、IoT ハブ上のサービス側エンドポイントに接続します。 アプリケーションにより、IoT ハブを通してデバイスへのダイレクト メソッド呼び出しが行われた後、受信確認がリッスンされます。 通常、IoT Hub のバックエンド アプリケーションはクラウドで実行されます。

  1. 別のローカル ターミナル ウィンドウで、サンプルの Python プロジェクトのルート フォルダーに移動します。 その後、iot-hub\Quickstarts\back-end-application フォルダーに移動します。

  2. 適当なテキスト エディターで BackEndApplication.py ファイルを開きます。

    CONNECTION_STRING 変数の値を、前にメモしたサービス接続文字列に置き換えます。 変更を BackEndApplication.py に保存します。

  3. ローカル ターミナル ウィンドウで次のコマンドを実行して、シミュレートされたデバイス アプリケーションに必要なライブラリをインストールします。

    pip install azure-iot-hub
    
  4. ローカル ターミナル ウィンドウで次のコマンドを実行して、バックエンド アプリケーションを実行します。

    python BackEndApplication.py
    

    次のスクリーンショットは、アプリケーションによりデバイスに対してダイレクト メソッド呼び出しが行われ、受信確認が受診されたときの出力を示します。

    バックエンド アプリケーションを実行する

    バックエンド アプリケーションを実行した後、シミュレートされたデバイスを実行しているコンソール ウィンドウにメッセージが表示され、メッセージの送信速度が変わります。

    シミュレートされたクライアントでの変更

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

次の推奨記事に進む場合は、既に作成したリソースを維持して、再利用することができます。

それ以外の場合は、課金されないようにするために、この記事で作成した Azure リソースを削除してもかまいません。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそこに含まれるすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 IoT ハブを、保持したいリソースが含まれている既存のリソース グループ内に作成した場合は、リソース グループを削除するのではなく、IoT Hub リソースだけを削除してください。

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

  1. Azure portal にサインインし、 [リソース グループ] を選択します。

  2. [名前でフィルター処理してください] テキスト ボックスに、IoT ハブが含まれているリソース グループの名前を入力します。

  3. 結果一覧のリソース グループの右側で、 [...][リソース グループの削除] の順に選択します。

    削除

  4. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにもう一度リソース グループの名前を入力し、 [削除] を選択します。 しばらくすると、リソース グループとそこに含まれているすべてのリソースが削除されます。

次のステップ

このクイックスタートでは、サービス アプリケーションからデバイス上のダイレクト メソッドを呼び出し、シミュレートされたデバイス アプリケーションでダイレクト メソッド呼び出しに応答しました。

デバイスからクラウドへのメッセージをクラウド内の異なる宛先にルーティングする方法を学習するには、次のチュートリアルに進んでください。