Advertising Data v BLE: struktura a typy dat

Autor: IT Sectr Publikováno: 2026-07-15 Doba čtení: 10 min

Advertising Data — jsou strukturovaná data, která zařízení BLE vysílá v reklamních paketech k identifikaci sebe sama a svých služeb. Bluetooth Core Specification 5.4 (2023) definuje formát AD Structure: každý prvek obsahuje délku (1 bajt), typ (1 bajt) a hodnotu (až 29 bajtů). Specifikace celkem popisuje více než 30 typů AD — od Flags a Local Name po Service UUID a Manufacturer Specific Data. Správné balení advertising data je kritické pro kompatibilitu zařízení s iOS, Android a dalšími platformami a také určuje rychlost detekce a energetickou účinnost reklamy.

Hlavní body

  • AD Structure — formát dat v reklamním paketu BLE: délka (1 bajt), typ (1 bajt), hodnota (až 29 bajtů).
  • Reklamní paket je omezen na 31 bajtů, scan response — dalších 31 bajtů pro doplňková data.
  • Flags (0x01) — povinný typ AD definující režimy LE Limited Discoverable a BR/EDR Not Supported.
  • Service UUID se přenáší ve zkráceném (2 bajty) nebo plném (16 bajtů) formátu.
  • Manufacturer Specific Data (0xFF) — flexibilní typ pro jakákoli vlastní data výrobce.

Co jsou Advertising Data?

Advertising Data — je strukturovaná sada polí, které zařízení BLE vysílá v reklamních paketech k identifikaci a popisu svých schopností. Central skenováním kanálu tato data čte a rozhoduje se: připojit se k zařízení, ignorovat jej nebo požádat o další informace prostřednictvím Scan Response.

Data jsou organizována podle principu TLV (Type-Length-Value): každý prvek AD se skládá ze tří polí. Length (1 bajt) — délka Value + Type (tj. celková délka prvku mínus 1 bajt pro Length). Type (1 bajt) — identifikátor typu dat z Bluetooth Assigned Numbers. Value (N bajtů) — obsah závislý na typu.

Standardní reklamní paket může obsahovat až 31 bajtů dat AD. Pokud to nestačí, použije se Scan Response (dalších 31 bajtů) nebo Extended Advertising (BLE 5.0, až 251 bajtů). První bajty reklamního paketu jsou vyhrazeny pro hlavičku PDU a adresu zařízení — užitečné zatížení AD začíná od offsetu.

Formát AD Structure

Každý prvek AD v reklamním paketu začíná polem Length (1 bajt). Hodnota Length udává počet bajtů následujících po Length — tedy Type + Value. Například prvek s Length=3 znamená, že po Length následuje 1 bajt Type a 2 bajty Value. Paket končí, když součet délek všech prvků dosáhne velikosti reklamních dat.

PoleVelikostPopis
Length1 bajtDélka Type + Value (bez Length)
Type (AD Type)1 bajtIdentifikátor typu dat podle Bluetooth SIG
Value0–29 bajtůData určitého typu

Parser Central čte sekvenci prvků AD od prvního bajtu po hlavičce. Pokud je Length=0, prvek je ignorován a parser přejde k dalšímu bajtu. Duplicitní typy AD — několik prvků se stejným Type v jednom paketu — jsou povoleny, ale Central může v závislosti na implementaci zásobníku zpracovat pouze první nebo poslední.

Důležité pravidlo: součet všech Length(+1) v paketu nesmí překročit velikost reklamních dat (31 bajtů pro reklamní PDU). Pokud se data nevejdou, je třeba stanovit priority — které typy AD jsou kritické pro primární detekci a které lze přesunout do Scan Response.

Flags (0x01): povinný typ AD

Flags (AD Type 0x01) — povinný prvek v reklamním paketu každého zařízení BLE. Zabírá 3 bajty: Length (0x02), Type (0x01), Value (1 bajt bitových příznaků). Příznaky definují režimy detekce a schopnosti zařízení. Core Specification doporučuje zahrnout Flags do každého reklamního paketu.

Hlavní příznaky: LE Limited Discoverable Mode (bit 0) — zařízení je k dispozici po omezenou dobu, LE General Discoverable Mode (bit 1) — zařízení je trvale k dispozici, BR/EDR Not Supported (bit 2) — zařízení podporuje pouze LE, Simultaneous LE and BR/EDR (bit 3) — podpora obou režimů. Pro čistě BLE zařízení je povinná kombinace: LE General Discoverable + BR/EDR Not Supported.

