Beacon プロトコルが重要な理由
Bluetooth Beacon は単一の規格ではありません。「ビーコン」は配置パターンであり、空中の実際のバイト列は 3 つの広告フォーマットのいずれかで定義されます。誤ったフレームを選ぶと電池を浪費し、クロスプラットフォーム対応が崩れ、ベンダー SDK に縛られます。本稿では iBeacon、Eddystone、AltBeacon をバイト単位で分解します。
共通の枠組み:BLE 広告
3 つとも BLE 非接続無指向広告 (ADV_NONCONN_IND) またはスキャン可能広告 (ADV_SCAN_IND) で送信されます。Beacon パケットは 31 バイトの広告データ (AD) 構造を持ちます。
| フィールド | サイズ | 備考 |
|---|---|---|
| Preamble | 1 B | 非接続は 0xAA |
| Access Address | 4 B | 0x8E89BED6 |
| Header | 2 B | PDU 型 + 長さ |
| AdvA | 6 B | Beacon MAC |
| AdvData | 31 B 以下 | 以下のフレーム |
| CRC | 3 B |
実効ペイロードは 31 バイトの AdvData で、[Len][AD Type][Value] の AD 構造から構成されます。すべての Beacon フォーマットは特定の AD Type と Value に過ぎません。
iBeacon (Apple)
AD Type 0xFF (Manufacturer Specific)、Company ID Apple 0x004C。
Length: 0x1A (26)
AD Type: 0xFF
Company: 0x004C
Type: 0x02 (iBeacon)
Len: 0x15 (21)
UUID: 16 bytes
Major: 2 bytes
Minor: 2 bytes
Tx Power: 1 byte (1 m での測定電力、符号付き)
- UUID は配置を分割 (建物ごとなど)。
- Major/Minor はサブゾーン (フロア / 部屋) を指定。
- 測定電力 = 1 m での RSSI。距離算出に使用: `d = 10^((Measured – RSSI)/(10*n))`、n ~ 2.0-4.0。
- 独自仕様だが復号は容易。テレメトリや URL はなし。
Eddystone (Google)
オープン形式。UUID 0xFEAA を持つ AD Type 0x16 (Service Data) を共有する 4 種のフレーム。
| フレーム | コード | ペイロード |
|---|---|---|
| UID | 0x00 | 10 B Namespace + 6 B Instance |
| URL | 0x10 | 圧縮 URL (スキーム/ホスト符号化) |
| TLM | 0x20 | 電池、温度、ADV カウント、稼働時間 |
| EID | 0x30 | 短命な回転 ID (プライバシー) |
TLM は UID/URL と交互に放送され、ゲートウェイは接続せずに健全性を読めます。EID はリゾルバーサーバーと共有する時刻表で回転し、なりすまし防止に有効です。
AltBeacon (Radius Networks)
オープンでベンダー中立。AD Type 0xFF、MFG ID 0x0118 (Radius)。
Length: 0x1B (27)
AD Type: 0xFF
MFG: 0x0118
Type: 0xBE (AltBeacon)
Len: 0x14 (20)
MFG Code: 2 B
ID1: 20 B (UUID 相当)
ID2: 2 B (Beacon Code)
Ref Power: 1 B
MFG Reserved: 1 B
機能は iBeacon と同等ですが、20 バイトの ID 空間と空きメーカーコード欄があります。
比較
| 機能 | iBeacon | Eddystone | AltBeacon |
|---|---|---|---|
| 所有者 | Apple | オープン | |
| ID モデル | UUID/Major/Minor | Namespace/Instance | ID1 (20 B) |
| URL | なし | あり (圧縮) | なし |
| テレメトリ | なし | あり (TLM) | なし |
| プライバシ/EID | なし | あり | なし |
選び方
- 屋内測位 / iOS 中心 -> iBeacon (iOS 対応が最良)。
- Web フォールバック / アプリ不要 -> Eddystone-URL (ブラウザで開く)。
- マルチプラットフォーム OSS -> AltBeacon。
- 健全性監視 -> Eddystone-TLM。
実務の注意点
- Tx Power 校正: 実際の筐体で 1 m を測定。樹脂や金属で 2-4 dB ずれる。
- 広告間隔: 100-1000 ms。短いほど検出は良いが電池は減る。CR2032 で 500 ms なら約 1-2 年。
- パケット衝突: 同チャネルの N 個の Beacon では衝突確率が約 N の 2 乗で上昇。間隔をずらす。
- AdvData は 31 B を超えないこと。
選ぶ Bluetooth Beacon の形式が下流すべてを決めます。話題性ではなく、プラットフォームと用途で選びましょう。