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 µA в режим на сън до 15 mA при активен пренос на данни.
  • След свързване, Peripheral може да изключи рекламата за пестене на енергия и да я включи отново при необходимост.

Какво е Peripheral в BLE?

Peripheral — BLE устройство, което имплементира GATT сървър и рекламира възможностите си чрез advertising канали. За разлика от Central, което активно търси устройства, Peripheral пасивно очаква свързване. Това е асиметричен модел, оптимизиран за енергийна ефективност на устройства с батерийно захранване.

Peripheral може да бъде в няколко режима: advertising (реклама), connected (свързан към Central), sleeping (сън с изключена реклама). В режим advertising, Peripheral периодично изпраща кратки пакети данни, консумирайки минимална енергия. След свързване, Peripheral преминава в режим connected, където обменя данни с 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 ms до 10.24 секунди. Всеки рекламен пакет съдържа фиксирана информация и може да включва опционални данни.

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

Параметрите на advertising влияят на скоростта на откриване и консумацията на енергия. Advertising interval — времето между изпращането на пакети. Колкото по-кратък е интервалът, толкова по-бързо Central открива устройството, но толкова повече енергия консумира Peripheral. Препоръчителен интервал: 100–1000 ms за повечето устройства.

ПараметърДиапазонВлияниеПрепоръка
Advertising Interval20 ms – 10.24 sСкорост на откриване, енергия100–1000 ms за баланс
Advertising Channels37, 38, 39Надеждност на откриванеИ 3-те канала задължително
Tx Power−20 – +10 dBmОбхват, смущения0 dBm за вътрешни помещения, +4 dBm за открито
Advertising Timeout0 – 180 секундиПродължителност на реклама0 (безкрайно) за beacon

Структура на рекламния пакет

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 km на открито.

При проектиране на рекламния пакет вземете предвид: колкото повече данни има в 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 mAh) повече от една година благодарение на оптимизирана консумация на енергия. Peripheral прекарва по-голямата част от времето си в режим на сън с изключена реклама, събуждайки се само за изпращане на рекламен пакет или обработка на заявка от Central.

Консумацията на енергия на Peripheral в различни режими: режим на сън (deep sleep) — 1–5 µA, idle с включен таймер — 10–50 µA, advertising — 5–15 mA (за времето на изпращане на пакет), connected — 5–10 mA (за времето на connection event). При advertising interval от 1000 ms и продължителност на пакета 4 ms, средният ток е около 50–100 µA.

Според Texas Instruments Application Report (SWRA478, 2024), оптимизирането на advertising interval от 100 ms на 1000 ms намалява средната консумация на енергия с 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 ms), използвайте 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 — BLE GATT сървър, който рекламира услугите си и очаква свързване от Central за обмен на данни.
  • Рекламните пакети се предават на канали 37, 38, 39 с интервал от 20 ms до 10.24 s и са ограничени до 31 байта данни.
  • Peripheral съхранява услуги и характеристики в GATT таблица, предоставяйки на Central достъп до данни чрез четене, запис и уведомления.
  • В iOS, Peripheral се имплементира чрез CBPeripheralManager, в Android — чрез BluetoothLeAdvertiser с GATT сървър.
  • Консумацията на енергия на Peripheral в режим на сън е 1–5 µA, което позволява работа до една година на батерия CR2032.
  • Оптимизирането на advertising interval и slave latency може да намали консумацията на енергия до 90% без загуба на функционалност.
  • Правилната структура на рекламния пакет и GATT сървъра определя съвместимостта, скоростта на откриване и ефективността на BLE устройството.

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също