Bluetooth mesh 技術
プロビジョニングとコンフィグレーション
Provisioning & Configuration
nRF52
プロビジョニング
プロビジョニングは、Bluetooth meshネットワークの構築に必要な機能です。
BLEでいうところのペアリング的な機能になります。
プロビジョニングには、mashデバイスの他にプロビジョナーが必要となります。(下図 全体構成 参照)
手順は、大きく2つあり、
- ① meshデバイスは、プロビジョニンされていない時に自分の
- 固有ID(UUID)のアドバタイズパケット
を送信し続けます。
- ② プロビジョナーは、meshデバイスのアドバタイズパケットを受けると、そのmeshデバイスに対して
- ネットワークKey
- ユニキャストアドレス
を送り、ネットワークへ接続への許可をします。
となります。
コンフィグレーション
コンフィグレーションは、プロビジョニングされたmeshデバイスに対して設定を行います。
設定には、大きく2つあり
- アプリーケーションKey
- グループ
となります。
全体構成
構成は、
- ① meshデバイス
- ② プロビジョナー
の他に、パソコンで動作する
- ③ Pythonスクリプト
- ④ JSONファイル
- ⑤ ログファイル
となります。
なお、
③ Pythonスクリプトは、USB接続されたプロビジョナーのコントロールに
④ JSONファイルは、プロビジョニングやコンフィグレーションの情報取得に
⑤ ログファイルは、プロビジョナーとのやり取りの記録に
使用します。
② プロビジョナー
プロビジョナーは、Nordic提供の「Serial Libraries」を使用します。
Serial Librariesは、
- Device commands(ビーコン送受信)
- Configuration commands(アドバタイズパケット設定、送信電力設定、UUID設定)
- Provisioning commands(プロビジョニング、ネットワークKey設定)
- Bluetooth Mesh commands(メッシュパケット、アプリケーションKey設定)
- Direct Firmware Upgrade commands(DFU)
- Access Layer commands(エレメント、モデル設定)
などの機能があります。
この中から、主にProvisioning commandsとBluetooth Mesh commandsを利用して、プロビジョニングとコンフィグレーションを行っていきます
③ Pythonスクリプト
Pythonスクリプトは、Nordic提供の「nteractive_pyaci.py」を使用します。
nteractive_pyaci.pyは、ipython上でPythonコードを実行させ、② プロビジョナーで動作しているserialライブラリーと連携してプロビジョニングやコンフィグレーションを行います。
手順として、
プロビジョニングは、
- ④ JSONファイルから設定の読み込み、オブジェクトのインスタンス
- ② プロビジョナーからUUID読み込み、プロビジョナーへネットワークKeyとアプリケーションKeyの設定
- 未プロビジョニングの ① meshデバイスのスキャン(アドバタイズパケットのスキャン)
- スキャンに成功した① meshデバイスに対してネットワークKeyとユニキャストアドレス等の書込み
- プロビジョニングに成功したmeshデバイスの情報をJSONファイルへ書込み
コンフィグレーションは、
- ④ JSONファイルから① meshデバイスの情報を読み込み
- ① meshデバイスへアプリケーションKeyの書込み
- ① meshデバイスへグループの書込み
となります。
④ JSONファイル
Pythonスクリプトは、Nordic提供の「databese.json」を使用します。
初期状態は、
- netKeys(ネットワークKey)
- appKeys(アプリケーションKey)
- groups(グループアドレス)
- allocatedGroupRange(グループアドレスの最小最大)
- allocatedUnicastRange(ユニキャストアドレスの最小最大)
- nodes(個々デバイスの情報、最初は空っぽ)
などが記述されています。
そこから、1個づつデバイスのプロビジョニングやコンフィグレーションを行うと、
nodesの中に
- UUID(デバイスの個別ID)
- elements(エレメント、モデルの集合)
- models(モデル、機能そのもの)
- netKeys(ネットワークKey)
- appKeys(アプリケーションKey)
- unicastAddress(ユニキャストアドレス)
- subscribe(グループ、メッセージ受信)
- publish(グループ、メッセージ送信)
が追記されていきます。
追加で1個デバイスのプロビジョニングを行うと、nodesの中に新しい記述が増えていきます。
このJSONファイルを見ることによって、meshネットワーク全体のデバイスの構成がわかるものとなります。
ログファイル
ログファイルは、ログファイルとの仮想COMポート(USB)のログが記録されています。
動作がおかしいかな?と思ったときに詳細を確認することができます。
また、
Pythonスクリプトのコマンド引数に使用する、address_handleやdevkey_handleなどが記録されています。