Controller層
周波数チャンネル
BLEは2.4GHz周波数帯を利用します。この周波数帯はISM(Industry Science Medical)バンドと呼ばれ、産業・科学・医療などあらゆる用途で利用されているために、電波干渉が非常に起きやすくなっています。Wi-Fiもこの周波数帯です。
BLEは2.4GHz~2.4835GHzの80MHzにわたる周波数帯を2MHz幅の40チャンネルに分け、毎秒1600回のチャンネル切り替えを行いながら通信します。これを周波数ホッピング方式といいます。 これにより、特定のチャンネルで通信しにくい状況でも、一定時間後にチャンネルが切り替わればデータ通信が継続できます。この特徴により、BLEは他の規格よりも比較的干渉に強いとされています。
40チャンネルのうち37、38、39チャンネルはAdvertising Channel と呼ばれ、デバイスの発見および接続開始のために用いられます。それ以外はData Channnel と呼ばれ、接続後のデータ通信に用いられます。Advertising Channelはいち早くデバイスを発見できるように、Wi-Fiでよく用いられる周波数(1、6、11チャンネル)を避けるように配置されています。
ネットワークの形成
BLEでは、デバイス同士はスター型のネットワークを形成します。中心ノードはCentral、端末ノードはPeripheralと呼ばれます。例えば、スマートフォンが複数の周辺機器に接続する場合、スマートフォンがCentralで周辺機器がPeripheralです。
Bluetoothの仕様上では、Centralが同時に接続できるPeripheralの数は規格上231(約21億)となっています。[1] 。
一般的に、Centralはスマートフォンやタブレットなどのデバイスに実装されることが多いため、充電する機会は頻繁にあると考えられます。一方、Peripheralはセンサを搭載した機器を固定された位置に取り付けることがほとんどなので、あまり頻繁に電池交換することができません。電力消費はPeripheralがシビアだと考えるのが良いでしょう。
スマートフォンが周辺機器に接続する場合、周辺機器(Peripheral)はスマートフォン(Central)に存在を認知させる必要があります。このプロセスをAdvertisingと呼び、ここでのスマートフォンと周辺機器の役割をそれぞれScannerとAdvertiserといいます。
注
[1]: 実際にはBLEを実装するOSなどの制約を受けます。例えば、iOSでは最大10ノードまでです。
デバイス発見から接続までのプロセス
デバイス発見から接続までの状態遷移を次図に示します。CentralはStandbyからScanningとInitiatingを経てConnection(Master)に、PeripheralはStandbyからAdvertisingを経てConnection(Slave) になります。
AdvertisingとScanning
Advertiserは、Advertising Channelを使ってAdvertisingパケットを定期的に周囲に送信します。 Advertisingには37、38、39のチャンネルが全て使われます。 一方、Scannerは、Advertising Channelへのパケット受信を一定周期で調べ、両者のタイミングが合うとScannerはAdvertiserを発見することができます。
AdvertisingとScanningの頻度が高いほど早く発見できますが、その分だけ電力消費は大きくなります。Peripheralにとって電波の送受信は電力消費の中で大きなウェイトを占めるため、実質的にこの頻度が電池の寿命を決めることになります。開発者はアプリケーションの要求に応じて適切にこの値を設定する必要があります。
主要なパラメータは以下のとおりです。
パラメータ | 説明 | 設定範囲 |
---|---|---|
advInterval | AdvertiserがAdvertisingパケットを送信する周期 | 20ミリ秒 ~ 10.24秒 |
scanInterval | ScannerがAdvertisingパケットを受信する周期 | 20ミリ秒 ~ 10.24秒 |
scanWindow | Scannerが1回のパケット受信にかける時間 | 20ミリ秒 ~ 10.24秒 |
Advertisingパケットの種類と通信フロー
スキャンには「Active Scan」と「Passive Scan」があります。Active Scanの場合はAdvertisingパケットを受け取った後、追加情報を取得するためにAdvertiserにリクエストを送ることができます。
次図はAdvertising開始から終了までの通信フローです。
図中の赤文字はAdvertisingパケットの種類です。 Advertising中にやり取りされるパケットにはいくつかの種類があります。例えば、以前接続したことのあるデバイスにはADV_INDの代わりにADV_DIRECT_INDが用いられ、スキャンを省略します。また、位置ビーコンのように接続を確立しなくてもAdvertisingのみで情報発信できる場合には、ADV_NONCONN_INDやADV_SCAN_INDが使われます。
種類 | スキャン可能 | 接続可能 |
---|---|---|
ADV_IND | ○ | ○ |
ADV_DIRECT_IND | × | ○ |
ADV_NONCONN_IND | × | × |
ADV_SCAN_IND | ○ | × |
Advertisingパケットの中身
Advertisingパケットの中でやり取りされるデータには「Advertiserのアドレス(AdvA)」と「Advertising Data」があります。
AdvAはPublic Device AddressとRandom Device Addressのどちらかです。 Public Device Addressは、Bluetooth SIGが企業ごとに発行したIDと、企業が製品ごとに割り振るIDを組み合わせた一意の値です。Random Device Addressはプライバシーを守るためにランダムで生成される値です。
Advertising Dataには次表のようなものがあります。
種類 | 説明 |
---|---|
Flags | Bluetoothの規格(LE/BR/EDR)に関する情報 |
Service UUIDs | デバイスが提供する機能(Service)のID。詳しくは後述 |
Local Name | デバイス名 |
Tx Power Level | 送信電力。値の範囲は-127 ~ +127dBm。この値と受信信号強度(RSSI)の差から伝播損失を求め、距離の推定に使うことができる |