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 ГГц, з яких 37 (2402 МГц), 38 (2426 МГц) та 39 (2480 МГц) виділені виключно для 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 | З підтримкою scan | Так | Так |
| 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 capability.
Extended Advertising (BLE 5.0) — це розширення механізму реклами, яке збільшує розмір advertising-пакета з 31 до 251 байта та додає нові типи пакетів. Extended Advertising також підтримує coded PHY для збільшення дальності зв'язку до 1 км на відкритій місцевості та періодичну рекламу (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 м | До 1000 м (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 мс. Якщо потрібне швидке виявлення (наприклад, для підключення навушників) — 20–50 мс. Для датчиків з рідкою відправкою даних — 1000–2000 мс для економії енергії.
Три канали (37, 38, 39) — це компроміс між надійністю виявлення та пропускною здатністю. Один канал може бути зайнятий Wi-Fi, але пристрій буде виявлено на двох інших. Канал 38 знаходиться в зоні мінімальних перешкод між Wi-Fi каналами.
Advertising — основний споживач енергії в BLE. При інтервалі 1000 мс середній струм становить 50–100 µA, що дозволяє пристрою працювати рік від батарейки CR2032. При інтервалі 20 мс струм зростає до 1–2 мA, знижуючи час роботи до кількох тижнів.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також