【サルでもわかるBLE入門】(12)コネクションパラメータ

こんにちは。ムセンコネクト三浦です。
今回も「サルでもわかるBLE入門」と銘打ってお話していこうと思います。Bluetooth® LE(BLE)初心者の方でも理解をしてもらえるように、できるだけわかりやすく解説していきます。
第12回目は『コネクションパラメータ』についてのお話です。
コネクションパラメータは、接続されたセントラルデバイスとペリフェラルデバイス間のデータ交換の頻度、タイミング、そして接続維持の挙動を決定する重要な設定値です。
Bluetooth LE通信の電力消費、データスループット、レイテンシ(通信遅延)および接続の安定性を考える上で、理解しておく必要があります。
わかりやすく解説する為に、Bluetooth® LE(BLE)初心者にはあまり必要ない例外的な内容は省略して説明するようにしています。あえてアバウトに書いている部分もありますのでご承知おきください。
(厳密な技術的内容を知りたいような方は別の解説書を参考にしてください。)
アドバタイズインターバル
コネクションパラメータの説明の前に、まずはアドバタイズインターバルの話をしたいと思います。
Bluetooth LEには「接続待ち(アドバタイズ)」の状態と、「通信接続(GATT通信)」状態の2つがあります。

ペリフェラル側が「接続待ち(アドバタイズ)」状態のときは、アドバタイズの発信頻度を変えることで、パフォーマンスと消費電力を調整することができます。
この時、ペリフェラルはアドバタイズの電波を発信する側、セントラルはアドバタイズの電波を受信する(スキャンする)側です。
ペリフェラル側がアドバタイズを発信する周期(時間間隔)のことをアドバタイズインターバル(Advertising Interval)と呼びます。
アドバタイズインターバルが短い程、アドバタイズパケットを頻繁に送ることになります。

ペリフェラル側がアドバタイズを頻繁に送れば、セントラル側が受信しやすくなります。
特に、アドバタイズパケットを受信したときの受信電波強度を利用して、ペリフェラルとセントラルの距離感を確認するような位置測位系のシステムではアドバタイズインターバルを短く設定する必要があります。
アドバタイズパケットは、セントラル側で必ず受信できるというものではないので、実際に利用する環境の距離や電波状況を考慮してアドバタイズインターバルを決めると良いでしょう。
一方、アドバタイズインターバルが短いと、トレードオフとして電力消費が大きくなってしまいます。
具体的にイメージするために架空のペリフェラルデバイスの消費電流を例示します。
アドバタイズインターバル | 消費電流(例) |
---|---|
20ms(1秒間に50回発信) | 500uA |
100ms(1秒間に約10回発信) | 120uA |
1秒(1秒間に約1回発信) | 15uA |
10秒(10秒間に約1回発信) | 5uA |
アドバタイズの頻度によって大きく消費電流が変わるのがわかると思います。
もう一つ、アドバタイズの頻度はBluetooth LE接続が確立するまでの時間に影響します。
「接続待ち(アドバタイズ)」の状態から「通信接続(GATT通信)」になるためには、セントラル側はアドバタイズパケットを受信したときに、すかさず接続要求を発行する必要があります。
※アプリケーション層の処理としては「この相手と接続したい」という接続処理を指示するAPIをコールするだけですが、内部処理としては次にアドバタイズを受信したら自動的に接続要求パケットを返すようになっています。

