Advertising (реклама) — е механизъм в Bluetooth Low Energy, чрез който Peripheral устройството съобщава за присъствието си, изпращайки кратки пакети данни на три отделни канала (37, 38, 39). Bluetooth Core Specification 5.4 (2023) определя два типа реклама: connectable — устройството е готово за свързване, и non-connectable — използва се от маяци (Beacon), които само предават данни без установяване на двупосочна връзка. Параметрите на рекламата — интервал от 20 ms до 10.24 s, мощност на предавателя от -20 до +10 dBm и тип пакет — пряко влияят върху скоростта на откриване на устройството и неговата консумация на енергия, което е критично важно при разработката на IoT устройства с батерийно захранване.
Основни точки
Advertising (реклама) — е процесът на периодично изпращане на кратки пакети данни, чрез който BLE устройството съобщава за своето присъствие и достъпност. За разлика от класическия Bluetooth, където търсенето на устройства отнема секунди, BLE advertising позволява откриване на устройството за милисекунди с минимална консумация на енергия.
BLE архитектурата разделя устройствата на две роли: Peripheral (рекламира) и Central (сканира). Peripheral изпраща advertising пакети, а Central сканира канала и взема решение за свързване. Този асиметричен модел е ключово предимство на BLE: рекламиращото устройство харчи енергия само за изпращане на кратки пакети, а не за непрекъснато слушане на канала.
Процесът на advertising се състои от три етапа: advertising event (изпращане на пакет на всичките три канала), scan request/response (опционален обмен с Central) и connection request (иницииране на връзка от Central). Всеки етап се управлява от Bluetooth Controller на ниво Link Layer.
BLE използва 40 канала в обхвата 2.4 GHz, от които 37 (2402 MHz), 38 (2426 MHz) и 39 (2480 MHz) са отделени изключително за advertising. Три канала са компромис между надеждност на откриването и честотна лента: един канал може да бъде зает от Wi-Fi или други смущения, но устройството ще бъде открито на другите два.
Канал 37 се намира до Wi-Fi канал 1, канал 39 — до Wi-Fi канал 6, а канал 38 е разположен между тях, в зона на минимални смущения. Изборът на три канала гарантира, че устройството ще бъде открито дори в условия на гъст радио трафик — например в търговски център с десетки Wi-Fi точки за достъп.
Peripheral изпраща advertising пакета последователно на всичките три канала — това се нарича advertising event. Централното устройство сканира по един канал наведнъж, превключвайки между тях според алгоритъм, имплементиран в Bluetooth Controller. Вероятността за откриване по време на един advertising event при липса на колизии е близо до 100%.
Bluetooth Core Specification дефинира няколко типа advertising PDU (Protocol Data Unit), всеки със свое предназначение. Основни типове: ADV_IND (connectable undirected advertising) — стандартна реклама с възможност за свързване, ADV_NONCONN_IND (non-connectable undirected advertising) — само реклама без свързване, ADV_SCAN_IND (scannable undirected advertising) — поддържа scan request, ADV_DIRECT_IND (directed advertising) — реклама за конкретен Central.
ADV_IND — най-разпространеният тип, използван в повечето BLE устройства. След получаване на ADV_IND, Central може да изпрати connection request и да установи връзка. ADV_NONCONN_IND се използва от маяци (Beacon): устройството рекламира, но не приема заявки за свързване — само еднопосочно предаване на данни.
| Тип PDU | Описание | Свързване | Scan response |
|---|---|---|---|
| ADV_IND | Стандартна реклама | Да | Да |
| ADV_DIRECT_IND | Реклама за конкретен Central | Да | Не |
| ADV_NONCONN_IND | Без свързване (маяци) | Не | Не |
| ADV_SCAN_IND | С поддръжка на сканиране | Да | Да |
| ADV_EXT_IND | Extended advertising (BLE 5.0) | Да | Да |
ADV_DIRECT_IND съдържа адреса на целевия Central, което позволява бързо установяване на връзка без изчакване на сканиране. Използва се, когато устройствата вече се „познават" — например след повторно свързване към предварително сдвоен смартфон. Този тип намалява консумацията на енергия, тъй като не изисква реклама на всички канали.
Advertising interval — е времето между последователните advertising events. Спецификацията допуска интервал от 20 ms до 10.24 s със стъпка 0.625 ms. Реалният интервал се изчислява като сума от фиксирана стойност и случайно закъснение (0–10 ms), което намалява вероятността от колизии между няколко рекламиращи устройства.
Изборът на интервал е баланс между скоростта на откриване и консумацията на енергия. При интервал 20 ms устройството ще бъде открито за 20–30 ms, но средният ток ще бъде около 1–2 mA. При интервал 1000 ms — откриването ще отнеме до 1 секунда, но средният ток ще спадне до 50–100 µA. За повечето IoT устройства препоръчителният интервал е 200–1000 ms.
Според Texas Instruments Application Report SWRA478 (2024), увеличаването на advertising interval от 100 ms на 1000 ms намалява консумацията на енергия с 90%. Ако устройството не изисква незабавно откриване (например сензор за температура, който изпраща данни веднъж на минута), оптималният интервал е 1000–2000 ms.
Допълнителен параметър — advertising timeout — максималното време, през което устройството рекламира. В iOS, Peripheral автоматично изключва рекламата след 180 секунди във фонов режим. В Android няма такова ограничение, но производителите могат да добавят свои лимити.
Scan Response — е допълнителен пакет данни (до 31 байта), който Peripheral изпраща в отговор на scan request от Central. Scan request се изпраща от Central след получаване на advertising пакета, ако има нужда от повече информация преди свързване. Scan Response не изисква допълнителна реклама — изпраща се само при поискване, пестейки канал.
Типично разпределение на данните: в advertising PDU (31 байта) се поставят флагове (3 байта), UUID на услуги (2–16 байта) и данни на производителя (оставащите байтове). В scan response се предава пълното име на устройството (до 28 байта) и допълнителни UUID или TX Power Level. Това разделение позволява на Central бързо да филтрира устройства по UUID без да чете scan response.
При проектиране на advertising пакета вземете предвид: ако всички 31 байта са заети в advertising PDU, Central няма да може да определи дали устройството поддържа scan response. Препоръчва се да оставите поне 3–5 байта свободни в advertising PDU за указване на възможност за scan response.
Extended Advertising (BLE 5.0) — е разширение на механизма за реклама, което увеличава размера на advertising пакета от 31 на 251 байта и добавя нови типове пакети. Extended Advertising също поддържа coded PHY за увеличаване на обхвата на комуникация до 1 km на открито и периодична реклама (Periodic Advertising) за синхронизиране на няколко Central.
Основни нововъведения: ADV_EXT_IND — extended advertising PDU, който може да предава до 251 байта данни в един пакет. Extended Advertising използва първичните канали (37, 38, 39) само за да посочи на кой вторичен канал (0–36) се предават пълните данни. Това намалява натоварването на рекламните канали и увеличава общата честотна лента на системата.
Periodic Advertising — допълнителен механизъм, при който Peripheral изпраща данни на вторични канали с фиксиран интервал, а Central може да се синхронизира с тази последователност. Използва се за услуги, изискващи редовно обновяване на данни — например аудио предаване или показания на сензори в реално време.
| Параметър | BLE стандарт | Extended BLE 5.0 |
|---|---|---|
| Макс. размер на пакет | 31 байта | 251 байта |
| Канали | Само 37, 38, 39 | + вторични 0–36 |
| Обхват | До 100 m | До 1000 m (coded PHY) |
| Скорост | 1 Mbps | 125 kbps – 2 Mbps |
| Periodic | Не | Да |
iOS (Core Bluetooth) предоставя CBPeripheralManager за управление на рекламата. Параметрите на advertising се задават чрез речника advertisementData с ключове CBAdvertisementDataLocalNameKey (име на устройството), CBAdvertisementDataServiceUUIDsKey (UUID на услуги), CBAdvertisementDataTxPowerLevelKey (мощност). iOS автоматично управлява advertising interval и не позволява ръчно задаване.
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) предоставя по-подробен контрол. Налични: AdvertiseSettings — настройка на режим (LOW_POWER, BALANCED, LOW_LATENCY), мощност на предавателя и интервал; AdvertiseData — данни на пакета. Android поддържа extended advertising (BLE 5.0) на съвместими устройства, но делът на такива устройства на пазара е около 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
);
При разработка на междуплатформено BLE приложение вземете предвид разликите: iOS не позволява директен контрол на advertising interval, но гарантира стабилна работа на всички устройства; Android предоставя пълен контрол, но фрагментацията на версии и производители може да доведе до несъвместимост. Препоръчва се тестване на advertising на реални устройства от двете платформи.
Често задавани въпроси
Connectable advertising (ADV_IND) позволява на Central да установи двупосочна връзка с устройството. Non-connectable (ADV_NONCONN_IND) — само еднопосочно предаване на данни, използвано от маяци (Beacon) за излъчване на идентификатор без възможност за свързване.
Стандартният advertising пакет — 31 байта, scan response — още 31 байта. Extended Advertising (BLE 5.0+) увеличава лимита до 251 байта чрез използване на вторични канали за предаване на данни.
За повечето IoT устройства се препоръчва 500–1000 ms. Ако е необходимо бързо откриване (например за свързване на слушалки) — 20–50 ms. За сензори с рядко изпращане на данни — 1000–2000 ms за пестене на енергия.
Три канала (37, 38, 39) са компромис между надеждност на откриване и честотна лента. Един канал може да бъде зает от Wi-Fi, но устройството ще бъде открито на другите два. Канал 38 се намира в зоната на минимални смущения между Wi-Fi каналите.
Advertising е основният консуматор на енергия в BLE. При интервал 1000 ms средният ток е 50–100 µA, което позволява на устройството да работи една година на батерия CR2032. При интервал 20 ms токът нараства до 1–2 mA, намалявайки времето на работа до няколко седмици.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също