Peripheral — что это, роль в BLE и как рекламирует сервисы

Автор: IT Sectr Опубликовано: 2026-07-15 Время чтения: 9 мин

Peripheral — это устройство в архитектуре Bluetooth Low Energy, которое рекламирует свои сервисы через advertising-пакеты и ожидает подключения от Central. В экосистеме IoT Peripheral — обычно устройство с ограниченным энергопотреблением: датчик температуры, умная лампа, фитнес-браслет, маячок (Beacon). Bluetooth Core Specification 5.4 (2023) определяет рекламный протокол: Peripheral периодически отправляет advertising-пакеты, содержащие имя устройства, список сервисов и пользовательские данные, а Central сканирует эти пакеты и решает, подключаться ли. После установки соединения Peripheral выступает в роли GATT-сервера, предоставляя сервисы и характеристики для чтения и записи.

Главное

  • Peripheral — пассивное BLE-устройство, которое рекламирует сервисы и ждёт подключения от Central.
  • Рекламные пакеты (advertising) содержат имя устройства, UUID сервисов, данные производителя и RSSI для оценки расстояния.
  • Peripheral выступает в роли GATT-сервера, который хранит сервисы и характеристики для доступа Central.
  • Энергопотребление Peripheral может составлять от 5 мкА в режиме сна до 15 мА при активной передаче данных.
  • После подключения Peripheral может отключать рекламу для экономии энергии и включать её снова при необходимости.

Что такое Peripheral в BLE?

Peripheral — это устройство BLE, которое реализует GATT-сервер и рекламирует свои возможности через advertising-каналы. В отличие от Central, которое активно ищет устройства, Peripheral пассивно ожидает подключения. Это асимметричная модель, оптимизированная для энергоэффективности устройств с батарейным питанием.

Peripheral может находиться в нескольких режимах: advertising (реклама), connected (подключён к Central), sleeping (сон с отключённой рекламой). В режиме advertising Peripheral периодически отправляет короткие пакеты данных, потребляя при этом минимальную энергию. После подключения Peripheral переходит в connected mode, где обменивается данными с Central согласно согласованному connection interval.

По данным Bluetooth Core Specification 5.4 (2023), устройство может динамически переключаться между ролями Peripheral и Central, но в каждый момент времени для одного соединения роль фиксирована. Типичный сценарий: IoT-датчик постоянно работает в роли Peripheral, а смартфон управляет подключением как Central.

Разработчику важно понимать: Peripheral определяет, какие сервисы и характеристики доступны, и управляет доступом к ним. Структура GATT-сервера на Peripheral определяет, какие данные может читать Central и какие команды может записывать.

Процесс рекламы (Advertising)

Advertising (реклама) — это механизм, с помощью которого Peripheral сообщает о своём присутствии. Peripheral отправляет advertising-пакеты на трёх выделенных каналах (37, 38, 39) с интервалом от 20 мс до 10.24 секунд. Каждый рекламный пакет содержит фиксированную информацию и может включать опциональные данные.

Существует два типа рекламных пакетов: advertising PDU (основной пакет) и scan response PDU (ответ на запрос Central). Основной пакет содержит обязательные поля: тип пакета, адрес отправителя, данные. Если Central отправляет scan request, Peripheral отвечает дополнительным пакетом с более полной информацией — например, полным именем устройства.

Параметры advertising влияют на скорость обнаружения и энергопотребление. Advertising interval — время между отправкой пакетов. Чем короче интервал, тем быстрее Central обнаружит устройство, но тем больше энергии потребляет Peripheral. Рекомендуемый интервал: 100–1000 мс для большинства устройств.

ПараметрДиапазонВлияниеРекомендация
Advertising Interval20 ms – 10.24 sСкорость обнаружения, энергия100–1000 мс для баланса
Advertising Channels37, 38, 39Надёжность обнаруженияВсе 3 канала обязательно
Tx Power-20 – +10 dBmДальность, помехи0 dBm для помещения, +4 dBm для улицы
Advertising Timeout0 – 180 секундДлительность рекламы0 (бесконечно) для маячков

Структура рекламного пакета

Рекламный пакет BLE имеет ограничение в 31 байт для advertising PDU и ещё 31 байт для scan response. Внутри пакета данные организованы в формате AD Structure (Advertising Data Structure): каждое поле имеет тип (1 байт), длину (1 байт) и значение.

