【サルでもわかるBLE入門】(11) iBeacon

こんにちは。ムセンコネクト三浦です。
今回も「サルでもわかるBLE入門」と銘打ってお話していこうと思います。Bluetooth® LE(BLE)初心者の方でも理解をしてもらえるように、できるだけわかりやすく解説していきます。
第11回目は『iBeacon』についてのお話です。
わかりやすく解説する為に、Bluetooth® LE(BLE)初心者にはあまり必要ない例外的な内容は省略して説明するようにしています。あえてアバウトに書いている部分もありますのでご承知おきください。
(厳密な技術的内容を知りたいような方は別の解説書を参考にしてください。)
iBeaconとは?
iBeacon(アイビーコン)とは、2013年に発表したBluetooth® LEビーコンの規格です。
Bluetooth LEビーコン全般についてはこちらで解説しています。

ビーコンとは?
簡単に言うと、「ビーコン」は不特定多数に向けて情報を発信し続ける仕組みのことです。特に、Bluetooth LEの電波を利用したビーコンを「Bluetooth LEビーコン(BLEビーコン)」と呼びます。
Bluetooth LEビーコンはスマートフォンで簡単に受信する仕組みがつくれることが特徴です。
Bluetooth LEビーコンが持っている固有のID情報をスマートフォンアプリに伝えることで、「ビーコンを設置した場所・位置」と連動した機能を実現することができます。
GPSが届きにくい屋内でのナビゲーション、店舗でのクーポン配信、博物館での展示品解説、イベント会場での情報提供など、「場所・位置」と連動した様々なサービスに応用されています。
iBeaconとは?
Bluetooth LEビーコンといえば、「iBeaconのことでしょ」と言われることも多く、ビーコンのデファクトスタンダードになっています。
iBeaconは、発信する「固有のID」の内容、それを発信する際の通信フォーマットをAppleが独自に規定したものです。
特にiPhoneやiPadなどのiOS機器でビーコン信号を受信しやすくなる工夫がされています。
iBeaconのビーコン信号を発信する機器を、iBeacon発信機やiBeacon端末と呼びます。
勘違いされやすいのですが、iBeacon発信機自体がコンテンツ情報を送るわけではありません。
iBeacon発信機が発信するのはあくまで「固有のID」情報であり、そのIDを受け取ったアプリが、「固有ID」に対応するコンテンツ情報をインターネット経由で取得したり、アプリ内のサービス機能を実行したりします。
iBeaconフォーマットの詳細
iBeaconの仕様は、Appleの以下のサイトで公開されています。

iBeaconのビーコン信号は、Bluetooth LEのアドバタイジングパケット(Advertising Packet)で発信されます。
このパケットの中に、iBeaconとして規定された固有のデータが含まれています。
主要な構成要素は以下の通りです。
UUID
- UUIDはUniversally Unique Identifierのことです。
- 16バイト(128ビット)の識別子で、世界中で一意になるように割り当てられます。
- 通常、特定の企業やサービスグループ全体を示すために使われます。例えば、「○○社のiBeacon」や「△△チェーン店の□□サービスのiBeacon」といった大きな括りを示します。
- 例: 9c3d6c6f-2b8e-4c6f-8001-f724a1826438
※ハイフンは含めずに発信します
Major
- 2バイト(16ビット)の数値(0〜65535)で、UUIDで示されるグループの中をさらに細分化するために使われます。
- 例えば、あるチェーン店(UUID)の中の「渋谷店」(Major値: 100)、「新宿店」(Major値: 200)のように、特定の場所やカテゴリを示します。
Minor
- 2バイト(16ビット)の数値(0〜65535)で、Majorで示されたグループをさらに細分化するために使われます。
- 例えば、渋谷店(Major値: 100)の中の「入り口付近」(Minor値: 1)、「レジ前」(Minor値: 2)のように、より具体的な場所や個別のビーコン発信機を示します。
Measured Power
- ビーコン発信機から1メートル離れた場所で測定された受信信号強度(RSSI: Received Signal Strength Indicator)の期待値を1バイトで示したものです。
- 受信側のデバイスは、実際に受信した信号強度(RSSI)と、このMeasured Power値を比較することで、ビーコン発信機からのおおよその距離を推定できます(極近い、近い、遠いなど)。※詳細は後述します。
これらの固有のID情報(UUID, Major, Minor)の組み合わせによって、個々のビーコン端末を特定し、受信側のアプリは「どのビーコンの近くにいるか」を判断します。
以下の図はアドバタイズパケットの詳細を表したものです。
AdvDataの中には複数のAD Structureを含める事ができます。

