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 — это 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, игнорируя остальные. Это не только экономит энергию, но и упрощает логику приложения: делегат получает только релевантные устройства.
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 Interval | 7.5 ms – 4 s | Частота обмена данными | 30–50 ms для потоков, 1–4 s для редких данных |
| Slave Latency | 0–499 событий | Пропуск событий Peripheral | 4–10 для экономии энергии датчика |
| Supervision Timeout | 100 ms – 32 s | Таймаут потери связи | 6–10 секунд для большинства сценариев |
| MTU | 23–517 байт | Размер ATT-пакета | Запросить максимальный при подключении |
Core Bluetooth — фреймворк Apple для работы с BLE на iOS и macOS. Класс CBCentralManager предоставляет весь API для реализации роли Central: сканирование, подключение, управление соединениями. Работа с Central в iOS основана на делегатной модели: CBCentralManagerDelegate получает события изменения состояния, обнаружения устройств и результатов подключения.
Основные шаги работы Central в iOS: инициализация CBCentralManager, проверка состояния Bluetooth, запуск сканирования, обработка обнаруженных устройств через делегат, подключение к выбранному Peripheral, обнаружение сервисов и характеристик, обмен данными.
// 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.
Android предоставляет API BluetoothLeScanner для сканирования BLE-устройств и BluetoothGatt для управления подключениями. Начиная с Android 5.0 (API 21), BluetoothLeScanner заменил устаревший startLeScan. API требует разрешений BLUETOOTH, BLUETOOTH_ADMIN и ACCESS_FINE_LOCATION (или ACCESS_BACKGROUND_LOCATION для Android 10+).
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 выше, чем у Peripheral, из-за необходимости постоянно сканировать радиоканалы. Central получает данные по BLE-пакетам, обрабатывает их, управляет соединениями и часто выполняет вычисления на процессоре приложения. По данным Bluetooth SIG, сканирование потребляет от 30 мА до 100 мА в зависимости от режима.
Существует несколько стратегий экономии энергии для Central. Интервальное сканирование — самый эффективный метод: Central сканирует короткими окнами (scan window) с длинными паузами (scan interval). Например, при scan window 30 мс и scan interval 1000 мс энергопотребление снижается на 97% по сравнению с непрерывным сканированием.
Дополнительная оптимизация — фильтрация по UUID. Central быстрее обрабатывает только релевантные рекламные пакеты, игнорируя остальные. Это снижает нагрузку на процессор и увеличивает время автономной работы устройства. Также рекомендуется отключать сканирование сразу после обнаружения нужного устройства и не держать соединение дольше необходимого.
Часто задаваемые вопросы
Да, BLE поддерживает dual role: устройство может одновременно быть Central для одних устройств и Peripheral для других. Например, смартфон читает данные с датчика (как Central) и одновременно рекламирует собственный сервис (как Peripheral) для передачи данных другому устройству.
Спецификация BLE определяет лимит в 7 соединений для одного Central. На практике ограничение зависит от производителя чипа: чипы Nordic nRF52840 поддерживают до 20 соединений, а некоторые бюджетные Bluetooth-адаптеры — не более 3–4.
Причины могут быть разными: датчик не рекламируется (не в режиме advertising), фильтр по UUID слишком строгий, Bluetooth на смартфоне выключен, отсутствуют необходимые разрешения (Location на Android), или датчик вне радиуса действия (рекомендуется до 10 метров в помещении).
Не обязательно. Для многих сценариев используется паттерн connect-and-read: Central сканирует, подключается, читает необходимые данные и разрывает соединение. Постоянное соединение нужно только для потоковых данных (пульс, ЭКГ) или управления устройством в реальном времени.
Используйте интервальное сканирование с соотношением scan window 30–50 мс и scan interval 500–1000 мс. Фильтруйте устройства по UUID, чтобы обрабатывать только релевантные рекламные пакеты. Отключайте сканирование сразу после обнаружения нужного Peripheral.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также