Наиболее часто используемые AD Type: Flags (0x01) — режимы подключения и обнаружения, Local Name (0x08 или 0x09) — имя устройства, Service UUID List (0x02–0x07) — список UUID сервисов, Manufacturer Specific Data (0xFF) — данные производителя. Правильная упаковка данных в 31-байтный пакет — важная задача разработчика встраиваемых устройств.

Для устройств, которым нужно передать больше данных, существует extended advertising (BLE 5.0+), который увеличивает размер рекламного пакета до 251 байта и добавляет новые типы пакетов. Extended advertising также поддерживает каналы с кодированием (coded PHY) для увеличения дальности до 1 км на открытой местности.

При проектировании рекламного пакета учитывайте: чем больше данных в advertising-пакете, тем выше вероятность коллизии с другими устройствами. Для быстрого обнаружения рекомендуется помещать только критичные данные (Service UUID) в advertising PDU, а дополнительные данные — в scan response.

Peripheral как GATT-сервер

GATT-сервер на Peripheral содержит все сервисы и характеристики, которые Central может обнаружить и с которыми может взаимодействовать. После подключения Central обнаруживает сервисы (discover services), затем характеристики (discover characteristics) и взаимодействует с ними через GATT-протокол.

Peripheral как GATT-сервер должен корректно обрабатывать запросы от Central: чтение (read request), запись (write request), уведомления (notification) и подтверждённые уведомления (indication). Каждый запрос проходит через GATT-таблицу, где каждому атрибуту (сервису, характеристике, дескриптору) соответствует Handle — 16-битный адрес.

Разработчик Peripheral определяет права доступа к каждому атрибуту: только чтение, только запись, чтение и запись, с шифрованием или без. Для конфиденциальных данных (персональная информация, медицинские показатели) рекомендуется включать требование шифрования через MITM Protection.

Peripheral в iOS: CBPeripheralManager

CBPeripheralManager — класс Core Bluetooth для реализации роли Peripheral на iOS. Он управляет GATT-сервером, публикует сервисы и характеристики, обрабатывает запросы от Central. В отличие от CBCentralManager, CBPeripheralManager не сканирует — он только рекламирует и обслуживает подключения.

Основные шаги реализации Peripheral на iOS: инициализация CBPeripheralManager, добавление сервисов через add, запуск рекламы через startAdvertising, обработка запросов от Central через делегат CBPeripheralManagerDelegate.

swift
import CoreBluetooth

class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {

    private var peripheralManager: CBPeripheralManager!

    func startAdvertising() {
        let advertisementData: [String: Any] = [
            CBAdvertisementDataLocalNameKey: "BLE Sensor",
            CBAdvertisementDataServiceUUIDsKey: [
                CBUUID("180F")
            ]
        ]
        peripheralManager.startAdvertising(advertisementData)
    }

    func peripheralManagerDidUpdateState(
        _ peripheral: CBPeripheralManager
    ) {
        if peripheral.state == .poweredOn {
            startAdvertising()
        }
    }
}

iOS позволяет Peripheral работать в фоновом режиме при наличии ключа bluetooth-peripheral в Background Modes. В фоне iOS может рекламироваться с ограниченным набором данных и обслуживать подключения. Для длительной рекламы (более 180 секунд) используйте опцию CBAdvertisementDataWaitForResponseFromCentral для экономии энергии.

Peripheral в Android: BluetoothLeAdvertiser

Android предоставляет BluetoothLeAdvertiser для работы в роли Peripheral (начиная с API 21). API позволяет запускать рекламу с настраиваемыми параметрами: мощность передатчика, интервал рекламы, данные пакета. Android также поддерживает extended advertising (BLE 5.0) на совместимых устройствах.

java
import android.bluetooth.le.*;

private BluetoothLeAdvertiser advertiser;

public void startPeripheral() {
    BluetoothAdapter adapter =
        BluetoothAdapter.getDefaultAdapter();
    advertiser = adapter.getBluetoothLeAdvertiser();

    AdvertiseData data = new AdvertiseData.Builder()
        .setIncludeDeviceName(true)
        .addServiceUuid(
            new ParcelUuid(
                UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB")
            )
        )
        .build();

    AdvertiseSettings settings = new AdvertiseSettings.Builder()
        .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
        .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
        .build();

    advertiser.startAdvertising(
        settings, data, advertiseCallback
    );
}

