BLEプロトコルスタック
今回は、BLEのプロトコルスタックについて、深入りしない範囲で、紹介したいと思います。
プロトコルとは、通信(情報交換)を行うための手続きや取り決め事のこと。実際の通信は、複数のプロトコルで構成され、かつ階層化されていることから、プロトコルスタックという名称が使われます。
図1が BLEのプロトコルスタック概要図です。ご覧のように、複数・多層のプロトコルで構成されています。本コラムでは、アプリケーション部と接している、GAP(General Access Profile)とGATT(General Attribute Profile) および プロファイルのみにフォーカスします。
図1 BLEプロトコルスタック |
BLE以外の代表的なものとして、インターネットの標準プロトコルである、TCP/IPプロトコルスタックがあります。
TCP/IPネットワークのプロトコルスタックに馴染みのある方は、GAPをSNMP(Simple Network Management Protocol)に、GATTをTCP(Transmission Control Protocol)やUDP(User Datagram Protocol)の役割に近いものと捕らえて頂くとイメージしやすいかもしれません。
GATTプロファイル
プロファイルとGATTの関係性を理解するために、標準プロファイルのうち、マウスやキーボード利用のためのプロファイルである「HID over GATT Profile」(以下、HOGP)を例に挙げます。
図2が、HOGPの概要図です。
図2 HOGP概要 |
プロファイルとは、サービス(Service)の集合体を意味します。
HOGPでは、図2にあるように、サービスとして4つ利用していますが、他にも複数のサービスが定義されており、GATT/ATT層にて実装されています。これらを標準サービスと称します。
つまり、どの標準サービスを利用して、アプリケーションを構築するかを定めたものがプロファイルということになります。
さらに、一つのサービスは、一つもしくは複数のキャラクタリスティック(Characteristic)で構成されます※1。キャラクタリスティック定義の中にデータを保持するフィールドが定義されており(Characteristic Value)、そのフィールドをRead/Writeすることで、データのやり取りを行います。
※1 厳密には、Characteristicはオプション扱いなので、Characteristicが存在しないServiceも定義可能です。
アプリケーション側から観た場合、プロファイルで指定された標準サービスのみをサポートし、プロファイルに示された手続きに従って、標準サービス/キャラクタリスティック内のデータフィールドをRead/Writeするということになります。
プロファイルに従ってアプリケーションを記述することで、CentralデバイスとPeripheralデバイスが異なるメーカであっても、動作させることが可能となるわけです。
なお、プロファイルという概念は、クラッシックBluetoothにも存在します。ただし、似たようなプロファイル名称も存在しますが、プロトコルが異なるため別物です。区別するため、BLEのプロファイルをGATTプロファイルと称することもあります。
また、表1に、Bluetooth標準化団体が策定している標準GATTプロファイルのうち、代表的なものを示します。
表1 代表的な標準GATTプロファイル
ANP | Alert Notification Profile | 電話やメールなどの着信を通知するプロファイル |
---|---|---|
BLP | Blood Pressure Profile | 血圧計から血圧情報を伝送するためのプロファイル |
CSCP | Cycling Speed and Cadence Profile | サイクリング時のスピード/回転数等の情報を伝送するためのプロファイル |
FMP | Find Me Profile | 遠隔からアラームやバイブレーションを鳴動させ、装置の場所を知るためのプロファイル |
GLP | Glucose Profile | 血糖値の情報を伝送するためのプロファイル |
HOGP | HID over GATT Profile | マウスやキーボードなどを接続するためのプロファイル |
HTP | Health Thermometer Profile | 体温計の情報を伝送するためのプロファイル |
HRP | Heart Rate Profile | 心拍計の情報を伝送するためのプロファイル |
IPSP | Internet Protocol Support Profile | IPv6/6LoWPAN経由でインターネットに接続するプロファイル |
PASP | Phone Alert Status Profile | 電話着信時の鳴動などを他の機器から止めるためのプロファイル |
PXP | Proximity Profile | 互いの機器間の距離をモニタリングするためのプロファイル |
RSCP | Running Speed and Cadence Profile | ランニング時のスピードや歩幅などの情報を伝送するためのプロファイル |
ScPPA | Scan Parameters Profile | 装置のスキャンをするためのプロファイル |
TIP | Scan Parameters Profile | 時刻情報を通知するためのプロフィール |
その他のプロファイルや仔細については、https://www.bluetooth.com/ja-jp/specifications/adopted-specificationsページの「GATT 基盤仕様」項を参照 |
さらに、標準GATTプロファイルに加えて、独自のGATTプロファイルを定義することも可能です。その場合、発信側/受信側双方のアプリケーションを自前で作成することになります。
GAP
BLEプロトコルにおけるGAPの役割については、実は既に触れています。前回記事のトピックスの一つである”ロール”の割り振りです。ブロードキャスター型接続におけるロール(Broadcaster/Observer)、コネクション型接続におけるロール(Central/Peripheral)の割り振りは GAP層で定義されているプロトコルを介して行われます。
以上が、GAP、GATT、プロファイルの概要です。
GAPやGATTがBLEにおいて要であること、おわかりいただけたでしょうか。
Bluetooth Smartなマウスで試してみよう
GATTプロファイルを利用した一例、つまり コネクション型接続(Central/Peripheral)の例として、Bluetooth Smart(BLE方式)マウスを使ってスマートフォンを操作することにトライしてみます。この場合、スマートフォンがCentralなデバイス、マウスがPeripheralなデバイスとなることは、ご理解いただいていますよね。
以下は、Androidスマートフォンを前提にしています。
ペアリング
従来のクラッシックBluetoothなマウス同様、ペアリングを行う必要があります。
- スマートフォンにて、[設定]画面を開き、[Bluetooth]をタップ。(図3)
- マウス側にある[connect]ボタンを押下。(通常長押し)
- スマートフォン[Bluetooth]画面にて、OFF > ON を行うか、プルダウンメニュー(図4)にて[検索]をタップして、検索モードに入ります。
- マウスが認識されると、その型名が [Bluetooth]画面に表示されますので、その型名をタップし、接続を許可します。
図5のような状態になっていれば、マウスが利用可能となります。
マウス操作
図6が、設定画面での、マウス利用可能状態の様子です。マウスカーソルが表示されていますね。PCでのマウス操作の様に、カーソル移動・ボタン操作が行えます。
スマートフォンのメーカと、マウスのメーカは異なりますが、プロファイル(GATTプロファイル)に準拠することで、利用可能となるのです。
実は、多くのスマートフォンは、Bluetooth Smart Ready対応なので、クラシックBluetoothなマウスでも、マウスとのペアリング・操作は可能です。手順は、上記と同じです。ご興味にある方は、試してみてください。
ただし、iPhone/iPadは、マウス操作をそもそも許していないので、残念ながら試すことができません。もっとも、Bluetooth Smartなマウスであれば、ペアリングまでは行うことは可能なようで、手持ちのiPhoneではできました。マウスカーソルは表示されないので、意味ないことではありますが。。。
次回より、PsoC BLE Pioneer Kitを使った実践編に入ります。
著者紹介
飯田 幸孝 (IIDA Yukitaka)
- アイアイディーエー 代表 / PE-BANK 東京本社所属プロエンジニア
計測機器開発メーカ、JAVA VMプロバイダの2社を経て、2007年独立。組込機器用ファームウェア開発に多く従事。2015年より新人技術者育成にも講師として関わる。PE-BANKでは、IoT研究会を主宰。
モノづくり好きと宇宙から地球を眺めてみたいという思いが高じて、2009年より宇宙エレベータ開発に、手弁当にて参画。 制御プログラムを担当。一般社団法人宇宙エレベータ協会主催「宇宙エレベータチャレンジ2013」にて、世界最長記録1100mを達成。
宇宙エレベータ開発のご縁で静岡大学の衛星プロジェクトStars-Cに参画。2016年12月、担当ユニットが一足先に宇宙に行き、地球を眺める。