iBeaconでは2つのAD Structureを含めることが規定されています。
- AD Structure 1: Flags
- AD Structure 2: Manufacture Specific Data
Byte(s) | Value | 内容 |
---|---|---|
0 | 0x02 | AD Structure 1のLength = 2byte |
1 | 0x01 | AD Structure 1のType = Flags |
2 | 0x06 | FlagsのValue |
3 | 0x1A | AD Structure 2のLength = 26byte |
4 | 0xFF | AD Structure 2のType = Manufacture Specific Data |
5 | 0x4C | Apple社のCompany ID(下位バイト) ※Bluetooth SIGによって割り当てられたApple社のCompany ID |
6 | 0x00 | Apple社のCompany ID(上位バイト) ※Bluetooth SIGによって割り当てられたApple社のCompany ID |
7 | 0x02 | Beacon Type(下位バイト) ※Apple社により独自に規定された固定値 |
8 | 0x15 | Beacon Type(上位バイト) ※Apple社により独自に規定された固定値 |
9~24 | 0xnn … nn | UUID値 16byte ※ビーコン発信機毎の固有の情報 |
25~26 | 0xnnnn | Major値 2byte ※ビーコン発信機毎の固有の情報 |
27~28 | 0xnnnn | Minor値 2byte ※ビーコン発信機毎の固有の情報 |
29 | 0xnn | Measured Power値 1byte ※ビーコン発信機毎の固有の情報 |
その他に以下のような規定がされています。
- 非接続性のアドバタイズパケット(ADV_NONCONN_IND)で発信すること
- アドバタイズインターバルは100ms固定とすること
他にも色々と規定されていますのでiBeaconを利用したシステムを開発する場合は、iBeaconの仕様を詳細に確認する必要があります。
iBeaconによる距離推定
Measured Power
iBeaconのビーコン信号にはMeasured Powerという「1メートル離れた場所で測定された受信信号強度」の情報が含まれています。
iBeaconではこのMeasured Powerの値を元に、ビーコン発信機とスマートフォンの大まかな距離を推定することができます。
Measured Powerは、本質的にはフィールドにビーコン発信機を設置した際に、ビーコン発信機1台1台について設定するデータです。
ビーコン発信機1台ごとに、1m離れた地点に立ち、スマートフォンでビーコン信号を受信してRSSIを測定します。そうすることで環境要因による距離推定の揺らぎを多少吸収することができます。


本来はこのように、ビーコン発信機毎に測定して個別にMeasured Powerを設定する手法が規定されていますが、ビーコン発信機を設置する際の手間が大きくなってしまうため、実際にはビーコン発信機の機種毎に固定値が設定されていることが多いようです。
距離推定・近接度推定
iBeacon受信アプリでは、iBeacon信号を受信した際にMeasured Powerの値と、受信したときのRSSIの値から、大まかな距離(近接度:Proximity)の推定を行います。
iOSのCore Locationフレームワークでは「近接度:Proximity」は以下のように分類されます。
- Immediate (極近接、数cm程度)
- Near (近い、数m程度)
- Far (遠い、10m以上程度)
RSSIは、障害物(壁、人体)、電波干渉(Wi-Fi、他のBluetoothデバイス)、マルチパス反射など、多くの環境要因によって大きく変動します。
そのため、RSSIから計算される距離や近接度はあくまで推定値であり、精度は環境に大きく依存します。

スマートフォンによるiBeaconの受信
iOSの場合
iOSでは、Core LocationフレームワークがiBeaconの受信機能をサポートしています。
監視対象の定義:
モニタリング・レンジング対象とするiBeacon群を定義します。
「UUIDのみ」、「UUIDとMajor」、「UUIDとMajorとMinor」の組み合わせで指定することができます。
Monitoring(モニタリング)
iPhoneが定義されたiBeacon発信機の領域に入ったり(Enter)、出たり(Exit)したことを検知する機能です。
アプリがバックグラウンド状態や終了状態でも、領域への出入りをトリガーにアプリを起動させることができます(適切な権限設定が必要です)。
Ranging(レンジング)
定義された領域内にあるiBeacon発信機を継続的に検出し、そのリストと各ビーコンの近接度(proximity)、推定精度(accuracy)、RSSI値などを取得する機能です。
Androidの場合
Android OSには、iOSのCore LocationのようなiBeacon専用のAPIは標準搭載されていません。
しかし、Bluetooth LEの基本的なスキャン機能を用いてiBeaconデバイスを検出することができます。
iOSにおいてCore Locationフレームワークが提供している距離推定・近接度推定の機能は、自前で設計する必要があります。
AndroidでiBeacon信号を受信するための情報はネット上に散見されますし、サードパーティのBluetooth LEライブラリもあるようです。
バックグラウンドでは、Dozeモードなどのアプリの実行制限やBluetooth LEのスキャン制限の影響を受けるため、バックグラウンドで安定してiBeacon信号を受信するには工夫が必要になります。

iBeaconの活用
iBeaconの活用シーンには以下のようなものがあります。
- 屋内位置測位
- 店舗でのクーポン発行
- 観光案内
- デジタルスタンプラリー
- 美術館・博物館での展示物案内
- 災害時の避難誘導支援
- 学校での出席確認
- 工場などでの作業者の行動分析
- 空港や駅でのナビゲーション
- 医療機器や医療従事者の位置情報把握
iBeaconを上手く活用することで、スマートフォンを持っている人のリアルな位置・行動をWeb上のサービスと紐づけ、新たな価値を創造することができます。
次回もBluetooth LE(BLE)の技術要素について深堀りしてお話したいと思います。