BLE基礎 (8)
2024/08/18
DevAcademyのBluetooth Low Energy Fundamentalsをやっているところである。
Exerciseでの変更も記録を残しておくことにしました。 きっちり残すというよりは、
https://github.com/hirokuma/ncs-bt-fund
Lesson3 Bluetooth LE Connections
Exercise 2
Exercise 1 は単に接続するだけだった。 Exercise 2 は connection parameter の更新である。 それだけでなく、2M PHYもやる。
floatやdoubleを扱うにはprj.confにCONFIG_FPU=yを追加しておく- 追加していなかったらライブラリで浮動小数点演算するのかな?
- connection parameter の値が違ったのだが、機種によるものか別の要因があるのか。
- Pixel7a:
Connection parameters: interval 30.00 ms, latency 0 intervals, timeout 5000 ms - Pixel6 Pro:
Connection parameters: interval 45.00 ms, latency 0 intervals, timeout 5000 ms
- Pixel7a:
- 積極的に connection parameter update をしなくても更新が行われる? あるいは
connectedイベントのタイミングではパラメータをもらうだけで、そのあと内部でアップデートしたことでle_param_updatedイベントが起きた?- 文章を読む限りでは、接続すると connection parameter の更新要求を peripheral が投げているらしい
- ncs は peripheral の優先された(preferred)値と central から指定された値が一致しない場合、peripheral は自動的に優先する値が使われるよう自動的に更新要求を投げる
- コア仕様書
- よく出てくるのは Vol.3 “Core System Package [Host volume]” と Vol.6 “Core System Package [Low Energy Controller volume]”
- Vol.3, Part C, “9.3.9 Connection Parameter Update procedure”
- Vol 6, Part B, “5.1.1 Connection Update procedure”
- よく出てくるのは Vol.3 “Core System Package [Host volume]” と Vol.6 “Core System Package [Low Energy Controller volume]”
- Central は Peripheral と接続するときに(少なくとも初回は)誰だか分からずに接続することが多いと思う
- Peripheral は自分の役割があるので「このぐらいでお願い」という connection parameter update request を投げる
- あとは Central がどうするかで決まる
- 。。。というところじゃなかろうか。
- Central 側を作ったことがないので、connection parameter をどうしているのかよくわかってない
CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMSはデフォルトでyなのでなくてもよいらしい- Peripheral ごとに connection parameter は違ってくるので
prj.confに書く CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=yがデフォルトと同じなら vscode で薄い色になるかと思ったがそうならんかった- 何を見分けて色を付けているのか気になるが、エディタ画面の濃い薄いで判定するのはよくなさそうだ
- Peripheral ごとに connection parameter は違ってくるので
- 手順5でデバイスの preferred connection parameter を変更
- interval は 1sec、timeout は 4sec
- Pixel7a:
Connection parameters updated: interval 1000.00 ms, latency 0 intervals, timeout 4000 ms
- 2M PHY対応
prj.confにCONFIG_BT_USER_PHY_UPDATE=ybt_conn_cbにコールバック関数のメンバーが追加される
- 2M PHYにしたことで data length と MTU の上限を上げることができる
- nRF5340かそれ以外かで対応がちょっと違う
- nRF5340 の場合、
child_image/にあるhci_rpmsg.conforhci_ipc.confに設定を追加するし、prj.confにも追加する- ncs v2.6.0 から NETコアの設定は
hci_ipc.confを使うようになった。それ以前はhci_rpmsg.conf。
- ncs v2.6.0 から NETコアの設定は
- それ以外の場合は
prj.confだけでよい
- nRF5340 の場合、
- コールバック構造体のメンバー
.le_data_len_updatedはCONFIG_BT_USER_DATA_LEN_UPDATE=yで有効になるようだ .le_data_len_updatedイベントは3~5sec くらいで呼び出される? しばらくとまるときもあったが、Central 側のスマホがスリープしたためかもしれない
- nRF5340かそれ以外かで対応がちょっと違う
Bluetooth initialized
Advertising successfully started
Connected
Connection parameters: interval 30.00 ms, latency 0 intervals, timeout 5000 ms
MTU exchange successful
New MTU: 244 bytes
Data length updated. Length 251/27 bytes, time 2120/328 us
PHY updated. New PHY: 2M
Data length updated. Length 251/27 bytes, time 2120/2120 us
Data length updated. Length 251/27 bytes, time 2120/328 us
Data length updated. Length 251/27 bytes, time 2120/2120 us
Data length updated. Length 251/27 bytes, time 2120/328 us
Data length updated. Length 251/27 bytes, time 2120/2120 us
Data length updated. Length 251/27 bytes, time 2120/328 us
Data length updated. Length 251/27 bytes, time 2120/2120 us
Data length updated. Length 251/27 bytes, time 2120/328 us
Data length updated. Length 251/27 bytes, time 2120/2120 us
Data length updated. Length 251/27 bytes, time 2120/328 us
Data length updated. Length 251/27 bytes, time 2120/2120 us
Connection parameters updated: interval 1000.00 ms, latency 0 intervals, timeout 4000 ms
Data length updated. Length 251/27 bytes, time 2120/328 us
Data length updated. Length 251/27 bytes, time 2120/2120 us
....
board/に<BOARD_NAME>.confがあるとprj.confは参照せずにそちらを見るそうだ- solutionの方にあった
ようやく Lesson 3 が終わったが、なんか理解できてない気がする。
実際に使用するシーンが思いつかないとダメなのか。
writer: hiro99ma