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 Google オープン
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 の形式が下流すべてを決めます。話題性ではなく、プラットフォームと用途で選びましょう。