【サルでもわかるBLE入門】(2) アドバタイズとGATT通信
こんにちは。ムセンコネクト三浦です。
今回も「サルでもわかるBLE入門」と銘打ってお話していこうと思います。BLE初心者の方でも理解をしてもらえるように、できるだけわかりやすく解説していきます。
第2回の今回はBLEの『アドバタイズとGATT通信』のお話です。
わかりやすく解説する為に、BLE初心者にはあまり必要ない例外的な内容は省略して説明するようにしています。
また、あえてアバウトに書いている部分もありますのでご承知おきください。
(厳密な技術的内容を知りたいような方は別の解説書を参考にしてください。)
接続待ち(アドバタイズ )
BLEではセントラルからの接続待ちの仕組みをアドバタイズと呼びます。
アドバタイズとはブロードキャスト通信のことです。ブロードキャスト通信とは1対1の通信ではなく、不特定多数の相手にデータを送信する一方通行の通信方式という意味になります。
アドバタイズは、ペリフェラル機器が「僕はここにいるよ」ということを伝える為の無線信号です。ペリフェラル機器は接続待ちの間、定期的にアドバタイズを発信しています。
アドバタイズの発信周期は自由に設定できますが、100ms毎とか1秒毎に発信することが多いです。
このアドバタイズにはペリフェラル機器の名前や属性データを含めて発信することが出来ます。
セントラル機器はスキャンすることでアドバタイズを受信します。これにより周囲にどんなペリフェラル機器がいるかを知ることができます。
アドバタイズはブロードキャスト通信なので、周囲に複数のセントラル機器が居た場合でもそれぞれのセントラル機器がアドバタイズを受信して、ペリフェラル機器が近くにいることを認識することができます。
また、複数のペリフェラル機器がアドバタイズを発信してる場合、セントラル機器はそれぞれのアドバタイズを受信して周囲に居る複数のペリフェラル機器を認識することができます。
セントラル機器がアドバタイズ信号を受信したとき、受信した電波の強さに関する情報を得ることが出来ます。これを受信電波強度といい RSSI(アール・エス・エス・アイ)とも言います。
セントラル機器はRSSIの強さから、ペリフェラル機器との距離感を知ることができます。
RSSIが強い場合はペリフェラル機器が近くに居ることがわかりますし、逆にRSSIが弱い場合はペリフェラル機器が遠くに居ることがわかります。
RSSIは大抵の場合、負の整数で表現され、単位はdBm(デー・ビー・エム)です。
イメージを伝えるために敢えて例示します。(あくまで一例です)
ペリフェラルとの距離感 | RSSI(受信電波強度) |
---|---|
30cm | -40dBm |
1m | -50dBm |
5m | -75dBm |
15m | -90dBm |
30m | – (アドバタイズを受信できない) |
ペリフェラル側は電波が届く範囲を狭くする為に、意図的に弱い電波でアドバタイズを発信することもできます。その場合はセントラル側が受信した時のRSSIはもっと小さい値になります。
通信接続(GATT通信)
セントラル機器はスキャンをして周囲のアドバタイズを受信することで、周囲にどんなペリフェラル機器が居るかを認識します。
セントラル機器は見つけたペリフェラル機器の中から1対1の通信接続をしたい相手を選び、接続要求を送信することが出来ます。
実は、ペリフェラル機器はアドバタイズを発信した後、少しの時間、自分に対する接続要求が飛んでこないか待っています。そのタイミングで接続要求を受信するとアドバタイズをやめて1対1の接続通信に切り替えます。
この1対1の接続通信のことを、GATT(ガット)通信と呼びます。色々と呼び方があるようですが、ここでは『GATT通信』と呼んで話を進めます。
GATTはGeneric attribute profileの略です。
GATT通信ではService(サービス)とCharacteristic(キャラクタリスティック)という概念でデータのやり取りをします。
キャラクタリスティックはペリフェラル機器がセントラル機器に公開して共有するデータ構造の意味を持ちます。ペリフェラル機器とセントラル機器はこのキャラクタリスティックを介してデータのやり取りを行います。
サービスはキャラクタリスティックを機能単位で一括りにしたラベルのようなものです。
架空のBLE対応歩数計を例にしてみます。
スマートフォンのアプリ(セントラル機器)は歩数計(ペリフェラル機器)にBLE接続すると最初に歩数計がどんなサービスを持ってるかを調べます。この処理をサービスディスカバリーと呼びます。
歩数計は「自分が持っているサービスはこれだよ」とデータ構造を公開します。
スマートフォンのアプリは「歩数キャラクタリスティック」と「歩行時間キャラクタリスティック」からデータを読み出して、スマートフォンの画面に表示することになります。
キャラクタリスティックは属性が決められていて「Read」「Write」「Notify」など種類があります。セントラル機器は「Read」属性がないキャラクタリスティックの内容を読み出すことはできませんし、「Write」属性がないキャラクタリスティックの内容を書き込むことはできません。
「Write」属性の使い方のイメージとして、架空の忘れ物防止タグを例として挙げておきます。
忘れ物防止タグは「ブザー鳴動キャラクタリスティック」を持って、「Write」属性になっています。スマートフォンアプリから、「ブザー鳴動キャラクタリスティック」にデータを書き込むと、ブザーを鳴らして自分の位置を知らせます。
ペリフェラル機器は、複数のサービス、キャラクタリスティックを持つことが出来ます。仮に歩数計機能付き忘れ物防止タグのようなものがあれば、上述の架空のサービス・キャラクタリスティックの両方を持つようなこともありえます。
サービスやキャラクタリスティックにはUUID(ユー・ユー・アイ・ディ)という16バイトの一意な番号がつけられています。セントラル機器はUUIDを指定して、キャラクタリスティックのデータ内容にアクセスします。
体温計や血圧計など、標準的な製品種別については、Bluetoothの推進団体が標準的なGATT通信のプロファイルを公開しています。
Bluetoothの推進団体が用意してくれた標準的なGATTプロファイルを利用することで、別メーカーの機器であっても同じ様に利用できるようになります。(高い互換性を維持できます。)
実際は別メーカーの機器と互換性を維持する必要性がある製品はそれほど多くなく、メーカーが自身で規定する「カスタムプロファイル」を利用することが多い様です。
次回はビーコンに関して、できるだけわかりやすく解説していきます。