Central — какво е, роля в BLE и как сканира устройства

Автор: IT Sectr Публикувано: 2026-07-15 Време за четене: 8 мин

Central — е устройство в архитектурата Bluetooth Low Energy, което инициира сканиране, установява връзка и управлява обмена на данни с периферни устройства. В контекста на мобилната разработка Central е смартфон или таблет с iOS или Android, който се свързва с BLE сензори, фитнес тракери и умни аксесоари. Според Bluetooth Core Specification 5.4 (2023) Central може едновременно да поддържа до 7 връзки с различни Peripheral, въпреки че реалното ограничение зависи от производителя на чипа и версията на операционната система. Core Bluetooth на iOS и android.bluetooth.le на Android предоставят пълно API за управление на ролята Central.

Основни точки

  • Central — активно BLE устройство, което сканира, свързва се и управлява обмена с периферията.
  • Сканирането се извършва чрез рекламни пакети — Central може да филтрира устройства по Service UUID за пестене на енергия.
  • Един Central може едновременно да поддържа до 7 връзки с различни Peripheral (зависи от имплементацията).
  • В мобилната разработка Central е смартфон, използващ Core Bluetooth (iOS) или android.bluetooth.le (Android).
  • Ролята Central консумира повече енергия от Peripheral поради постоянно сканиране и обработка на данни.

Какво е Central в BLE?

Central — е GATT клиент в архитектурата Bluetooth Low Energy, който инициира всички комуникации. За разлика от Peripheral, което пасивно очаква връзка и рекламира своите услуги, Central активно сканира ефира, открива рекламни пакети и инициира връзка.

Асиметричният модел Central-Peripheral е основна характеристика на BLE. Central управлява логиката на взаимодействие: решава към кое устройство да се свърже, кои услуги да изследва, кои характеристики да чете и записва. Peripheral изпълнява ролята на сървър за данни — съхранява услуги и характеристики, но не инициира връзки.

Според Bluetooth Core Specification 5.4 (2023) устройство може едновременно да бъде Central и Peripheral (dual role). Например смартфон може да бъде Central за фитнес гривна и Peripheral за друг смартфон, прехвърлящ файлове. Едновременната работа и в двете роли обаче увеличава консумацията на енергия и сложността на управление на връзките.

В екосистемата на мобилната разработка ролята Central е най-честият сценарий. Приложението на смартфона търси BLE устройства (сензори, слушалки, гривни), свързва се с тях и получава данни. Разработчикът използва API на операционната система за работа с Central: CBCentralManager в iOS, BluetoothLeScanner и BluetoothGatt в Android.

Процес на сканиране на устройства

Сканиране — е първият етап от работата на Central. Устройството слуша BLE радиоканалите (37, 38, 39) за откриване на рекламни пакети, които периодично изпраща Peripheral. Всеки рекламен пакет съдържа име на устройството, списък с UUID на услуги и потребителски данни.

Central може да работи в два режима на сканиране: passive scanning (само приемане на рекламни пакети) и active scanning (изпращане на заявка за сканиране за получаване на допълнителни данни чрез scan response). Passive scanning пести енергия, но дава по-малко информация. Active scanning позволява получаване на пълни данни от рекламния пакет, включително име на устройството и пълен списък с услуги.

Филтриране по UUID — важна оптимизация. Central може да сканира само устройства с определен Service UUID, игнорирайки останалите. Това не само пести енергия, но и опростява логиката на приложението: делегатът получава само подходящи устройства.

swift
import CoreBluetooth

class BLECentralManager: NSObject, CBCentralManagerDelegate {

    private var centralManager: CBCentralManager!

    override init() {
        super.init()
        centralManager = CBCentralManager(
            delegate: self,
            queue: nil
        )
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            central.scanForPeripherals(
                withServices: nil,
                options: [
                    CBCentralManagerScanOptionAllowDuplicatesKey: false
                ]
            )
        }
    }
}

