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 при отсутствии коллизий close to 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 мА. При интервале 1000 ms — обнаружение займёт до 1 секунды, но средний ток упадёт до 50–100 мкА. Для большинства 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 мкА, что позволяет устройству работать год от батарейки CR2032. При интервале 20 мс ток возрастает до 1–2 мА, снижая время работы до нескольких недель.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также