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 response-а). Passive scanning штеди енергију, али даје мање информација. Active scanning омогућава добијање комплетних података рекламног пакета, укључујући име уређаја и комплетну листу услуга.
Филтрирање по UUID-у — важна оптимизација. Central може да скенира само уређаје са одређеним Service UUID-ом, игноришући остале. Ово не само да штеди енергију, већ и поједностављује логику апликације: delegate прима само релевантне уређаје.
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 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 | Тimeout губитка везе | 6–10 секунди за већину сценарија |
| MTU | 23–517 бајтова | Величина ATT пакета | Затражити максимални при повезивању |
Core Bluetooth — Apple-ов оквир за рад са BLE-ом на iOS-у и macOS-у. Класа CBCentralManager пружа потпуни API за имплементацију улоге Central: скенирање, повезивање, управљање везама. Рад са Central-ом у iOS-у се заснива на моделу delegate-а: CBCentralManagerDelegate прима догађаје промене стања, откривања уређаја и резултата повезивања.
Главни кораци рада Central-а у iOS-у: иницијализација CBCentralManager-а, провера Bluetooth стања, покретање скенирања, обрада откривених уређаја кроз delegate, повезивање са изабраним Peripheral-ом, откривање услуга и карактеристика, размена података.
// Повежи се са откривеним 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.
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;
// Подеси скенирање
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-а је већа од 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 брже обрађује само релевантне рекламне пакете, игноришући остале. Ово смањује оптерећење процесора и повећава време рада уређаја на батерију. Такође се препоручује гашење скенирања одмах након откривања потребног уређаја и не држање везе дуже него што је потребно.
Често постављана питања
Да, 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 ms и scan interval 500–1000 ms. Филтрирајте уређаје по UUID-у да бисте обрађивали само релевантне рекламне пакете. Искључите скенирање одмах након откривања потребног Peripheral-а.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође