Seeeduino->IoT PnP Bridge (RasPi4)->Azure IoT Central、構築手順

先月末から、IoT PnP Bridgeをゴニョゴニョとやっていたわけですが、やっとIoT PnP BridgeのUARTを動かす方法が確立できたので書いておきます。

やること

Seeeduino(Arduino Uno互換機)からUART出力する(疑似温度データ)を、IoT PnP Bridgeを動かしたRaspberry Pi 4を経由して、Azure IoT Centralへ送り、グラフ表示します。

構築手順

Azure IoT Central

Azure Iot Centralアプリケーションを作成

Azure IoT Centralアプリケーションを作成します。
PnP対応を使わなければいけませんので、Application templateは必ずPreview applicationにしてください。

f:id:matsujirushix:20191214165642p:plain

バイステンプレートを作成

Device templateを作成します。
Template typeはIoT deviceとして、Create a capability modelはCustomを選択してください。

f:id:matsujirushix:20191214170123p:plain

Interfaceを追加します。
Add interfaceをクリックして、Customを選択、Add capabilityをクリックして、tempratureという名前を入力して、Saveをクリックしてください。

f:id:matsujirushix:20191214170423p:plain

InterfaceのInstance Nameを書き換えます。
左ツリー上のInterfaceをクリックして、Edit itentityをクリックしてください。すると、右側にInterfaceのIdentityが表示されます。
Instance Nameをserialに書き換えて、Saveをクリックしてください。

f:id:matsujirushix:20191214170807p:plain

この情報がどこにも書かれていなかったので、動くまでに大変苦労した。

Viewを追加します。
左ツリー上のViewsをクリックして、Generate default viewsをクリック、Generate default dashboard view(s)をクリックしてください。
ViewsにOverviewとAboutが追加されて、Overviewにtemperatureのグラフが追加されていれば正常です。

f:id:matsujirushix:20191214171057p:plain

最後に、画面上部のPublishをクリックしてください。

Publishすると、Device templateの書き換えができなくなります。

Device template(DCM)とInterfaceのidが後に必要なので、メモ帳などにコピーしておいてください。

f:id:matsujirushix:20191214172038p:plain

f:id:matsujirushix:20191214172129p:plain

バイスを作成

いま作成したDevice templateに、Deviceを追加します。

f:id:matsujirushix:20191214172339p:plain

Deviceの接続情報をメモ帳などにコピーしておいてください。

f:id:matsujirushix:20191214172518p:plain

Seeeduino

AzurePnPBridgePreviewをクローンして、Arduino IDEArduinoExample.inoを開いてください。
47行目にある文字列を、Interfaceのidに書き換えて、Seeeduinoへ書き込んでください。

f:id:matsujirushix:20191214175506p:plain

Raspberry Pi

pnpbridgeをビルド

こちらの手順に沿って、pnpbridgeをビルドしてください。
ただし!
現時点、Seeeduinoのリセットタイミングとpnpbridgeのタイミングが合わずフリーズする現象があるので、訂正したコードをクローンしてビルドしてください。

git clone https://github.com/matsujirushi/AzurePnPBridgePreview -b dev-takashi

matsujirushi.hatenablog.jp

config.jsonを編集

config.json(~/AzurePnPBridgePreview/pnpbridge/cmake/pnpbridge_linux/src/pnpbridge/samples/console/config.json)を編集します。

項目
connection_type dps
device_capability_model_uri (メモのDevice template(DCM)のid)
symmetric_key (メモのSAS Primary key)
global_prov_uri global.azure-devices-provisioning.net
id_scope (メモのID scope)
device_id (メモのDevice ID)
trace_on (動作状況を表示したいときはtrueに変更)

f:id:matsujirushix:20191214181046p:plain

実行!

SeeeduinoをUSBでRaspberry Piに接続しておき、pnpbridge_bin(~/AzurePnPBridgePreview/pnpbridge/cmake/pnpbridge_linux/src/pnpbridge/samples/console/pnpbridge_bin)を実行すると、Seeeduinoから送られてくる疑似温度データがAzure IoT Centralに表示されます。

f:id:matsujirushix:20191214181514p:plain

まとめ

  • IoT PnP Bridgeを使えば、(Azure IoT SDKを使えない)小さなデバイスをAzure IoT Centralへ接続することができる。
  • PnPなのにAzure IoT Centralの設定が結構面倒。(DCM/Interfaceをリポジトリに公開しておく、Group SASを使う、などすれば、も利用者は手間がかからなくなるはず。)