消費電力低減のためにアドバタイズインターバルを長く設定した場合、Bluetooth LE接続が確立するまでの時間が長くなってしまうので注意が必要です。
図の中で赤く印したところがペリフェラル、セントラルがそれぞれ「Bluetooth LEの無線機能」をONにしているタイミングです。
消費電流を削減する為には赤く印した処理を少なくする(頻度を下げる)工夫をします。それがBluetooth LE通信の醍醐味でもあります。
コネクションインターバル
ペリフェラルとセントラルが1対1で接続通信をしている「通信接続(GATT通信)」状態のときは、どの様にしてパフォーマンスと消費電流のバランスを取っているのでしょうか?
まずは「コネクションインターバル(Connection Interval)」と「コネクションイベント(Connection Event)」について説明していきます。
ペリフェラルとセントラルがBluetooth LE接続した後、ペリフェラルとセントラルは互いにパラメータ交換をして調整し、「お互いにデータのやり取りをするタイミング」を決定します。この「お互いにやり取りするタイミング」のことをコネクションイベントと呼び、その周期をコネクションインターバルといいます。

ペリフェラルもセントラルも、コネクションイベントの時だけ、「Bluetooth LEの無線機能」をONにして、データのやり取りを行います。
コネクションインターバルが短い程コネクションイベントが頻繁になります。
データを送受信できる機会が多くなりますが、その分消費電流が大きくなります。
コネクションイベントのタイミングで送るデータがないときには、空パケット(Empty Packet)を送って接続を維持します。

こちらも具体的にイメージするために架空のペリフェラルデバイスの消費電流を例示します。
コネクションインターバル | 消費電流(例) |
---|---|
7.5ms(1秒間に約133回のコネクションイベント) | 1100uA |
40ms(1秒間に約32回のコネクションイベント) | 200uA |
100ms(1秒間に約3回のコネクションイベント) | 80uA |
1秒(1秒間に約1回のコネクションイベント) | 15uA |
コネクションイベントの頻度によって大きく消費電流が変わるのがわかると思います。
スレーブレイテンシ
スレーブレイテンシ(Slave Latency)とは、ペリフェラル側がコネクションイベントをスキップする回数の上限です。
ペリフェラル側は、送信するデータが無い場合、スレーブレイテンシで規定された回数までコネクションイベントをスキップして、自身の電力消費を削減することができます。
ただし、スキップする回数が増えるほどセントラルからデータを受信するまでの遅延が大きくなってしまいます。

セントラル側はペリフェラル側のスレーブレイテンシの設定を気にせず、コネクションインターバル毎にペリフェラル側からデータがないか受信処理を続けます。
そのため、ペリフェラル側は自分から送信したいデータがあるときにはスキップせずに、コネクションイベントのタイミングでBluetooth LEの処理を動作させてデータ送信をすることが出来ます。
そのような仕組みになっているので、スレーブレイテンシを設定したときには、下りのデータ(セントラルからペリフェラルへ送信するデータ)は遅延しますが、上りのデータ(ペリフェラルからセントラルへ送信するデータ)は遅延せずに送信することができます。

スーパービジョンタイムアウト
スーパービジョンタイムアウト(Supervision Timeout)はBluetooth LE接続中に相手からのデータパケットの受信が無くなったときに、切断されたと判断するまでの最大時間です。
接続相手のデバイスが予期せずシャットダウンしたり、バッテリー切れになったり、無線通信範囲外になったりした場合に、接続が切れたことを検出するのに使われます。
スーパービジョンタイムアウトが短すぎると意図しない切断が発生しやすくなり、長すぎると異常時の切断の検出が遅れ、ユーザー体験が悪くなる可能性があります。

Apple社のアクセサリデザインガイドライン
Apple社は、iOSデバイスと接続するアクセサリ機器を開発する開発者向けに、アクセサリデザインガイドラインを提供しています。
アクセサリデザインガイドライン「Accessory Design Guidelines for Apple Devices」は以下のサイトからダウンロード出来ます。

かなりページ数があるのですが、「Bluetooth Low Energy(BLE)」の章を確認すると、アドバタイジングインターバルの推奨設定値や、コネクションパラメータの推奨設定値が記載されています。
もし、iOSデバイスとの相性を気にするペリフェラル機器を開発する場合は、一度確認しておくと良いと思います。
今回はコネクションパラメータについてお話しました。
次回もBluetooth LE(BLE)の技術要素について深堀りしてお話したいと思います。