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=y
bt_conn_cb
にコールバック関数のメンバーが追加される
- 2M PHYにしたことで data length と MTU の上限を上げることができる
- nRF5340かそれ以外かで対応がちょっと違う
- nRF5340 の場合、
child_image/
にあるhci_rpmsg.conf
orhci_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 が終わったが、なんか理解できてない気がする。
実際に使用するシーンが思いつかないとダメなのか。