IoT PnP Bridge、とりあえず動いたのでメモ。
動かした環境
- ハードはRaspberry Pi 4B
- Raspbianは2019-09-26-raspbian-buster-lite.img
- シリアルデバイスはSeeeduino(USB接続)
IoT PnP Bridgeのコンパイル
これ。
ただ、IoT PnP Bridgeが/dev/ttyACM0をマウントしたときにSeeeduinoがリセットしてしまい、通信タイミングの問題でフリーズしてしまうので、IoT PnP BridgeにSleepの注入が必要でした。
接続先Azure
IoT PnP BridgeはIoT HubとIoT Hub DPSに対応しているようなので、Azure IoT Centralで試していましたが、、、
接続してデータを送ることはできたものの、IoT Central側でデータを表示することはできなかった。(Telemetryを表示しようとすると、ずっとWaiting表示)
想像ですが、IoT Centralがデバイスから動的に登録されたDCM/Interfaceの表示に対応していないのでは?という気がします。
なので、接続先はAzure IoT Hubで。
現在は、IoT Plug and Playに対応したIoT Hubは、リージョンがどっかとどっかに限定されているのでご注意を。(docsに書いてあったはずなので自分で調べてください)→ここ
Azure IoT Hub設定
IoT Plug and Playに対応したIoT Hubを作って、そこにデバイスを作っておきます。(X.509ではなく)SASでOK。
DCM/Interfaceの設定は、一切不要。
IoT PnP Bridgeの設定
config.jsonに、IoT Hubへのデバイス接続情報と、Bridgeから登録するDCM名を記入します。★印の箇所。
"pnp_bridge_parameters": { "_comment_connection_type": "dps (symmetric key support only)/connectionstring", "connection_parameters": { "connection_type" : "connection_string",←★ "connection_string" : "HostName=matsujirushipnp.azure-devices.net;DeviceId=test;SharedAccessKey=BEQgZcTXfrMScPfHWalitacchS5o=",←★ "device_capability_model_uri": "urn:matsujirushi:test:1",←★ "auth_parameters" : { "auth_type" : "symmetric_key", "symmetric_key" : "BEQgZcTXfrMScPfHWalitacchS5o="←★ },
Seeeduinoの設定
ArduinoExample.inoのSerialPnP_NewInterfaceの引数を、それっぽいInterface名にして、Seeeduinoに書き込みします。
DCM/Interfaceって、どこかに事前登録しないの?
不要みたい。
いざ実行
SeeeduinoをラズパイにUSB接続して、pnpbridge_binを実行します。
pnpbridge_binには、正常にテレメトリ送信しているっぽい表示が出ます。
IoT HubをAzure IoT Explorerで見ると、それっぽいテレメトリが飛んできています。
良く見ると、DIGITAL TWINのところに、Seeeduinoに書き込んだInterface名でInterfaceが追加されています。
が!
クリックしても、定義が表示されないです。
Azure IoT Explorerが、どこかリポジトリに登録されている前提の作りなんですかね?
動いたけれども
UARTでIoT Plug and PlayのInterface登録、Telemetry送信ができていることが確認できました。
これは胸アツ!!
一方で、Azure IoT Explorerで見れないとか、IoT Centralで見れないとかありました。
うーむ、IoT Plug and Playむずかしい。