Управление на връзките

Управление на връзките — основната отговорност на Central. След откриване на подходящ Peripheral, Central инициира връзка. BLE връзката се установява чрез процедура за установяване на връзка, която включва обмен на параметри: connection interval, slave latency и supervision timeout.

Connection interval определя колко често Central и Peripheral обменят данни след свързване. Интервалът може да бъде от 7.5 ms до 4 секунди. Колкото по-кратък е интервалът, толкова по-голяма е пропускателната способност, но и консумацията на енергия. Slave latency позволява на Peripheral да пропусне няколко събития на връзка за пестене на енергия. Supervision timeout — максималното време без отговор, след което връзката се счита за загубена.

Central отговаря за прекъсване на връзката след приключване на обмена на данни. BLE устройствата обикновено не поддържат връзката постоянно — Central се свързва, получава данни и прекъсва връзката. Това е стандартен модел за IoT сензори: Central сканира, намира температурен сензор, свързва се, чете стойността и прекъсва връзката.

ПараметърДиапазонПредназначениеПрепоръка
Connection Interval7.5 ms – 4 sЧестота на обмен на данни30–50 ms за потоци, 1–4 s за редки данни
Slave Latency0–499 събитияПропускане на събития от Peripheral4–10 за пестене на енергия на сензора
Supervision Timeout100 ms – 32 sТаймаут за загуба на връзка6–10 секунди за повечето сценарии
MTU23–517 байтаРазмер на ATT пакетПоискайте максималния при свързване

Central в iOS: Core Bluetooth

Core Bluetooth — рамката на Apple за работа с BLE на iOS и macOS. Класът CBCentralManager предоставя пълно API за имплементиране на ролята Central: сканиране, свързване, управление на връзките. Работата с Central в iOS се основава на делегатски модел: CBCentralManagerDelegate получава събития за промяна на състоянието, откриване на устройства и резултати от свързване.

Основните стъпки на работа на Central в iOS: инициализация на CBCentralManager, проверка на състоянието на Bluetooth, стартиране на сканиране, обработка на открити устройства чрез делегат, свързване с избрано Peripheral, откриване на услуги и характеристики, обмен на данни.

swift
// Свързване с открито Peripheral
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // Запазване на референция към peripheral и свързване
    discoveredPeripheral = peripheral
    central.connect(peripheral, options: nil)
}

// Успешно свързване
func centralManager(
    _ central: CBCentralManager,
    didConnect peripheral: CBPeripheral
) {
    peripheral.delegate = self
    peripheral.discoverServices(nil)
}

iOS ограничава фоновата работа на BLE: във фонов режим приложението може да сканира само с определени ключове в Info.plist, а свързаните устройства могат да уведомяват Central за промени в данните. За критични приложения (медицински устройства) използвайте Background Modes с ключ bluetooth-central.

Central в Android: BluetoothLeScanner

Android предоставя API BluetoothLeScanner за сканиране на BLE устройства и BluetoothGatt за управление на връзките. От Android 5.0 (API 21) BluetoothLeScanner замени остарелия startLeScan. API изисква разрешения BLUETOOTH, BLUETOOTH_ADMIN и ACCESS_FINE_LOCATION (или ACCESS_BACKGROUND_LOCATION за Android 10+).

java
import android.bluetooth.le.*;
import android.bluetooth.*;

private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;

// Конфигуриране на сканиране
ScanSettings settings = new ScanSettings.Builder()
    .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
    .build();

// Стартиране на сканиране
scanner.startScan(null, settings, new ScanCallback() {
    @Override
    public void onScanResult(
            int callbackType,
            ScanResult result
    ) {
        BluetoothDevice device = result.getDevice();
        // Свързване с устройство
        bluetoothGatt = device.connectGatt(
            context, false, gattCallback
        );
    }
});

На Android е важно да се вземат предвид ограниченията за сканиране: от Android 7 (API 24) сканирането не може да се стартира повече от 5 пъти за 30 секунди в приложения, които не използват Location. Android 12+ изисква разрешения BLUETOOTH_SCAN, BLUETOOTH_CONNECT и ADVERTISE, както и runtime искане на тези разрешения.

Консумация на енергия на Central

Консумацията на енергия на Central е по-висока от тази на Peripheral поради необходимостта от постоянно сканиране на радиоканалите. Central получава данни чрез BLE пакети, обработва ги, управлява връзки и често извършва изчисления на процесора на приложението. Според Bluetooth SIG сканирането консумира от 30 mA до 100 mA в зависимост от режима.

Съществуват няколко стратегии за пестене на енергия за Central. Интервално сканиране — най-ефективният метод: Central сканира в кратки прозорци (scan window) с дълги паузи (scan interval). Например при scan window 30 ms и scan interval 1000 ms консумацията на енергия се намалява с 97% в сравнение с непрекъснатото сканиране.

Допълнителна оптимизация — филтриране по UUID. Central обработва по-бързо само подходящи рекламни пакети, игнорирайки останалите. Това намалява натоварването на процесора и увеличава времето за работа на устройството с батерия. Също така се препоръчва спиране на сканирането веднага след откриване на желаното устройство и не задържане на връзката по-дълго от необходимото.

Често задавани въпроси

Може ли смартфон да бъде едновременно Central и Peripheral?

Да, BLE поддържа dual role: устройство може едновременно да бъде Central за едни устройства и Peripheral за други. Например смартфон чете данни от сензор (като Central) и едновременно рекламира собствена услуга (като Peripheral) за прехвърляне на данни към друго устройство.

Колко устройства може да обслужва едновременно Central?

BLE спецификацията определя лимит от 7 връзки за един Central. На практика ограничението зависи от производителя на чипа: чиповете Nordic nRF52840 поддържат до 20 връзки, а някои бюджетни Bluetooth адаптери — не повече от 3–4.

Защо Central не открива моя BLE сензор?

Причините могат да бъдат различни: сензорът не рекламира (не е в режим advertising), филтърът по UUID е твърде строг, Bluetooth на смартфона е изключен, липсват необходимите разрешения (Location на Android) или сензорът е извън обхват (препоръчва се до 10 метра на закрито).

Трябва ли да се поддържа постоянна връзка с BLE устройството?

Не е задължително. За много сценарии се използва моделът connect-and-read: Central сканира, свързва се, чете необходимите данни и прекъсва връзката. Постоянна връзка е нужна само за поточни данни (пулс, ЕКГ) или управление на устройство в реално време.

Как да намалим консумацията на енергия на Central при сканиране?

Използвайте интервално сканиране със съотношение scan window 30–50 ms и scan interval 500–1000 ms. Филтрирайте устройства по UUID, за да обработвате само подходящи рекламни пакети. Спрете сканирането веднага след откриване на желаното Peripheral.

Обобщение

  • Central — активен участник в BLE връзката, който инициира сканиране, свързване и управление на обмена на данни.
  • Процесът на сканиране включва приемане на рекламни пакети на канали 37, 38, 39 с възможност за филтриране по Service UUID.
  • След откриване на Peripheral, Central установява връзка с конфигурируеми параметри — connection interval, slave latency, supervision timeout.
  • В мобилната разработка Central се имплементира чрез CBCentralManager (iOS) или BluetoothLeScanner + BluetoothGatt (Android).
  • Един Central може едновременно да управлява до 7 връзки в стандартна Bluetooth конфигурация.
  • Консумацията на енергия на Central може да бъде оптимизирана чрез интервално сканиране и UUID филтриране за удължаване на живота на батерията.
  • Правилното управление на жизнения цикъл на връзката — от откриване до прекъсване — определя ефективността на BLE приложението.

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

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

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

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