Why Beacon Protocols Matter

A Bluetooth Beacon is not a single standard. “Beacon” is a deployment pattern; the actual bytes on the air are defined by one of three advertising formats. Picking the wrong frame wastes battery, breaks cross-platform support, or locks you into a vendor SDK. This article breaks down iBeacon, Eddystone, and AltBeacon at the byte level.

The Common Envelope: BLE Advertising

All three ride on BLE non-connectable undirected advertising (ADV_NONCONN_IND) or scannable (ADV_SCAN_IND). A beacon packet carries a 31-byte advertising data (AD) structure:

Field Size Note
Preamble 1 B 0xAA for non-connectable
Access Address 4 B 0x8E89BED6
Header 2 B PDU type + length
AdvA 6 B Beacon MAC
AdvData <=31 B The frames below
CRC 3 B

The effective payload is the 31-byte AdvData, built from AD structures: [Len][AD Type][Value]. Every beacon format is just a specific AD Type plus 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 (measured power at 1 m, signed)
  • UUID partitions a deployment (e.g. one per building).
  • Major/Minor address sub-zones (floor / room).
  • Measured power = RSSI at 1 m, used for distance: `d = 10^((Measured – RSSI)/(10*n))`, n ~ 2.0-4.0.
  • Proprietary but trivially decodable; no telemetry, no URL.

Eddystone (Google)

Open format, four frame types sharing AD Type 0x16 (Service Data) with UUID 0xFEAA:

Frame Code Payload
UID 0x00 10 B Namespace + 6 B Instance
URL 0x10 compressed URL (scheme/host encoding)
TLM 0x20 battery, temp, ADV count, uptime
EID 0x30 ephemeral rotating ID (privacy)

TLM is broadcast alternately with UID/URL so a gateway can read health without connecting. EID rotates on a timetable shared with a resolver server, useful for anti-spoofing.

AltBeacon (Radius Networks)

Open, vendor-neutral. 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-like)
ID2:     2 B (Beacon Code)
Ref Power: 1 B
MFG Reserved: 1 B

Functionally like iBeacon but with a 20-byte ID space and a free manufacturer code field.

Comparison

Feature iBeacon Eddystone AltBeacon
Owner Apple Google Open
ID model UUID/Major/Minor Namespace/Instance ID1 (20 B)
URL No Yes (compressed) No
Telemetry No Yes (TLM) No
Privacy/EID No Yes No
Codec complexity Low Medium Low

Choosing

  • Indoor positioning / iOS-first -> iBeacon (best iOS support).
  • Web fallback / no app -> Eddystone-URL (opens in browser).
  • Multi-platform OSS -> AltBeacon.
  • Health monitoring -> Eddystone-TLM.

Practical Gotchas

  • Tx Power calibration: measure at 1 m inside the real enclosure; plastic or metal shifts it 2-4 dB.
  • Advertising interval: 100-1000 ms. Faster means better detection but shorter battery. A CR2032 at 500 ms lasts about 1-2 years.
  • Packet collisions: with N beacons on the same channel, collision probability rises roughly with N squared; stagger intervals.
  • Do not exceed 31 B AdvData or the frame is dropped.

The Bluetooth Beacon format you choose determines everything downstream. Pick by platform and use case, not by hype.