На Android поддержка Peripheral зависит от производителя и версии ОС. Не все устройства поддерживают BluetoothLeAdvertiser — проверяйте через adapter.isMultipleAdvertisementSupported(). Начиная с Android 10, для работы в роли Peripheral требуется разрешение BLUETOOTH_ADVERTISE, а также runtime-запрос для приложений с target SDK 31+.

Энергоэффективность Peripheral

Энергоэффективность — ключевое преимущество BLE, и Peripheral играет в этом главную роль. Устройство может работать от батарейки CR2032 (220 мАч) более года благодаря оптимизированному энергопотреблению. Большую часть времени Peripheral проводит в режиме сна с отключённой рекламой, просыпаясь только для отправки рекламного пакета или обработки запроса от Central.

Энергопотребление Peripheral в разных режимах: режим сна (deep sleep) — 1–5 мкА, idle с включённым таймером — 10–50 мкА, advertising — 5–15 мА (на время отправки пакета), connected — 5–10 мА (на время connection event). При advertising interval 1000 мс и длительности пакета 4 мс, средний ток составляет около 50–100 мкА.

По данным Texas Instruments Application Report (SWRA478, 2024), оптимизация advertising interval с 100 мс до 1000 мс снижает среднее энергопотребление на 90%. Дополнительная экономия достигается использованием slave latency (пропуск connection events), уменьшением Tx Power при коротких расстояниях и отключением рекламы после подключения (connectable advertising).

Часто задаваемые вопросы

Может ли Peripheral инициировать отправку данных?

Да, через механизм уведомлений (Notify/Indicate). Хотя инициатором соединения всегда выступает Central, после подключения Peripheral может отправлять данные через GATT-уведомления без явного запроса от Central. Для этого Central должен предварительно подписаться через CCCD.

Как долго может рекламироваться Peripheral?

Продолжительность рекламы не ограничена спецификацией, но на практике ограничена энергией батареи. В iOS Peripheral может рекламироваться в фоне не более 180 секунд за сессию без дополнительных настроек. На Android реклама может работать неограниченно, но значительно сокращает время автономной работы.

Как уменьшить энергопотребление Peripheral без потери функциональности?

Увеличьте advertising interval (рекомендуется 500–1000 мс), используйте slave latency для пропуска connection events, отключайте рекламу после подключения и выбирайте минимальный Tx Power, достаточный для стабильной связи на нужном расстоянии.

Что такое non-connectable advertising и для чего он используется?

Non-connectable advertising — режим, при котором Peripheral рекламируется, но не принимает запросы на подключение. Используется для маячков (Beacon), которые только передают данные (например, идентификатор магазина) без установки двустороннего соединения. Экономит энергию по сравнению с connectable advertising.

Какие данные можно передавать в рекламном пакете (31 байт)?

В 31 байт можно включить: флаги (3 байта), имя устройства (до 28 байт в сокращённом виде), список UUID сервисов (2–16 байт на UUID), данные производителя (до 26 байт). Оптимальная стратегия — помещать UUID сервисов в advertising PDU для фильтрации, а полное имя — в scan response.

Итоги

  • Peripheral — GATT-сервер BLE, который рекламирует свои сервисы и ожидает подключения от Central для обмена данными.
  • Рекламные пакеты передаются на каналах 37, 38, 39 с интервалом от 20 мс до 10.24 с и ограничены 31 байтом данных.
  • Peripheral хранит сервисы и характеристики в GATT-таблице, предоставляя Central доступ к данным через чтение, запись и уведомления.
  • В iOS Peripheral реализуется через CBPeripheralManager, в Android — через BluetoothLeAdvertiser с GATT-сервером.
  • Энергопотребление Peripheral в режиме сна составляет 1–5 мкА, что позволяет работать до года от батарейки CR2032.
  • Оптимизация advertising interval и slave latency может снизить энергопотребление до 90% без потери функциональности.
  • Правильная структура рекламного пакета и GATT-сервера определяет совместимость, скорость обнаружения и эффективность BLE-устройства.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

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

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