以前、Armadillo-640 + BT/THオプションモジュール上でpc-ble-driverを使用し、LE Coded PHYでBLE通信を行うHowtoを公開しました。
本Howtoでは、上記環境のようにpc-ble-driverを使用した際の通信可能距離を測定しましたので、その概要と結果についてまとめます。
使用したもの
- Armadillo-640 + BT/THオプションモジュール ×1セット
- Deguセンサー ×8セット
- J-Link EDU MINI ×1セット
測定項目
今回は、送信出力強度、ペリフェラルの数、通信に用いるPHYを切り替えつつ、異なる9種類の条件でセントラル-ペリフェラル間の接続が切断される距離を測定しました。
各条件の組み合わせは以下の表のとおりです。
送信出力強度(dBm) | ペリフェラルの数(台) | 通信に用いるPHY |
---|---|---|
-40 | 1 | LE 1MPHY |
LE 2MPHY | ||
LE Coded PHY | ||
+8 | LE 1MPHY | |
LE 2MPHY | ||
LE Coded PHY | ||
8 | LE 1MPHY | |
LE 2MPHY | ||
LE Coded PHY |
本測定は、ハードウェアを揃えればどなたでも同じテストを実行することができます。
以下にソフトウェアの準備の手順や仕様についてまとめていますが、測定結果のみ知りたい方は「測定結果」をご覧ください。
準備
本手順ではArmadillo-640をセントラル、Deguセンサーをペリフェラルとして接続して通信可能距離の測定を行います。
Armadillo-640とBT/THオプションモジュールのセットアップ
使用するArmadillo-640のソフトウェア構成は以下のとおりです。
ソフトウェア | ダウンロード |
---|---|
Linuxカーネル | v4.14-at35 |
DTB | v4.14-at35 |
ブートローダー | v2018.03-at9(UART3) |
ユーザーランド | v20210224(buster) |
Armadillo-640とBT/THオプションモジュールのセットアップは「Armadillo-640 + BT/THオプションモジュールでLE Coded PHY(Long-range モード)」と同様の手順で、pc-ble-driverのアプリケーションがArmadillo-640上で実行できるように設定します。
本測定で使用するpc-ble-driverのソースコードはこちらからダウンロードできます。
テスト用のプログラム(test_central)は「Armadillo-640 + BT/THオプションモジュールでLE Coded PHY(Long-range モード)」でpc-ble-driverのビルド環境を整えた上で、以下のコマンドを実行することで生成されます。
[ATDE]$ cd path/to/pc-ble-driver/at_build/ [ATDE]$ make clean && make test_central // makeのみでも可(その他のアプリケーションもビルドされる) [ATDE]$ ls test_central test_central
Deguセンサーのセットアップ
DeguセンサーはベースユニットにBT/THオプションモジュールと同様のNordic Semiconductor社製の無線SoC(System on Chip)「nRF52840」を搭載しています。 そのため、Deguセンサーに今回の距離測定用のファームウェアを書き込むことで、BLEペリフェラルとして動作させることができます。
Deguセンサーに測定用ファームウェアを書き込む
ATDE8上にDeguセンサーにファームウェアを書き込む準備を行います。以下の作業はATDE8上で行います。
本手順ではファームウェアの書き込みにSEGGER社が開発しているマイコン用デバッガである「J-Link」と、J-Linkを用いてnRF52840にファームウェアを書き込むソフトウェアである「nRF Connect」を使用します。
まず、SEGGER社の公式ダウンロードページから、J-Link Software and Documentation Pack(Linux 64-bit DEB Installer)をダウンロードします。
以下のコマンドを実行してインストールします。[version]は適宜読み替えてください。
[ATDE]$ sudo dpkg -i ./JLink_Linux_V[version]_x86_64.deb
次に、nRF Connectの公式ダウンロードページから、Linux用のnRF Connectをダウンロードします。
以下のコマンドでnRF Conncectを実行すると、ランチャーアプリケーションが起動します。[version]は適宜読み替えてください。
[ATDE]$ ./nrfconnect-[version]-x86_64.AppImage --no-sandbox
起動したランチャーアプリケーションの、「Programmer」列の右側にある「Install」をクリックし、Programmerアプリケーションのインストールを行います。
インストール後、Programmerを起動します。
次に、DeguセンサーをATDE8に接続します。
以下のようにJ-Link EDU MINIを、DeguセンサーのSWDコネクタに接続します。
J-Link EDU MINIはUSBケーブルを介してATDE8に接続します。
接続すると、Programmerアプリケーション左上の「Select device」プルダウンメニューから接続したデバイスが選べるようになっています。
デバイスを選択し、画面右側の「Read」をクリックすることで、Deguセンサー内のファームウェアなどの情報が読み取れます。
次に、Deguセンサーにファームウェアを書き込みます。
こちらからファームウェアを含むアーカイブファイルをダウンロードします。
以下のコマンドを実行して展開し、テスト用ファームウェアであるhexファイルを取得します。
[ATDE]$ tar xf LR_test_peripheral.tar.gz
[ATDE]$ ls LR_test_peripheral.hex
LR_test_peripheral.hex
Programmerアプリケーション右側の「Add HEX file」で取得したファームウェアを開き、「Erase & write」でDeguセンサーに書き込みます。
以上の手順を行ったDeguセンサーは、起動後に自動的に距離測定用のテストプログラムが実行されます。
測定用ファームウェアの仕様
以上の手順で書き込んだファームウェアは、起動時(RESET時)にSW2とSW3の値をによって、アドバタイジングに使用するPHYや出力強度を切り替えることができます。
各SWとPHY、出力強度の関係は以下のとおりです。
SW2の状態 | アドバタイジングPHY |
---|---|
押していない | LE 1M PHY |
押している | LE Coded PHY |
SW3の状態 | 出力強度 |
---|---|
押していない | -40dBm |
押している | +8dBm |
また、DeguセンサーにはLEDが4つ搭載されており、それぞれが状態を表すインジケータとして機能しています。
点灯しているLED | 状態 |
---|---|
LED1 | アドバタイジング中 |
LED2 | セントラルとの接続完了 |
LED3 | LE Coded PHY使用中(消灯時はLE 1M PHY) |
LED4 | 出力強度 +8dBm(消灯時は -40dBm) |
測定方法
弊社では本計測は、北海道札幌市中央区南16条西1丁目の幌平橋付近の河川敷にて行いました。
Armadillo-640でセントラル側のテストアプリケーションを実行する際に、オプションでscanや接続後に使用するPHYや、接続をする/しないを選択することができます。
以下は、LE 1MPHYを使用して、ペリフェラルと接続する際の実行例です。
[armadillo]# ./test_central -c --phy=1m
地図上の「Start」の地点の地上1.5mほどの高さにDeguセンサーを必要な台数だけ設置し、テスト項目に合ったモードでDeguセンサーを起動します。 その後、Armadillo上で上記コマンドを実行しDeguセンサーと接続しました。
接続後、ArmadilloとDeguセンサーを以下の写真のように、互いを向かい合わせる方向を保ちつつ、上記地図上の矢印の方向に検査者がArmadillo-640を持って歩き、接続が切れた地点と「Start」の地点間の距離を測定しました。
これらを全ての測定条件について行いました。
- 実行例
[armadillo]# ./test_central -c --phy=1m test with connection phy: 1M_PHY Serial port used: /dev/ttyACM0 Baud rate used: 1000000 Info: Successfully opened /dev/ttyACM0. Baud rate: 1000000. Flow control: none. Parity: none. Received advertisement report with device address: 0x1234567890A, RSSI: -49 CONNECTED DEVICES: 1 RSSI: -53, ch_index: 31 addr: 0x1234567890A Received service discovery response Discovered heart rate service. UUID: 0x180D, start handle: 0x000B, end handle: 0xFFFF Received characteristic discovery response, characteristics count: 1 Characteristic handle: 0x000C, UUID: 0x2A37 Received descriptor discovery response, descriptor count: 3 Descriptor handle: 0x000C, UUID: 0x2803 Descriptor handle: 0x000D, UUID: 0x2A37 Descriptor handle: 0x000E, UUID: 0x2902 RSSI: -54, ch_index: 5 addr: 0x1234567890A RSSI: -61, ch_index: 33 addr: 0x1234567890A RSSI: -60, ch_index: 33 addr: 0x1234567890A RSSI: -60, ch_index: 33 addr: 0x1234567890A RSSI: -58, ch_index: 20 addr: 0x1234567890A RSSI: -54, ch_index: 2 addr: 0x1234567890A RSSI: -60, ch_index: 32 addr: 0x1234567890A RSSI: -57, ch_index: 17 addr: 0x1234567890A RSSI: -59, ch_index: 31 addr: 0x1234567890A RSSI: -58, ch_index: 22 addr: 0x1234567890A RSSI: -54, ch_index: 5 addr: 0x1234567890A RSSI: -57, ch_index: 24 addr: 0x1234567890A RSSI: -53, ch_index: 11 addr: 0x1234567890A : (以下略)
測定結果
測定結果は以下のようになりました。
送信出力強度(dBm) | ペリフェラルの数(台) | 通信に用いるPHY | 通信可能距離(m) |
---|---|---|---|
-40 | 1 | LE 1MPHY | 0.5 |
LE 2MPHY | 0.5 | ||
LE Coded PHY | 3 | ||
+8 | LE 1MPHY | 139 | |
LE 2MPHY | 104 | ||
LE Coded PHY | 203 | ||
8 | LE 1MPHY | 106 | |
LE 2MPHY | 66 | ||
LE Coded PHY | 155 |
また、RSSIの取得回数をx軸、取得したRSSI値をy軸としたグラフは以下のとおりです。
なお、常にArmadillo-640とDeguセンサーは離れ続けているものの、その速度は一定ではありませんのでご注意ください。
右端でグラフが切れた段階で、対象のペリフェラルとの接続が切れたことを示しています。
LE 1MPHY, +8dBm, ペリフェラル1台
LE 2MPHY, +8dBm, ペリフェラル1台
LE Coded PHY, +8dBm, ペリフェラル1台
LE 1MPHY, -40dBm, ペリフェラル1台
LE 2MPHY, -40dBm, ペリフェラル1台
LE Coded PHY, -40dBm, ペリフェラル1台
LE 1MPHY, +8dBm, ペリフェラル8台
LE 2MPHY, +8dBm, ペリフェラル8台
LE Coded PHY, +8dBm, ペリフェラル8台