Contenu connexe
Plus de Hirokuma Ueno (20)
Nordic nRF51822でBLEしてみました 2
- 1. Nordic nRF51822 で BLE してみました 2
● 前回は、サンプルを動たところまで。
●
今回は Bluetooth の仕様書も見ながらやっていこう。
●
現在 (2015/05/31) の最新は、コアバージョン 4.2
● https://www.bluetooth.org/ja-jp/specification/adopted-specifications
●
残念ながら、英語版のみです。
- 4. 役割 (GAP)
●
GAP というものがある
●
ここでの Role は、 BLE として果たす役目みたいなイメージ
●
Broadcaster
●
SoftDevice のS110/S130
●
いわゆる「ビーコン専用端末」がこれになる。 Advertising するだけ。
●
Observer
●
SoftDevice のS120/S130
●
無線を受信するだけで、送信しない。
●
Peripheral
● SoftDevice のS110/S130
●
Broadcaster の機能に、接続する機能がある。 Profile やService を持つなら、これ。
●
Central
●
SoftDevice のS120/S130
●
Peripheral の接続先がCentral になる。
- 5. 役割 (L2CAP)
● BLE の接続管理というところか
●
接続してしまえば、 GATT とかの話になる
●
接続前は、 GAP とか L2CAP とかの話になる
●
ここでの Role は 2 つ
● Slave
● GAP の "Broadcaster" や "Peripheral" にあたる
● 無線を聞く方
● Master
● GAP の "Central" にあたる
●
無線を出し始める方
- 7. 接続まで - Master
● Master が接続するまでは、こういう経路になる
● Scanning で Peripheral を探す
●
見つかったら Initiating で
接続するかどうか試す
● OK なら接続する
- 8. 接続まで - Slave
● Slave が接続するまでは、こういう経路になる
● Advertising して、 Master に
見つけてもらう
● Master から接続要求が来て、
OK なら接続する
- 9. Advertising PDU(Packet Data Unit)
●
Advertising は 4 タイプある
● Core_V4.2 - Vol.6 - Part B – 2.3.1 Advertising PDUs
● ADV_IND : 「接続可能」「相手不特定」「 SCAN_REQ 可能」
●
接続する場合はこれを使う
● ADV_DIRECT_IND : 「接続可能」「相手特定」「 SCAN_REQ 不可」
●
どこかで推奨しないという記述を見た気がするのだが、見つけられなかった。。
● ADV_NONCONN_IND : 「接続不可」「相手不特定」「 SCAN_REQ 不可」
●
ビーコン端末などは、これだろう。
● ADV_SCAN_IND : 「接続不可」「相手不特定」「 SCAN_REQ 可能」
●
SCAN_REQ コマンドを受信すると、 SCAN_RSP 応答で情報を返す。
●
使い道がわからない・・・。
●
データ部として 31byte まで使える。
● ADV_DIRECT_IND は違うが、普通使わなさそうなので省略
- 11. AdvData
●
AdvData は、 [Length][AD Type][Data] 、という構造
●
AD Type はネットにしかなさそうだ
● https://www.bluetooth.org/en-us/specification/assigned-numbers/generic-access-profile
●
上のデータは、 0x01 、つまり「 Flags 」というデータタイプ
●
参照先: Core Specification Supplement, Part A, section 1.3
●
iBeacon は 0xFF(Manufacturer Specific) にして、あとは好きに使っている
●
データタイプの説明は「コア仕様補完 (CSS) 」にある
●
現在 (2015/05/31) の最新は、 v5
●
0x05 の意味
●
bit0 : LE Limited Discoverable Mode
●
bit 2 : BR/EDR Not Supported
- 12. S110 で Advertising
● ble_advdata_set() で AdvData を設定する
● ble_advdata_t 構造体
● sd_ble_gap_adv_start() を呼ぶと Advertising を開始する
● ble_gap_adv_params_t 構造体
●
Advertising PDU の種類 (xxx_IND)
●
送信間隔
●
タイムアウト時間
● Advertising だけしたいなら、 ble_app_beacon サンプルがよい