Bluetooth®|基礎編

GATT-まとめ

2018.01.16

この記事のポイント

・GATTは、ATTを用いてデータを構造化する方法と、アプリケーション間でのやり取りの方法を定義する。

・Bluetooth low energyのアプリケーションは、すべてこのGATTを使用して構築されることから、GATTはBluetooth low energyのデータ転送の主軸となるものである。

・GATTプロファイルは、「サービス」、「キャラクタリスティック」、「ディスクリプタ」の3つのアトリビュートで構成されている。

・GATTプロファイルはサービスの集合体であり、サービスはキャラクタリスティックの集合体。

・GATT機能とは、GATTに基づくデータのやり取りのための手順でATTが提供する操作に基づく。

・GATT機能にはサブプロシージャがあり、データアクセス機能をユーザーに提供する。

3回にわたりGATTについて概要を説明してきましたが、すこし煩雑になった感があるので、ここでGATTについて一度まとめます。

Bluetooth low energyのプロトコルスタック

Bluetooth low energyのプロトコルスタック。

GATTとは

GATT(Generic attribute profile)-汎用アトリビュートプロファイルは、ATT(アトリビュートプロトコル)を用いてデータを構造化する方法と、アプリケーション間でのやり取りの方法を定義します。Bluetooth low energyのアプリケーションは、すべてこのGATTを使用して構築されることから、GATTはBluetooth low energyのデータ転送の主軸となるものです。

GATTのプロファイルとは

GATTには、Bluetooth SIGが公式に提供しているプロファイルと、機器メーカなどの独自提供のものがあります。Bluetooth SIGが定義しているプロファイルには、Alert Notification(アラート通知)、Blood Pressure(血圧計)、Health Thermometer(体温計)、Heart Rate(心拍数)、Location and Navigation(位置とナビ)などがあります。これらはすべて、Bluetooth low energy用に定義されたもので、Bluetooth v3以前のプロファイルとは互換性がありません。

GATTプロファイルの構造

GATTプロファイルは、「サービス」、「キャラクタリスティック」、「ディスクリプタ」の3つのアトリビュートで構成されています。GATTプロファイルは、「1つ以上のサービス」から構成されます。サービスは、「ゼロ個以上のキャラクタリスティック」から構成されます。キャラクタリスティックは、「プロパティ、バリュー、ゼロ個以上のディスクリプタ」で構成されます。

つまり、GATTのプロファイルはサービスの集合体であり、サービスは他のサービスへの参照とキャラクタリスティックの集合体です。(右図参照)。この構造は、Bluetooth LEにおいては厳密に適用され、GATTプロファイルのすべてのアトリビュートは、これら3つのいずれかに含まれます。

全体的な流れとしては、クライアントは遭遇した任意のサーバと接続した後、GATTプロファイルに基づくプロファイルで情報の取得や書き込みを行います。この情報のやり取りには、キャラクタリスティックまたはディスクリプタの値を使用します。

GATTプロファイルの構造。GATTのプロファイルはサービスの集合体であり、サービスは他のサービスへの参照とキャラクタリスティックの集合体。

GATTのサービスとは

GATTのサービスとは、機器(サーバ)の機能をあらわすものです。例えば、体温計のハードウェアの機能が、体温の測定と測定完了の通知音を発することの2つだとすれば、温度測定をするサービスと通知音を発するサービスが、それぞれ1個ずつ計2個の独立したサービスが実装されていることになります。これらのサービスは、体温計という機器の個別機能ではなく、あくまでも温度測定と通知音を鳴らすとった独立した機能です。したがって、これらのサービスは他の機器でも使用することが可能です。

GATTのキャラクタリスティックとは

GATTのキャラクタリスティックとは、その機器(サーバ)の内部状態、動作指示、外部センサ値などを読み書きするアトリビュートで、アクセス方法を定義するプロパティとディスクリプタで構成されています。先程の体温計の例では、温度測定のサービスには温度を読み出すキャラクタリスティック、通知音のサービスには通知音のオンオフ指示を書き込むキャラクタリスティックが含まれていると考えることができます。

GATTのディスクリプタとは

ディスクリプタとは、キャラクタリスティクスのバリューの変数の型や単位などの情報の追加と、そのバリューが変更された時にクライアントへの通知の有無といった動作指示に使います。キャラクタリスティックによっては、ディスクリプタを含まないものもあります。

GATT機能とは

GATT機能とは、GATTに基づくデータのやり取りのための手順で、ATTが提供する様々な操作に基づいています。機能(プロシージャ:Procedure)にはサブプロシージャ(Sub-procedure)があり、以下のような機能をユーザーに提供します。

・クライアントとサーバの設定情報の交換
・サービスとキャラクタリスティックの検索
・キャラクタリスティックの読み出し(Read)と書き込み(Write)
・キャラクタリスティックの通知(Notification)と通告(Indication)

GATTサブプロシージャを使用することで、ユーザーは簡単にアプリケーションを実現できます。
主要な機能とサブプロシージャはこちらを参照願います。