本HowtoではBT/THオプションモジュールのファームウェアを書き換え、LE Coded PHY(Long-range モード)による通信でのAdvertiseとConnectを行う手順について紹介します。
LE Coded PHYに対応した装置はまだ少ないので、本HowtoではセントラルとペリフェラルともにArmadilloを使っています。
使用するもの
- Armadillo-640 + BT/THオプションモジュール を2セット
- ATDE8が使用できるPC
準備
本手順では、2台のArmadillo-640をそれぞれセントラル、ペリフェラルとして接続し、ペリフェラルから1秒ごとに送られてくるデータをセントラルで受信して表示するサンプルを実行します。
ATDEのセットアップ
本手順では、開発環境としてATDE8を使用しています。 ATDE8のセットアップが完了していない場合は、 こちら を参考にセットアップを完了させてください。
ATDE起動後、以下のコマンドを実行し本手順で必要なパッケージをインストールしてください。
[ATDE]$ sudo dpkg --add-architecture armhf [ATDE]$ sudo apt update && sudo apt upgrade -y [ATDE]$ sudo apt install -y g++-arm-linux-gnueabihf libasio-dev libudev-dev libudev-dev:armhf
BT/THオプションモジュールの動作確認
次に、Armadillo-640+BT/THオプションモジュールが正しく動作することを確認します。
以下のマニュアルを参考に、BT/THオプションモジュールが正しくArmadillo-640に認識され、動作することを確認してください。
Armadillo-640 製品マニュアル Armadillo-600シリーズ BT/THオプションモジュール
pc-ble-driverのダウンロード
以下の作業はATDE上で行ってください。
Armadilloがシリアル経由でBT/THオプションモジュールを操作するために、pc-ble-driverのセットアップを行います。
以下のコマンドを実行し、LE Coded PHY対応のpc-ble-driverのソースコードをcloneしてください。
[ATDE]$ git clone https://github.com/atmark-techno/pc-ble-driver.git -b armadillo
ビルド
以下のコマンドを実行してサンプルプログラムのビルドを行います。
[ATDE ~/pc-ble-driver]$ cd at_build [ATDE ~/pc-ble-driver/at-build]$ make CROSS_COMPILE=arm-linux-gnueabihf-
ビルドが成功すると、Armadillo上で実行できるheart_rate_monitor
とheart_rate_collector
が生成されます。
[ATDE ~/pc-ble-driver/at-build]$ ls heart_rate_monitor heart_rate_collector heart_rate_collector heart_rate_monitor
ファームウェアの書き込み
次に、生成したプログラムを実行するために、BT/THオプションモジュールのファームウェアを書き換えます。
以下の手順はBT/THオプションモジュールを接続したArmadillo-640上で行ってください。
以下からファームウェアが含まれるアーカイブファイルをArmadillo-640上にダウンロードしてください。
以下のコマンドを実行してダウンロードしたアーカイブファイルを展開してください。
[armadillo]$ ls firmware.tar.gz firmeare.tar.gz [armadillo]$ tar xf firmware.tar.gz [armadillo]$ ls firmware/connectivity_1.0.0_usb_with_s140_6.1.1.hex firmware/connectivity_1.0.0_usb_with_s140_6.1.1.hex // ファームウェア本体
以下のコマンドを実行し、BT/THオプションモジュールにファームウェアを書き込むために必要なパッケージをインストールします。
[armadillo]$ sudo apt update && sudo apt upgrade -y [armadillo]$ sudo apt install -y openocd-imx
次に以下のコマンドを実行し、BT/THオプションモジュールにconnectivity_1.0.0_usb_with_s140_6.1.1.hex
を書き込みます。
[armadillo]$ cd firmware [armadillo ~/firmware]$ sudo openocd -f interface/imx6-armadillo-640-con9.cfg -c \ "transport select swd; set WORKAREASIZE 10; adapter_nsrst_delay 100; \ adapter_nsrst_assert_width 100; source [find target/nrf52.cfg]" -c \ "init; targets; halt;" -c "nrf51 mass_erase" -c "flash write_image \ connectivity_1.0.0_usb_with_s140_6.1.1.hex 0; reset halt; targets; verify_image \ connectivity_1.0.0_usb_with_s140_6.1.1.hex 0; reset run; targets; exit"
成功すると、BT/THオプションモジュールが/dev/ttyACM*
(*は数字)として認識されます。
この手順を、もう1台のArmadillo-640+BT/THオプションモジュールでも行ってください。
動作確認
以下、セントラル側のArmadillo-640を「セントラル」、ペリフェラル側のArmadillo-640を「ペリフェラル」と表記します。
ATDEから、セントラルにはheart_rate_collector
を、ペリフェラルにはheart_rate_monitor
を転送してください。
プログラムの実行のために、セントラル・ペリフェラルそれぞれで以下のコマンドを実行してください。[username]は適宜読み替えてください。
[armadillo]$ chmod +x heart_rate_* [armadillo]$ sudo usermod -a -G dialout [username] [armadillo]$ logout
ログアウト後に再度ログインしてから、セントラル、ペリフェラルそれぞれでサンプルプログラムを実行することで、LE Coded PHYでペリフェラルがアドバタイズを、セントラルがスキャンを始め、セントラルがペリフェラルを見つけると自動的に接続し、毎秒3ずつ増加していく値を送受信し続けます。
- プログラム実行例: ペリフェラル
[armadillo]$ ./heart_rate_monitor /dev/ttyACM0 Serial port used: /dev/ttyACM0 Baud rate used: 1000000 Info: Successfully opened /dev/ttyACM0. Baud rate: 1000000. Flow control: none. Parity: none. Status: 6, message: Target Reset performed Status: 7, message: Connection active Advertising data set Services initiated Characteristics initiated Started advertising Connected, connection handle 0x0001 // セントラルと接続すると出力される
- プログラム実行例: セントラル
[armadillo]$ ./heart_rate_collector /dev/ttyACM0 Baud rate used: 1000000 Info: Successfully opened /dev/ttyACM0. Baud rate: 1000000. Flow control: none. Parity: none. Status: 6, message: Target Reset performed Status: 7, message: Connection active Scan started // 以下はペリフェラルがアドバタイズし、それを見つけると出力される Received advertisement report with device address: 0xAAAAAAAAAAAA Connection established Discovering primary services Received service discovery response Discovered heart rate service. UUID: 0x180D, start handle: 0x000E, end handle: 0xFFFF Discovering characteristics Received characteristic discovery response, characteristics count: 1 Characteristic handle: 0x000F, UUID: 0x2A37 Discovering characteristic's descriptors Received descriptor discovery response, descriptor count: 3 Descriptor handle: 0x000F, UUID: 0x2803 Descriptor handle: 0x0010, UUID: 0x2A37 Descriptor handle: 0x0011, UUID: 0x2902 Press enter to toggle notifications on the HRM characteristic // Enterを押下 Setting HRM CCCD Received write response. Received heart rate measurement: 68 // 1秒ごとに値がペリフェラルから送られてくる Received heart rate measurement: 71 Received heart rate measurement: 74 Received heart rate measurement: 77 Received heart rate measurement: 80 Received heart rate measurement: 83 : (以下略)
Appendix
プログラムの編集
本手順で生成したheart_rate_monitor
とheart_rate_collector
のソースコードは、pc-ble-driver/examples/内にあります。
APIの仕様などはpc-ble-driverの公式ドキュメントを参照してください。
BT/THオプションモジュールのファームウェアをもとに戻す
BT/THオプションモジュールのファームウェアを、標準のBT用ファームウェアに戻す際は、以下のコマンドを実行してください。
[armadillo]$ sudo apt reinstall firmware-at-bt