Advertising в BLE: що це, формати пакетів і механізми реклами

Автор: IT Sectr Опубліковано: 2026-07-15 Час читання: 11 хв

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-пристроїв, що працює на трьох виділених каналах 37, 38 і 39.
  • Стандартний рекламний пакет обмежений 31 байтом даних, extended advertising (BLE 5.0) збільшує ліміт до 251 байта.
  • Connectable advertising дозволяє Central підключитися до пристрою, non-connectable — тільки одностороння передача (маячки).
  • Інтервал реклами впливає на енергоспоживання: при інтервалі 1000 мс середній струм у 10 разів нижчий, ніж при 100 мс.
  • Scan response дозволяє передати додаткові 31 байт даних у відповідь на запит Central.

Що таке Advertising в BLE?

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_INDExtended 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: додаткові дані

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

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 може синхронізуватися з цією послідовністю. Використовується для сервісів, що потребують регулярного оновлення даних — наприклад, трансляція аудіо або показники датчиків у реальному часі.

ПараметрСтандарт BLEExtended BLE 5.0
Макс. розмір пакета31 байт251 байт
КаналиТільки 37, 38, 39+ вторинні 0–36
ДальністьДо 100 мДо 1000 м (coded PHY)
Швидкість1 Mbps125 kbps – 2 Mbps
PeriodicНіТак

Налаштування реклами в iOS та Android

iOS (Core Bluetooth) надає CBPeripheralManager для керування рекламою. Параметри advertising задаються через словник advertisementData з ключами CBAdvertisementDataLocalNameKey (ім'я пристрою), CBAdvertisementDataServiceUUIDsKey (UUID сервісів), CBAdvertisementDataTxPowerLevelKey (потужність). iOS автоматично керує advertising interval і не дозволяє встановлювати його вручну.

swift
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%.

java
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 та non-connectable advertising?

Connectable advertising (ADV_IND) дозволяє Central встановити двостороннє з'єднання з пристроєм. Non-connectable (ADV_NONCONN_IND) — тільки одностороння передача даних, використовується маячками (Beacon) для трансляції ідентифікатора без можливості підключення.

Скільки байт можна передати в рекламному пакеті?

Стандартний advertising-пакет — 31 байт, scan response — ще 31 байт. Extended Advertising (BLE 5.0+) збільшує ліміт до 251 байта за рахунок використання вторинних каналів для передачі даних.

Який advertising interval вибрати для IoT-пристрою?

Для більшості IoT-пристроїв рекомендується 500–1000 мс. Якщо потрібне швидке виявлення (наприклад, для підключення навушників) — 20–50 мс. Для датчиків з рідкою відправкою даних — 1000–2000 мс для економії енергії.

Чому BLE використовує три рекламних канали?

Три канали (37, 38, 39) — це компроміс між надійністю виявлення та пропускною здатністю. Один канал може бути зайнятий Wi-Fi, але пристрій буде виявлено на двох інших. Канал 38 знаходиться в зоні мінімальних перешкод між Wi-Fi каналами.

Як advertising впливає на час автономної роботи?

Advertising — основний споживач енергії в BLE. При інтервалі 1000 мс середній струм становить 50–100 µA, що дозволяє пристрою працювати рік від батарейки CR2032. При інтервалі 20 мс струм зростає до 1–2 мA, знижуючи час роботи до кількох тижнів.

Підсумки

  • Advertising — механізм виявлення BLE-пристроїв, що працює на трьох каналах (37, 38, 39) з розміром пакета до 31 байта.
  • Існує п'ять типів advertising PDU: ADV_IND, ADV_DIRECT_IND, ADV_NONCONN_IND, ADV_SCAN_IND та ADV_EXT_IND для BLE 5.0.
  • Інтервал реклами варіюється від 20 ms до 10.24 s і безпосередньо впливає на швидкість виявлення та енергоспоживання пристрою.
  • Scan Response надає додаткові 31 байт даних за запитом Central без збільшення енергоспоживання Peripheral.
  • Extended Advertising (BLE 5.0) збільшує пакет до 251 байта та підтримує дальність до 1 км через coded PHY.
  • В iOS advertising керується через CBPeripheralManager, в Android — через BluetoothLeAdvertiser з детальними налаштуваннями.
  • Правильний вибір advertising interval та типу пакета визначає енергоефективність та час автономної роботи BLE-пристрою.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також