Advertising (reclamă) — este un mecanism in Bluetooth Low Energy prin care dispozitivul Peripheral isi anunta prezenta, trimițand pachete scurte de date pe trei canale dedicate (37, 38, 39). Bluetooth Core Specification 5.4 (2023) defineste doua tipuri de reclama: connectable — dispozitivul este gata de conectare, si non-connectable — folosit de balize (Beacon) care doar transmit date fara a stabili o conexiune bidirectionala. Parametrii reclamei — intervalul de la 20 ms la 10.24 s, puterea emițătorului de la -20 la +10 dBm si tipul pachetului — influenteaza direct viteza de detectare a dispozitivului si consumul sau de energie, ceea ce este critic in dezvoltarea dispozitivelor IoT alimentate cu baterii.
Puncte principale
Advertising (reclama) — este procesul de transmitere periodica a pachetelor scurte de date prin care dispozitivul BLE isi anunta prezenta si disponibilitatea. Spre deosebire de Bluetooth clasic, unde cautarea dispozitivelor dureaza secunde, BLE advertising permite detectarea dispozitivului in milisecunde, consumand energie minima.
Arhitectura BLE imparte dispozitivele in doua roluri: Peripheral (face reclama) si Central (scaneaza). Peripheral trimite pachete de advertising, iar Central scaneaza canalul si decide conectarea. Acest model asimetric este avantajul cheie al BLE: dispozitivul care face reclama consuma energie doar pentru trimiterea pachetelor scurte, nu pentru ascultarea continua a canalului.
Procesul de advertising consta din trei etape: advertising event (trimiterea pachetului pe toate cele trei canale), scan request/response (schimb optional cu Central) si connection request (initierea conexiunii de catre Central). Fiecare etapa este gestionata de Bluetooth Controller la nivelul Link Layer.
BLE utilizeaza 40 de canale in banda de 2.4 GHz, dintre care 37 (2402 MHz), 38 (2426 MHz) si 39 (2480 MHz) sunt dedicate exclusiv pentru advertising. Trei canale reprezinta un compromis intre fiabilitatea detectarii si latimea de banda: un canal poate fi ocupat de Wi-Fi sau alte interferente, dar dispozitivul va fi detectat pe celelalte doua.
Canalul 37 se afla langa canalul Wi-Fi 1, canalul 39 — langa canalul Wi-Fi 6, iar canalul 38 este situat intre ele, in zona de interferenta minima. Alegerea a trei canale garanteaza ca dispozitivul va fi detectat chiar si in conditii de trafic radio intens — de exemplu, intr-un centru comercial cu zeci de puncte de acces Wi-Fi.
Peripheral trimite pachetul de advertising secvential pe toate cele trei canale — aceasta se numeste advertising event. Dispozitivul central scaneaza cate un canal odata, comutand intre ele conform algoritmului implementat in Bluetooth Controller. Probabilitatea de detectare in timpul unui advertising event in absenta coliziunilor este aproape de 100%.
Bluetooth Core Specification defineste mai multe tipuri de advertising PDU (Protocol Data Unit), fiecare cu scopul sau. Tipurile principale: ADV_IND (connectable undirected advertising) — reclama standard cu posibilitate de conectare, ADV_NONCONN_IND (non-connectable undirected advertising) — doar reclama fara conectare, ADV_SCAN_IND (scannable undirected advertising) — accepta scan request, ADV_DIRECT_IND (directed advertising) — reclama pentru un Central specific.
ADV_IND — cel mai raspandit tip, folosit in majoritatea dispozitivelor BLE. Dupa primirea ADV_IND, Central poate trimite un connection request si stabili conexiunea. ADV_NONCONN_IND este folosit de balize (Beacon): dispozitivul face reclama dar nu accepta cereri de conectare — doar transmisie unidirectionala de date.
| Tip PDU | Descriere | Conectare | Scan response |
|---|---|---|---|
| ADV_IND | Reclama standard | Da | Da |
| ADV_DIRECT_IND | Reclama pentru un Central specific | Da | Nu |
| ADV_NONCONN_IND | Fara conectare (balize) | Nu | Nu |
| ADV_SCAN_IND | Cu suport de scanare | Da | Da |
| ADV_EXT_IND | Extended advertising (BLE 5.0) | Da | Da |
ADV_DIRECT_IND contine adresa Central-tinta, permitand stabilirea rapida a conexiunii fara a astepta scanarea. Se foloseste cand dispozitivele se cunosc deja — de exemplu, dupa reconectarea la un smartphone asociat anterior. Acest tip reduce consumul de energie deoarece nu necesita reclama pe toate canalele.
Advertising interval — este timpul dintre advertising event-uri consecutive. Specificatia permite un interval de la 20 ms la 10.24 s cu pas de 0.625 ms. Intervalul real se calculeaza ca suma dintre o valoare fixa si o intarziere aleatoare (0–10 ms), ceea ce reduce probabilitatea coliziunilor intre mai multe dispozitive care fac reclama.
Alegerea intervalului reprezinta un echilibru intre viteza de detectare si consumul de energie. La intervalul de 20 ms, dispozitivul va fi detectat in 20–30 ms, dar curentul mediu va fi de aproximativ 1–2 mA. La intervalul de 1000 ms — detectarea va dura pana la 1 secunda, dar curentul mediu va scadea la 50–100 µA. Pentru majoritatea dispozitivelor IoT, intervalul recomandat este 200–1000 ms.
Conform Texas Instruments Application Report SWRA478 (2024), cresterea advertising interval de la 100 ms la 1000 ms reduce consumul de energie cu 90%. Daca dispozitivul nu necesita detectare instantanee (de exemplu, un senzor de temperatura care transmite date o data pe minut), intervalul optim este 1000–2000 ms.
Un parametru suplimentar — advertising timeout — timpul maxim in care dispozitivul face reclama. In iOS, Peripheral opreste automat reclama dupa 180 de secunde in modul de fundal. In Android nu exista o astfel de limitare, dar producatorii pot adauga propriile limite.
Scan Response — este un pachet de date suplimentar (pana la 31 de octeti) pe care Peripheral il trimite ca raspuns la un scan request de la Central. Scan request este trimis de Central dupa primirea pachetului de advertising, daca are nevoie de mai multe informatii inainte de conectare. Scan Response nu necesita reclama suplimentara — este trimis doar la cerere, economisind canalul.
Distributia tipica a datelor: in advertising PDU (31 de octeti) se plaseaza flag-urile (3 octeti), UUID-urile serviciilor (2–16 octeti) si datele producatorului (octetii ramasi). In scan response se transmite numele complet al dispozitivului (pana la 28 de octeti) si UUID-uri suplimentare sau TX Power Level. Aceasta impartire permite Central sa filtreze rapid dispozitivele dupa UUID fara a citi scan response.
La proiectarea pachetului de advertising, retineti: daca toti cei 31 de octeti sunt ocupati in advertising PDU, Central nu va putea determina daca dispozitivul suporta scan response. Se recomanda sa lasati cel putin 3–5 octeti liberi in advertising PDU pentru a indica capacitatea de scan response.
Extended Advertising (BLE 5.0) — este o extensie a mecanismului de reclama care mareste dimensiunea pachetului de advertising de la 31 la 251 de octeti si adauga noi tipuri de pachete. Extended Advertising suporta de asemenea coded PHY pentru cresterea razei de comunicare pana la 1 km in teren deschis si reclama periodica (Periodic Advertising) pentru sincronizarea mai multor Central-uri.
Principalele inovatii: ADV_EXT_IND — extended advertising PDU care poate transmite pana la 251 de octeti de date intr-un singur pachet. Extended Advertising utilizeaza canalele primare (37, 38, 39) doar pentru a indica pe ce canal secundar (0–36) sunt transmise datele complete. Aceasta reduce incarcarea canalelor de reclama si mareste latimea de banda totala a sistemului.
Periodic Advertising — un mecanism suplimentar prin care Peripheral trimite date pe canale secundare cu un interval fix, iar Central se poate sincroniza cu aceasta secventa. Folosit pentru servicii care necesita actualizari regulate de date — de exemplu, transmisia audio sau citirile senzorilor in timp real.
| Parametru | Standard BLE | Extended BLE 5.0 |
|---|---|---|
| Dim. maxima pachet | 31 de octeti | 251 de octeti |
| Canale | Doar 37, 38, 39 | + secundare 0–36 |
| Raza | Pana la 100 m | Pana la 1000 m (coded PHY) |
| Viteza | 1 Mbps | 125 kbps – 2 Mbps |
| Periodic | Nu | Da |
iOS (Core Bluetooth) ofera CBPeripheralManager pentru gestionarea reclamei. Parametrii de advertising se seteaza prin dictionarul advertisementData cu cheile CBAdvertisementDataLocalNameKey (numele dispozitivului), CBAdvertisementDataServiceUUIDsKey (UUID-urile serviciilor), CBAdvertisementDataTxPowerLevelKey (puterea). iOS gestioneaza automat advertising interval si nu permite setarea manuala a acestuia.
import CoreBluetooth
class AdvertiserManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startBLEAdvertising() {
let data: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Beacon",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
],
CBAdvertisementDataIsConnectable: true
]
peripheralManager.startAdvertising(data)
}
}
Android (BluetoothLeAdvertiser) ofera un control mai detaliat. Disponibile: AdvertiseSettings — setarea modului (LOW_POWER, BALANCED, LOW_LATENCY), a puterii emițătorului si a intervalului; AdvertiseData — datele pachetului. Android suporta extended advertising (BLE 5.0) pe dispozitive compatibile, dar ponderea acestor dispozitive pe piata este de aproximativ 30–40%.
BluetoothLeAdvertiser advertiser =
BluetoothAdapter.getDefaultAdapter()
.getBluetoothLeAdvertiser();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(
AdvertiseSettings.ADVERTISE_MODE_LOW_POWER
)
.setTxPowerLevel(
AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM
)
.build();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(new ParcelUuid(
UUID.fromString(
"0000180F-0000-1000-8000-00805F9B34FB"
)
))
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
La dezvoltarea unei aplicatii BLE cross-platform, luati in considerare diferentele: iOS nu permite controlul direct al advertising interval, dar garanteaza functionarea stabila pe toate dispozitivele; Android ofera control complet, dar fragmentarea versiunilor si producatorilor poate duce la incompatibilitati. Se recomanda testarea advertising pe dispozitive reale ale ambelor platforme.
Intrebari frecvente
Connectable advertising (ADV_IND) permite Central sa stabileasca o conexiune bidirectionala cu dispozitivul. Non-connectable (ADV_NONCONN_IND) — doar transmisie unidirectionala de date, folosita de balize (Beacon) pentru a transmite un identificator fara posibilitatea de conectare.
Pachetul standard de advertising — 31 de octeti, scan response — inca 31 de octeti. Extended Advertising (BLE 5.0+) mareste limita la 251 de octeti prin utilizarea canalelor secundare pentru transmiterea datelor.
Pentru majoritatea dispozitivelor IoT se recomanda 500–1000 ms. Daca este necesara detectarea rapida (de exemplu, pentru conectarea castilor) — 20–50 ms. Pentru senzori cu transmitere rara de date — 1000–2000 ms pentru economisirea energiei.
Trei canale (37, 38, 39) reprezinta un compromis intre fiabilitatea detectarii si latimea de banda. Un canal poate fi ocupat de Wi-Fi, dar dispozitivul va fi detectat pe celelalte doua. Canalul 38 se afla in zona de interferenta minima intre canalele Wi-Fi.
Advertising este principalul consumator de energie in BLE. La intervalul 1000 ms, curentul mediu este de 50–100 µA, ceea ce permite dispozitivului sa functioneze un an pe o baterie CR2032. La intervalul de 20 ms, curentul creste la 1–2 mA, reducand durata de functionare la cateva saptamani.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și