株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

Bluetooth Low Energy iOS

Core BluetoothでBLE通信(その1)BLEの仕様概要

投稿日:2015年2月16日 更新日:

iOSでCore Bluetoothを使ってBLE(Bluetooth Low Energy)の通信をプログラミングしてみます。今回はまずはBLEの仕様概要についてです。ただしですが、BLEの仕様についてはいろいろなサイトや書籍等での解説がありますのでここでは実際のBLEデバイスを使いながら簡単に仕様を整理してみます。

まずBLEとはBluetooth4.0で追加された仕様です。Bluetooth4.0 イコール BLEということではなくBluetoothの仕様のひとつです。もともとは Wibreeという名称でNokiaによって開発されたものでBluetooth4.0に統合されました。特徴は近距離での通信向けに通信速度はそれほどでもないですが、省電力での通信が可能なことです。

ここではBLEの通信仕様については主に以下のCore Bluetoothプログラミングガイドを参考にしています。
Core Bluetooth プログラミングガイド

実際のBLEデバイスとして以下のTI(テキサスインスツルメンツ社)のSensorTagを使ってみます。
CC2541 SensorTag 開発キット
詳細は上記メーカのサイトを参照して頂くとして以下のようなデバイスです。各種センサが搭載されていてBLEで通信が出来ます。
IMG_0206

大きさの比較のためにiPhone4Sと並べてみました。

IMG_0203

このデバイスのデータを表示するためのアプリがメーカから提供されていますのでそれを使います。(※開発の参考にもなるサンプルアプリのソースも公開されているようです。)

ここではiPad miniを使っています。以下のような画面になります。まず起動画面です。
IMG_0175

以下がセンサのデータを表示する画面です。
IMG_0176

SensorTagは後でまた使います。

ここから本題のBLEの通信の仕様概要です。

セントラルとペリフェラル
BLE通信では別の役割を持ったセントラル(中央装置、Centrals)とペリフェラル(周辺装置、Peripherals)で通信を行います。ペリフェラルはデータを保持して提供する側です。セントラルはペリフェラルのデータを利用して何かしらのタスクを実行します。

クライアント、サーバの役割に当てはめるとセントラルがクライアントでペリフェラルがサーバです。通常、サーバというと大型で多量の電力が必要というイメージですが、BLE機器は省電力で通信機能の機器は小型です。今回のデバイスでは、SensorTagがペリフェラルで、iPad miniがセントラルです。

セントラル     ←→    ペリフェラル
(データを利用)      (データを提供)
(ここではiPad mini) (ここではSensorTag)

アドバータイズ
ここでのアドバータイズとはペリフェラルが自身の存在を知らせるために出す「広告」のことです。セントラルは必要なデータを提供してくれるペリフェラルがないか走査(スキャン)します。

上記のiPad miniのアプリの最初のスクリーンショットではアドバータイズしているSensorTagをスキャンして検知した状態です。この状態から検知したSensorTagに接続すると次の画像になってセンサーの値を見ることが出来ます。

サービスとキャラクタリスティック
BLE通信はGeneric Attribute (GATT) プロファイルという通信規定で通信を行います。このプロファイルは一つ以上のサービスと各サービスを構成するキャラクタリスティックから成り立ちます。

サービス1
→ キャラクタリスティック1-1
→ キャラクタリスティック1-2
・・・
サービス2
→ キャラクタリスティック2-1
→ キャラクタリスティック2-2
・・・
・・・

このサービスやキャラクタリスティックには既に決まっているものがあり、それらは2バイトのUUIDで表現されます。独自のものは16バイトのUUIDを独自に生成し使用します。既に決まっている仕様等の詳細は以下を参照して下さい。
GATT Specifications

今回のSensorTagのサービスやキャラクタリスティックの仕様は今現在以下から見ることが出来ます。currentとなっている日付からPDFファイルがダウンロード出来ます。
File:BLE SensorTag GATT Server.pdf

これを見ると、例えば、Device Information Serviceといったサービスは2バイトのUUIDが記述されていて、IR Temperature Serviceといったサービスは16バイトのUUIDが記述されています。iPad miniのアプリはこの仕様のサービス、キャラクタリスティックからデータを取得して利用者に分かるように表示(※上記のアプリのスクリーンショット参照)しています。

それではこのサービス、キャラクタリスティックを別のアプリで直接見てみたいと思います。ここではBLExplrというアプリを使いました。(※今現在は300円です。)

起動すると以下のような画面になります。画面のプルダウンでスキャンを開始します。
0005

SensorTagを検知しています。(※この画面のみ他人のデバイスが表示されていたので一部加工しています。)
0006

サービス一覧の画面です。UnknownとなっているのはBLExplrがSensorTagのサービス、キャラクタリスティクスを認識していないからです。
0008

このサービス一覧からサービスを選択してキャラクタリスティクスを選択していくと値を見ることが出来ます。まずは分かりやすいと思われるSimple Keys Serviceを見てみます。Simple Keys Serviceは0xFFE0というIDなのでこれを選択します。ボタンの状態が0xFFEのIDのキャラクタリスティクスなのでそれを選択します。(※途中の画像は省略します。)
0010

Enable NotifyボタンでEnableの状態にします。そうすると、SensorTagのボタン(正面の上部に2つあります。)を押すと以下のようにボタンの状態を読むことが出来ます。Value Hexの値がボタンの状態によって変化します。
0012

次に何かセンサーの値を見てみます。分かりやすそうなセンサーとして動かせばすぐに値が変わるということで加速度センサーを見てみます。

加速度センサーのサービスIDは仕様書を見ると、F000AA10-0451-4000-B000-000000000000 です。その値のキャラクタリスティクスIDがF000AA11-0451-4000-B000-000000000000のようです。これを探してNotifyをEnableにすると確かに値が表示されました。以下はキャラクタリスティクス一覧と値を表示するキャラクタリスティクスの画面です。SensorTagを動かすと値が変化するのが確認出来ました。
0021

0022

以上のようにSensorTagでのサービスとキャラクタリスティクスを見てきました。このようにBLEの通信では、実際のデータはサービス、キャラクタリスティクスとして構成して実装していきます。

これで、簡単にですがBLEの通信の仕様を把握したとして、次回からは実際にiOS上でCoreBluetoothを使ってセントラル、ペリフェラルを実装していきます。


AdSense

AdSense

-Bluetooth Low Energy, iOS

執筆者:

関連記事

SHARP製スマホSHL23でBLE通信を試してみた

SHARP製のスマホSHL23でBLE(Bluetooth Low Energy)通信のプログラミングを試してみました。わざわざSHARP製のスマホSHL23と書かないで普通にAndroidのスマホと …

Core BluetoothでBLE通信(その3)セントラル

Core BluetoothでBLE通信(Bluetooth Low Energy通信)の3回目です。前回はペリフェラルを実装してみました。今回は前回のペリフェラルと通信をするためのセントラルを実装し …

Core BluetoothでBLE通信(その2)ペリフェラル

Core BluetoothでBLE通信の2回目です。前回はBLE通信の仕様について簡単にですが確認しました。今回はそれを踏まえて実際にCore BluetoothでHello World的なペリフェ …