Nesprávná hodnota Flags je jedním z častých důvodů, proč zařízení není detekováno v iOS nebo Android. Pokud například není nastaven příznak BR/EDR Not Supported, iOS se může pokusit připojit přes klasický Bluetooth místo BLE. Kontrolujte hodnotu Flags při ladění reklamního paketu pomocí Bluetooth analyzátoru (nRF Connect, Wireshark).

Local Name: název zařízení

Local Name (AD Type 0x08 nebo 0x09) — zobrazovaný název zařízení BLE. Typ 0x08 (Shortened Local Name) — zkrácený název, používá se, když se plný název nevejde do reklamního paketu. Typ 0x09 (Complete Local Name) — plný název zařízení. Maximální délka názvu je 248 bajtů, ale ve standardním reklamním paketu je k dispozici nejvýše 28 bajtů.

Pokud název zařízení překračuje dostupné místo v reklamním paketu, doporučuje se: umístit zkrácený název do reklamního PDU (typ 0x08) a plný název do Scan Response (typ 0x09). iOS při skenování zobrazuje název z reklamního paketu a plný název je k dispozici po připojení nebo Scan Response.

Při výběru názvu zařízení zvažte: příliš dlouhý název zabírá místo, které by mohlo být použito pro Service UUID nebo jiná důležitá data. Doporučená délka názvu je 8–16 znaků. Vyhněte se nestandardním znakům a mezerám — některé zásobníky BLE je mohou nesprávně zpracovávat.

Service UUID: identifikace služeb

Service UUID (AD Type 0x02–0x07) — jeden z nejdůležitějších typů AD, který umožňuje Central určit, jaké služby zařízení poskytuje, bez připojení k němu. Bluetooth SIG definuje několik formátů přenosu UUID v závislosti na velikosti: 0x02 (Incomplete 16-bit), 0x03 (Complete 16-bit), 0x04 (Incomplete 32-bit), 0x05 (Complete 32-bit), 0x06 (Incomplete 128-bit), 0x07 (Complete 128-bit).

16-bit UUID (2 bajty) — standardní služby Bluetooth SIG, například 0x180F (Battery Service), 0x180A (Device Information). 128-bit UUID (16 bajtů) — vlastní služby definované vývojářem. 16-bit UUID zabírá v AD pouze 4 bajty (Length + Type + 2 bajty UUID), 128-bit — 18 bajtů. Pokud je třeba v jednom paketu přenést několik vlastních UUID, nemusí se vejít do 31 bajtů.

Doporučuje se použít typ Incomplete (0x02/0x04/0x06), pokud se nepřenášejí všechna UUID zařízení, ale pouze ta nejdůležitější pro filtrování. Úplný seznam UUID se přenáší prostřednictvím Scan Response nebo GATT Discovery po připojení. To šetří místo v reklamním paketu pro jiné typy AD.

Manufacturer Specific Data

Manufacturer Specific Data (AD Type 0xFF) — nejflexibilnější typ AD, určený pro přenos vlastních dat výrobce. První 2 bajty Value jsou Company Identifier Code přidělený Bluetooth SIG (například 0x004C pro Apple, 0x0075 pro Samsung). Zbývající bajty jsou libovolná data ve formátu definovaném výrobcem.

Apple používá Manufacturer Data pro iBeacon: Company ID (0x004C), typ Beacon (0x0215), UUID (16 bajtů), Major (2 bajty), Minor (2 bajty), TX Power (1 bajt). Google používá podobný formát pro Eddystone. Výrobci zařízení IoT často umísťují do Manufacturer Data údaje ze senzorů nebo stav zařízení.

js
// Analyzovat Manufacturer Specific Data na Central
function parseManufacturerData(data) {
    const view = new DataView(data.buffer);

    // Identifikační kód společnosti (první 2 bajty)
    const companyId = view.getUint16(0, true);

    // Zkontrolovat Apple iBeacon
    if (companyId === 0x004C) {
        return parseIBeacon(view);
    }

    return null;
}

Při použití Manufacturer Data je důležité dodržovat omezení velikosti: 31 bajtů na celý reklamní paket mínus povinné typy AD. Pro Apple iBeacon zabírá celý paket 30 bajtů a ponechává místo pouze pro Flags (3 bajty). Pro Eddystone — až 31 bajtů. Kompaktní vlastní formáty mohou zahrnovat teplotu, vlhkost nebo tlak ve 4–8 bajtech.

Strategie balení dat

Správné balení advertising data — je umístění maximálně užitečných informací do omezeného prostoru 31 bajtů. Strategie závisí na účelu zařízení: maják potřebuje identifikátor, IoT senzor potřebuje údaje, fitness tracker potřebuje název a UUID služeb. Obecný princip: čím rychleji musí Central rozhodnout, tím kritičtější data by měla být v reklamním PDU.

