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 при отсутствии коллизий 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_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 мА. При интервале 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: дополнительные данные

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 мкА, что позволяет устройству работать год от батарейки CR2032. При интервале 20 мс ток возрастает до 1–2 мА, снижая время работы до нескольких недель.

Итоги

  • 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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