SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーション開発技術の新潮流スタディーズ

IoT技術の代表「BLE:Bluetooth Low Energy」の動作原理を理解してみよう【後編】

Webアプリケーション開発技術の新潮流スタディーズ 第6回

Host層(続き)

Generic Attribute Profile(GATT)

Generic Attribute Profile(GATT) は、特定のアプリケーションが提供する機能の集合体で、ATTの上で動作します。 BLEアプリケーションは全てこのGATTを使用して構築されます。GATTはアプリケーションの振る舞いをProfile、Service、Characteristicという構造を用いて定義します。

Profile

Bluetoothアプリケーションの提供する機能の集合はProfileと呼ばれます。 Profileは異なるメーカの製品間で命令をやりとりするためのインターフェイスとして働きます。

GATT Profileには、Bluetooth SIGが公式に提供しているものと、ユーザが独自に提供しているものがあります。 Bluetooth SIGの定義しているProfileには次のようなものがあります(参照)。

  • Alert Notification (アラートの通知)
  • Blood Pressure (血圧計)
  • Health Thermometer (体温計)
  • Heart Rate (心拍数)
  • Location and Navigation (血圧計)

ここで挙げているProfileはすべてBluetooth LE用に定義されたもので、特に「GATT Profile」と呼ばれます。 GATT Profileは、クラシックBluetooth用に定義されたProfileと互換性がないことに注意が必要です。 例えば、ヘッドフォン、プリンタ、マウスやキーボードなどのProfileの多くはクラシックBluetooth用です。

ServiceとCharacteristic

Profileは複数のServiceからなり、それぞれのServiceは複数のCharacteristicを持ちます。 それぞれ、ちょうどオブジェクト指向でいうオブジェクトとメソッドに相当すると考えると分かりやすいと思います。

Serviceは、機器の単一の機能を指します。例えば、照明器具の場合、消費電力の計測、明るさの検出、明るさの制御は、個別に3つのServiceとして実装されます。

Characteristicは、各ServiceのプロパティやServiceに対する命令を示します。例えば、エアコンの気温を検出するサービスなら、センサの値などが該当します。

ServiceやCharacteristicsもまたProfileと同じようにBluetooth SIGによって定義されたものがあります(Service一覧Characteristics一覧)。

Profileの階層構造

Profileやそれに含まれるServiceやCharacteristicの階層構造を次の図に示します。

ServiceやCharacteristicの階層構造
ServiceやCharacteristicの階層構造

Serviceには、外部に公開するためのPrimary Serviceと、内部で参照するためのSecondary Serviceがあります。 また、Serviceは別のServiceを継承して新たなCharacteristicを付与できます。 上図のIncludedは、継承元のServiceを示しています。

Characteristicは、各々が次のプロパティを持っています。 それぞれがフラグとして独立してON/OFFを切り替えられることに注意が必要です。 BroadcastをONに設定しておくと、Advertising時の情報に含めることができます。

プロパティ 説明
Broadcast Advertisingでのブロードキャスト
Read 読み出し可能
Write Without Response レスポンスなしの書き込み
Write Responseありでの書き込み
Notify Notification
Indicate Indication
Authenticated Signed Writes Signature付きの書き込み
Extended Properties プロパティの拡張定義

ATTによるServiceの定義(例)

ここで、GATTが下位のプロトコルにATTを使用していることを例で確認してみましょう。

ServiceおよびCharacteristicは、Handleの連続する複数のAttributeで定義します。 例えば、Primary Serviceの宣言を表すAttribute Typeは0x2800、Characteristicの宣言を表すAttribute Typeは0x2803などと決まっています。次の図は、2つのServiceとそれに付随するCharacteristicを定義した例です。

2つのServiceとそれに付随するCharacteristicを定義した例
2つのServiceとそれに付随するCharacteristicを定義した例

CharacteristicとAttributeの関係は1対1ではありません。Characteristicの宣言と値はそれぞれ別のAttributeで表されており、ちょうどメモリのアドレスと同じようにして参照先に値が書かれています。

次のページ
Application層

この記事は参考になりましたか?

Webアプリケーション開発技術の新潮流スタディーズ連載記事一覧

もっと読む

この記事の著者

鳥居 陽介(株式会社ワークスアプリケーションズ)(トリイ ヨウスケ)

株式会社ワークスアプリケーションズ所属。イケてるアプリケーションを死ぬほど楽に作るために研究を続ける日々。社内での立ち位置は「フロントエンドのナウい人」。最近エバンジェリストという肩書きが付いた。趣味は作曲とスノーボード。 Blog: http://jinjor-labo.hatenablog.com/ ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9492 2016/07/25 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー