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 request для получения дополнительных данных через 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 establishment, которая включает обмен параметрами: connection interval, slave latency и supervision timeout.

Connection interval определяет, как часто Central и Peripheral обмениваются данными после подключения. Интервал может быть от 7.5 мс до 4 секунд. Чем короче интервал, тем выше пропускная способность, но больше энергопотребление. Slave latency позволяет Peripheral пропускать несколько connection events для экономии энергии. 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
// Connect to discovered Peripheral
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // Keep reference to peripheral and connect
    discoveredPeripheral = peripheral
    central.connect(peripheral, options: nil)
}

// Successful connection
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;

// Configure scanning
ScanSettings settings = new ScanSettings.Builder()
    .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
    .build();

// Start scanning
scanner.startScan(null, settings, new ScanCallback() {
    @Override
    public void onScanResult(
            int callbackType,
            ScanResult result
    ) {
        BluetoothDevice device = result.getDevice();
        // Connect to device
        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 мА до 100 мА в зависимости от режима.

Существует несколько стратегий экономии энергии для Central. Интервальное сканирование — самый эффективный метод: Central сканирует короткими окнами (scan window) с длинными паузами (scan interval). Например, при scan window 30 мс и scan interval 1000 мс энергопотребление снижается на 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 мс и scan interval 500–1000 мс. Фильтруйте устройства по 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 для увеличения времени автономной работы.
  • Правильное управление lifecycle соединения — от обнаружения до разрыва — определяет эффективность BLE-приложения.

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

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

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

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