Azure IoT Hub 経由でクラウドからデバイスにメッセージを送る/メソッドを実行する

この記事の内容

  • Azure IoT Hub を使ったクラウド→デバイス(C2D)方向の通信を解説します
  • ダイレクトメソッドを使って、クラウドからデバイス上の関数を呼び出す方法を紹介します
  • Cloud-to-Device メッセージを使って、デバイスにメッセージを送信する方法を紹介します
  • Azure IoT Explorer(v0.14.3)と Raspberry Pi IoT Online Simulator を使って動作を確認します
  • Device Twin によるデバイス状態管理の概要にも触れます

はじめに

Azure IoT Hub に関しては、以前の動画でデバイスからクラウドへのメッセージ送信(Device-to-Cloud)を扱いました。デバイスが収集したデータを IoT Hub に送り上げ、Azure 側で各種処理を行うというフローです。

しかし、その逆方向——クラウドからデバイスへ指示を出す(Cloud-to-Device) についてはまだ紹介していませんでした。この記事ではその部分を補足します。


使用するツール

今回使用するツールは以下の 2 つです。

  • Raspberry Pi IoT Online Simulator — デバイス側のシミュレーターとして使用します
  • Azure IoT Explorer(v0.14.3) — IoT Hub に接続してクラウド側の操作を行います

事前準備:IoT Hub への接続とデバイスの作成

まず、Azure IoT Explorer を IoT Hub に接続します。IoT Hub の「IoT Hub Owner」のアクセスキーを使い、プライマリ接続文字列をコピーします。

Azure IoT Explorer で「Add connection」を選択し、コピーした接続文字列を貼り付ければ接続完了です。

次に、新しいデバイスを作成します。

  1. Azure IoT Explorer で「New device」を選択します
  2. デバイス ID(例:p-device)を入力して保存します
  3. 作成されたデバイスのプライマリ接続文字列をコピーします

コピーした接続文字列を Raspberry Pi IoT Online Simulator の接続設定に入力します。シミュレーターを起動すると、デバイスからクラウドへのメッセージ送信が始まり、Azure IoT Explorer 側でも受信を確認できます。


ダイレクトメソッドでデバイスを操作する

Device-to-Cloud の方向(デバイス→クラウド)が確認できたところで、逆方向のクラウド→デバイスの通信を試してみます。

Azure IoT Explorer には「Direct method(ダイレクトメソッド)」という機能があります。これを使うと、クラウド側からデバイス上に実装された関数を呼び出すことができます。

メッセージ送信を停止する(stop メソッド)

Raspberry Pi IoT Online Simulator には stop メソッドが実装されています。

Azure IoT Explorer の「Direct method」タブで以下のように入力し、「Invoke method」を実行します。

Methodname:stop

実行すると、シミュレーター側でメソッドが呼び出され、次のようなレスポンスが返ってきます。

Success:StopSendingMethod

IoT Hub がメッセージを仲介し、クラウドから送った stop という指示がデバイスに届いたことがわかります。LED のピカピカも止まり、メッセージの送信も停止しました。

メッセージ送信を再開する(start メソッド)

同様に、start メソッドを呼び出すとメッセージの送信が再開されます。

Methodname:start

実行後のレスポンス:

Success:StartSendingMessage

シミュレーターが再びメッセージを送信し始め、LED もピカピカと動作します。

このように stop / start といったメソッドを実装しておくだけで、IoT Hub 経由でさまざまな処理をキックできます。クラウド側からデバイスへの指示が可能になるわけです。


Cloud-to-Device メッセージを送る

ダイレクトメソッドのほかに、Cloud-to-Device メッセージという機能もあります。

Azure IoT Explorer の「Cloud-to-device message」タブから、対象デバイスを指定してメッセージ本文を入力し送信すると、デバイス側でそのメッセージを受信できます。

:testmessage

デバイス側では次のように受信が確認できます。

Receivemessage:testmessage

また、メッセージにプロパティ(追加情報)を付与することも可能です。プロパティを追加するオプションから任意のキーと値を設定して送信することができます。


Device Twin によるデバイス状態管理

Azure IoT Hub には Device Twin(デバイスツイン) という機能もあります。今回のシミュレーターでは実装されていないため動作確認はできませんが、概念として紹介します。

Device Twin を活用すると、以下のようなことが実現できます。

  • タグの付与:デバイスに対してタグを設定し、グループ管理が可能になります
  • ファームウェアバージョン管理:デバイスのファームウェアバージョンをクラウド上で管理し、バージョンが古い場合に自動更新するような実装が可能です
  • 状態の同期:デバイスの最新状態をクラウド上に保持・同期する仕組みを構築できます

まとめ

この記事では、Azure IoT Hub を使ったクラウド→デバイス(C2D)方向の通信について紹介しました。

  • ダイレクトメソッドを使うと、クラウドからデバイス上のメソッドを直接呼び出せます。stopstart のような操作をリモートで実行することが可能です
  • Cloud-to-Device メッセージを使うと、クラウドからデバイスに任意のメッセージを送信できます。プロパティの付与にも対応しています
  • Device Twin を活用することで、デバイスの状態管理やファームウェア更新といった高度な運用が可能になります

デバイスからのデータ収集だけでなく、クラウドからデバイスへ指示を出す仕組みも合わせて実装することで、IoT システムとしての可能性が大きく広がります。