Doporučená strategie: reklamní PDU (prvních 31 bajtů) — Flags (3 bajty) + jedno 16-bit Service UUID (4 bajty) + zkrácený název (až 12 znaků = 14 bajtů) + Manufacturer Data (až 10 bajtů). Scan Response (druhých 31 bajtů) — plný název (zbytek) + další Service UUID + TX Power Level (3 bajty). Toto rozdělení umožňuje Central rychle filtrovat zařízení podle UUID.

PrioritaTyp ADVelikostUmístit do
1 (povinné)Flags (0x01)3 bajtyReklamní PDU
2 (filtrování)Service UUID (0x02–0x03)4+ bajtůReklamní PDU
3 (identifikace)Local Name (0x08–0x09)2+ bajtyReklamní PDU (zkrácené)
4 (doplňkové)TX Power Level (0x0A)3 bajtyScan Response
5 (vlastní)Manufacturer Data (0xFF)4+ bajtůReklamní PDU / Scan Response
6 (plná data)Ostatní UUIDPodle velikostiScan Response

Ladění advertising data je povinnou fází vývoje zařízení BLE. Použijte nRF Connect (Nordic Semiconductor) nebo Wireshark s Bluetooth analyzátorem k zobrazení nezpracovaných dat paketu. Zkontrolujte, zda mají všechny typy AD správnou Length, zda součet délek nepřesahuje 31 bajtů a zda jsou Flags správně nastaveny pro váš scénář použití.

Často kladené otázky

Co se stane, pokud součet prvků AD přesáhne 31 bajtů?

Zásobník Bluetooth Controller odmítne data překračující limit nebo paket neodešle. Zkontrolujte celkovou délku prvků AD při sestavování reklamního paketu. Pokud se data nevejdou — přesuňte část do Scan Response nebo použijte Extended Advertising (BLE 5.0) s limitem 251 bajtů.

Lze přenášet údaje ze senzorů v reklamním paketu?

Ano, prostřednictvím Manufacturer Specific Data (0xFF). Zabalte údaje do 4–8 bajtů: například teplotu (2 bajty ve formátu fixed-point), vlhkost (2 bajty), napětí baterie (2 bajty). Tento přístup umožňuje Central číst data bez připojení a šetřit energii.

Jaký typ AD použít pro vlastní služby?

Pro vlastní služby použijte 128-bit UUID (AD Type 0x06–0x07). Pokud se UUID nevejde do reklamního PDU (16 bajtů na jedno UUID), přesuňte jej do Scan Response nebo použijte zkrácený formát Incomplete (0x06) pro označení pouze prvních jednoho nebo dvou UUID.

Jaký je rozdíl mezi typy Complete a Incomplete Service UUID?

Complete — v paketu jsou uvedena všechna UUID služeb zařízení. Incomplete — pouze část UUID (obvykle nejdůležitější). Central se nemůže spoléhat na Incomplete jako na úplný seznam, ale používá jej k rychlému filtrování. Úplný seznam je k dispozici po GATT Discovery.

Proč iOS nevidí mé zařízení BLE?

Častou příčinou je nesprávný Flags (0x01). Ujistěte se, že je nastaven bit BR/EDR Not Supported. Druhou příčinou je absence Service UUID v reklamním paketu (iOS filtruje podle UUID). Třetí — zařízení vysílá příliš zřídka (iOS očekává interval ne delší než 1000 ms).

Shrnutí

  • Advertising Data — strukturovaná data ve formátu AD Structure (Length-Type-Value) přenášená v reklamních paketech BLE.
  • Standardní reklamní paket obsahuje až 31 bajtů dat, Scan Response — dalších 31 bajtů pro doplňující informace.
  • Flags (0x01) — povinný typ AD definující režimy detekce. Pro zařízení BLE je BR/EDR Not Supported povinný.
  • Service UUID se přenáší v 16-bit (2 bajty) nebo 128-bit (16 bajtů) formátu, Complete nebo Incomplete — v závislosti na dostupném místě.
  • Manufacturer Specific Data (0xFF) — flexibilní typ pro vlastní data, používaný v majácích iBeacon, Eddystone a zařízeních IoT.
  • Strategie balení: povinné typy AD (Flags, Service UUID, zkrácený název) — v reklamním PDU, doplňkové — v Scan Response.
  • Ladění advertising data pomocí nRF Connect nebo Wireshark — povinná fáze vývoje pro kontrolu správnosti struktury AD.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také