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 | 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.