Advertising Data — strukturált adatok, amelyeket a BLE-eszköz reklámcsomagokban továbbít önmaga és szolgáltatásai azonosítására. A Bluetooth Core Specification 5.4 (2023) meghatározza az AD Structure formátumot: minden elem tartalmaz egy hosszt (1 bájt), típust (1 bájt) és értéket (legfeljebb 29 bájt). A specifikáció összesen több mint 30 AD-típust ír le — a Flags és Local Name típusoktól a Service UUID és Manufacturer Specific Data típusokig. Az advertising data helyes csomagolása kritikus fontosságú az eszköz iOS-szel, Android-dal és más platformokkal való kompatibilitása szempontjából, valamint meghatározza a felismerés sebességét és a reklám energiahatékonyságát.
Főbb pontok
Advertising Data — strukturált mezőkészlet, amelyet a BLE-eszköz reklámcsomagokban továbbít képességeinek azonosítására és leírására. A Central a csatorna szkennelésével beolvassa ezeket az adatokat és döntést hoz: csatlakozzon az eszközhöz, hagyja figyelmen kívül, vagy kérjen további információkat a Scan Response segítségével.
Az adatok a TLV (Type-Length-Value) elv szerint vannak szervezve: minden AD-elem három mezőből áll. Length (1 bájt) — a Value + Type hossza (azaz az elem teljes hossza mínusz 1 bájt a Length számára). Type (1 bájt) — az adattípus azonosítója a Bluetooth Assigned Numbers alapján. Value (N bájt) — a típustól függő tartalom.
A szabványos reklámcsomag legfeljebb 31 bájt AD-adatot tartalmazhat. Ha ez nem elegendő, a Scan Response (további 31 bájt) vagy az Extended Advertising (BLE 5.0, legfeljebb 251 bájt) használatos. A reklámcsomag első bájtjai a PDU fejléc és az eszköz címe számára vannak fenntartva — az AD hasznos teher egy eltolástól kezdődik.
Minden AD-elem a reklámcsomagban a Length (1 bájt) mezővel kezdődik. A Length értéke a Length után következő bájtok számát jelzi — azaz Type + Value. Például egy Length=3 értékű elem azt jelenti, hogy a Length után 1 bájt Type és 2 bájt Value következik. A csomag akkor ér véget, amikor az összes elem hosszának összege eléri a reklámadatok méretét.
| Mező | Méret | Leírás |
|---|---|---|
| Length | 1 bájt | A Type + Value hossza (Length nélkül) |
| Type (AD Type) | 1 bájt | Az adattípus azonosítója a Bluetooth SIG szerint |
| Value | 0–29 bájt | Egy adott típus adatai |
A Central elemzője az AD-elemek sorozatát a fejléc utáni első bájttól kezdve olvassa. Ha Length=0, az elemet figyelmen kívül hagyja, és az elemző a következő bájtra lép. Ismétlődő AD-típusok — több azonos Type-ú elem egy csomagban — megengedettek, de a Central a stack implementációjától függően csak az elsőt vagy az utolsót dolgozhatja fel.
Fontos szabály: a csomagban lévő összes Length(+1) összege nem haladhatja meg a reklámadatok méretét (31 bájt a reklám PDU számára). Ha az adatok nem férnek el, prioritásokat kell felállítani — mely AD-típusok kritikusak az elsődleges felismeréshez, és melyek helyezhetők át a Scan Response-ba.
Flags (AD Type 0x01) — kötelező elem minden BLE-eszköz reklámcsomagjában. 3 bájtot foglal: Length (0x02), Type (0x01), Value (1 bájt bitjelző). A jelzők meghatározzák az eszköz felismerési módjait és képességeit. A Core Specification javasolja a Flags minden reklámcsomagba való felvételét.
Fő jelzők: LE Limited Discoverable Mode (0. bit) — az eszköz korlátozott ideig érhető el, LE General Discoverable Mode (1. bit) — az eszköz folyamatosan elérhető, BR/EDR Not Supported (2. bit) — az eszköz csak LE-t támogat, Simultaneous LE and BR/EDR (3. bit) — mindkét mód támogatása. Tisztán BLE-eszközök esetén kötelező kombináció: LE General Discoverable + BR/EDR Not Supported.
A Flags helytelen értéke az egyik gyakori oka annak, hogy az eszköz nem észlelhető iOS-ben vagy Android-ban. Például, ha a BR/EDR Not Supported jelző nincs beállítva, az iOS megpróbálhat klasszikus Bluetooth-on keresztül csatlakozni a BLE helyett. Ellenőrizze a Flags értékét a reklámcsomag hibakeresésekor Bluetooth-elemzővel (nRF Connect, Wireshark).
Local Name (AD Type 0x08 vagy 0x09) — a BLE-eszköz megjelenített neve. 0x08 típus (Shortened Local Name) — rövidített név, akkor használatos, ha a teljes név nem fér el a reklámcsomagban. 0x09 típus (Complete Local Name) — az eszköz teljes neve. A név maximális hossza 248 bájt, de a szabványos reklámcsomagban legfeljebb 28 bájt áll rendelkezésre.
Ha az eszköz neve meghaladja a reklámcsomagban rendelkezésre álló helyet, javasolt: a rövidített nevet a reklám PDU-ba (0x08 típus), a teljes nevet pedig a Scan Response-ba (0x09 típus) helyezni. Az iOS a szkennelés során a reklámcsomagból származó nevet jeleníti meg, a teljes név a csatlakozás vagy a Scan Response után válik elérhetővé.
Az eszköznév kiválasztásakor vegye figyelembe: a túl hosszú név helyet foglal, amelyet Service UUID vagy más fontos adatok számára lehetne használni. Javasolt névhossz 8–16 karakter. Kerülje a nem szabványos karaktereket és szóközöket — egyes BLE-stackek helytelenül dolgozhatják fel azokat.
Service UUID (AD Type 0x02–0x07) — az egyik legfontosabb AD-típus, amely lehetővé teszi a Central számára, hogy csatlakozás nélkül meghatározza, milyen szolgáltatásokat nyújt az eszköz. A Bluetooth SIG több UUID-továbbítási formátumot határoz meg a mérettől függően: 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 bites UUID (2 bájt) — szabványos Bluetooth SIG szolgáltatások, például 0x180F (Battery Service), 0x180A (Device Information). 128 bites UUID (16 bájt) — a fejlesztő által meghatározott egyedi szolgáltatások. A 16 bites UUID csak 4 bájtot foglal az AD-ben (Length + Type + 2 bájt UUID), a 128 bites pedig 18 bájtot. Ha egy csomagban több egyedi UUID-t kell továbbítani, előfordulhat, hogy nem férnek el 31 bájtban.
Javasolt az Incomplete (0x02/0x04/0x06) típus használata, ha nem az eszköz összes UUID-je kerül továbbításra, csak a szűrés szempontjából legfontosabbak. Az UUID-k teljes listája a Scan Response vagy a csatlakozást követő GATT Discovery segítségével kerül továbbításra. Ez helyet takarít meg a reklámcsomagban más AD-típusok számára.
Manufacturer Specific Data (AD Type 0xFF) — a legrugalmasabb AD-típus, amely a gyártó egyedi adatainak továbbítására szolgál. A Value első 2 bájtja a Company Identifier Code, amelyet a Bluetooth SIG oszt ki (például 0x004C az Apple, 0x0075 a Samsung számára). A fennmaradó bájtok tetszőleges adatok a gyártó által meghatározott formátumban.
Az Apple a Manufacturer Data-t használja az iBeacon számára: Company ID (0x004C), Beacon típus (0x0215), UUID (16 bájt), Major (2 bájt), Minor (2 bájt), TX Power (1 bájt). A Google hasonló formátumot használ az Eddystone számára. Az IoT-eszközök gyártói gyakran helyeznek el érzékelőleolvasásokat vagy eszközállapotot a Manufacturer Data-ban.
// Manufacturer Specific Data elemzése a Central-ban
function parseManufacturerData(data) {
const view = new DataView(data.buffer);
// Cégazonosító kód (első 2 bájt)
const companyId = view.getUint16(0, true);
// Apple iBeacon ellenőrzése
if (companyId === 0x004C) {
return parseIBeacon(view);
}
return null;
}
A Manufacturer Data használatakor fontos betartani a méretkorlátozást: 31 bájt a teljes reklámcsomagra, mínusz a kötelező AD-típusok. Az Apple iBeacon esetében a teljes csomag 30 bájtot foglal, csak a Flags (3 bájt) számára hagyva helyet. Az Eddystone esetében — legfeljebb 31 bájt. A kompakt egyedi formátumok 4–8 bájtban foglalhatják a hőmérsékletet, páratartalmat vagy nyomást.
Az advertising data helyes csomagolása — annak művészete, hogy a maximálisan hasznos információt a 31 bájt korlátozott helyére elhelyezzük. A stratégia az eszköz rendeltetésétől függ: a jeladónak azonosítóra, az IoT-érzékelőnek leolvasásokra, a fitneszkövetőnek névre és szolgáltatás UUID-kre van szüksége. Általános elv: minél gyorsabban kell a Central-nak döntést hoznia, annál kritikusabb adatoknak kell lenniük a reklám PDU-ban.
Javasolt stratégia: reklám PDU (első 31 bájt) — Flags (3 bájt) + egy 16 bites Service UUID (4 bájt) + rövidített név (legfeljebb 12 karakter = 14 bájt) + Manufacturer Data (legfeljebb 10 bájt). Scan Response (második 31 bájt) — teljes név (maradék) + további Service UUID + TX Power Level (3 bájt). Ez a felosztás lehetővé teszi a Central számára, hogy gyorsan szűrje az eszközöket UUID alapján.
| Prioritás | AD-típus | Méret | Helyezze el |
|---|---|---|---|
| 1 (kötelező) | Flags (0x01) | 3 bájt | Reklám PDU |
| 2 (szűrés) | Service UUID (0x02–0x03) | 4+ bájt | Reklám PDU |
| 3 (azonosítás) | Local Name (0x08–0x09) | 2+ bájt | Reklám PDU (rövidített) |
| 4 (kiegészítő) | TX Power Level (0x0A) | 3 bájt | Scan Response |
| 5 (egyedi) | Manufacturer Data (0xFF) | 4+ bájt | Reklám PDU / Scan Response |
| 6 (teljes adatok) | Többi UUID | Mérettől függően | Scan Response |
Az advertising data hibakeresése kötelező szakasz a BLE-eszköz fejlesztésében. Használja a nRF Connect-et (Nordic Semiconductor) vagy a Wireshark-ot Bluetooth-elemzővel a csomag nyers adatainak megtekintéséhez. Ellenőrizze, hogy minden AD-típusnak helyes a Length-je, a hosszúságok összege nem haladja-e meg a 31 bájtot, és a Flags megfelelően van-e beállítva az Ön használati forgatókönyvéhez.
Gyakran ismételt kérdések
A Bluetooth Controller stack elutasítja a határt meghaladó adatokat, vagy nem küldi el a csomagot. Ellenőrizze az AD-elemek teljes hosszát a reklámcsomag összeállításakor. Ha az adatok nem férnek el — helyezzen át egy részt a Scan Response-ba, vagy használja az Extended Advertising (BLE 5.0) funkciót 251 bájtos korláttal.
Igen, a Manufacturer Specific Data (0xFF) segítségével. Csomagolja a leolvasásokat 4–8 bájtba: például hőmérséklet (2 bájt fixed-point formátumban), páratartalom (2 bájt), akkumulátorfeszültség (2 bájt). Ez a megközelítés lehetővé teszi a Central számára, hogy csatlakozás nélkül olvassa az adatokat, energiát takarítva meg.
Egyedi szolgáltatásokhoz használja a 128 bites UUID-t (AD Type 0x06–0x07). Ha az UUID nem fér el a reklám PDU-ban (16 bájt egy UUID számára), helyezze át a Scan Response-ba, vagy használja a rövidített Incomplete (0x06) formátumot csak az első egy-két UUID jelzésére.
Complete — a csomagban az eszköz összes szolgáltatásának UUID-je fel van sorolva. Incomplete — csak az UUID-k egy része (általában a legfontosabbak). A Central nem támaszkodhat az Incomplete-re teljes listaként, de gyors szűrésre használja. A teljes lista a GATT Discovery után érhető el.
Gyakori ok — helytelen Flags (0x01). Győződjön meg arról, hogy a BR/EDR Not Supported bit be van állítva. Második ok — a Service UUID hiánya a reklámcsomagban (az iOS UUID alapján szűr). Harmadik — az eszköz túl ritkán reklámoz (az iOS legfeljebb 1000 ms intervallumot vár).
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is