環境
Windows11 WSL2
❯ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
大まかな流れ
- Azure PortalでIoT Hubリソースの作成
- IoT Hubにデバイスを登録
- ローカルマシンにIoT HubのSDKをインストール
- エッジデバイスからメッセージの送信と、確認
Azure PortalでIoT Hubリソースの作成
これは別にAzure Portal上でなくても、azコマンドなどでも作成できるものと思いますが、私の場合はAzure Portal上でポチポチ作りました。
IoT Hubにデバイスを登録
作成したリソースの左側ペインにデバイス管理 > デバイスという項目があります。これをクリックして、IoT Hubに接続することのできるデバイスを作成します。
画面が遷移したら、デバイスの追加ボタンを押します。
エッジデバイスとして自分のPCを使う予定でしたので、ここではyoshikawa_pcという名前にしましたが、適当な名前をつけてデバイスを作成すると、その名前がデバイスリスト上に表示されるようになります。
リスト上のデバイス名をクリックすると下記の画面が表示されますので、ここでプライマリ接続文字列を取得できるようになります。これは後ほど使いますので、コピーして保存しておいてください。
ローカルマシンにIoT HubのSDKをインストール
Pythonを選択した場合、pipを使って簡単にインストールできるようです。
pip install azure-iot-device
そして以下のコードを作成します。
import os
from azure.iot.device import IoTHubDeviceClient, Message
from dotenv import load_dotenv
load_dotenv()
# デバイスの接続文字列を設定
IOT_HUB_CON_STR = os.getenv("IOT_HUB_CON_STR")
# JSONデータ
json_data = '{"temperature": 25, "humidity": 60}'
# IoT Hubデバイスクライアントのインスタンスを作成
client = IoTHubDeviceClient.create_from_connection_string(IOT_HUB_CON_STR)
try:
# メッセージ作成
message = Message(json_data)
# メッセージを送信
print(f"メッセージを送信中: {json_data}")
client.send_message(message)
print("メッセージが送信されました")
except Exception as e:
print("送信中にエラーが発生しました: {}".format(e))
finally:
# クライアントの終了
client.shutdown()
デバイスの接続文字列を設定の部分で、さきほどコピーしておいた接続文字列を設定してあげます。
上記コードの場合、python-dotenvを使って環境変数から接続文字列を読み取っています。
エッジデバイスからメッセージの送信と、確認
上記のコードを実行すればメッセージの送信ができますが、メッセージを確認するためにはazコマンドを使って確認しないといけないようです。(IoT Hub上から確認できないの?という疑問が残るのですが… やっぱりIoT Hubからの確認はできないみたいです)
azコマンドをインストールした端末上で以下のコマンドを入力します。
az iot hub monitor-events --resource-group {resource-group-name} --hub-name {iot-hub-name} --output table
{resource-group-name}と{iot-hub-name}についてはそれぞれIoT Hubを格納したリソースグループの名前と、作成したIoT Hubリソースの名前を入力して実行してください。
コマンドを実行してメッセージ待機状態になったことを確認した上で、メッセージ送信コードを実行すると下記のようにメッセージをIoT Hubが受け取ったことを確認できます。
ひとまず今回は以上です。