Central — este un dispozitiv în arhitectura Bluetooth Low Energy care inițiază scanarea, stabilește conexiunea și gestionează schimbul de date cu dispozitivele periferice. În contextul dezvoltării mobile, Central este un smartphone sau tabletă pe iOS sau Android care se conectează la senzori BLE, trackere de fitness și accesorii inteligente. Conform Bluetooth Core Specification 5.4 (2023), Central poate suporta simultan până la 7 conexiuni cu diferite Peripheral, deși limitarea reală depinde de producătorul cipului și versiunea sistemului de operare. Core Bluetooth pe iOS și android.bluetooth.le pe Android oferă API complet pentru gestionarea rolului Central.
Principalele puncte
Central — este un client GATT în arhitectura Bluetooth Low Energy care inițiază toate comunicările. Spre deosebire de Peripheral, care așteaptă pasiv conexiunea și își publică serviciile, Central scanează activ canalul, detectează pachetele de publicitate și inițiază conexiunea.
Modelul asimetric Central-Peripheral este o caracteristică fundamentală a BLE. Central gestionează logica interacțiunii: decide la ce dispozitiv să se conecteze, ce servicii să investigheze, ce caracteristici să citească și să scrie. Peripheral îndeplinește rolul de server de date — stochează servicii și caracteristici, dar nu inițiază conexiuni.
Conform Bluetooth Core Specification 5.4 (2023), un dispozitiv poate fi simultan Central și Peripheral (dual role). De exemplu, un smartphone poate fi Central pentru o brățară fitness și Peripheral pentru un alt smartphone care transferă fișiere. Cu toate acestea, funcționarea simultană în ambele roluri crește consumul de energie și complexitatea gestionării conexiunilor.
În ecosistemul dezvoltării mobile, rolul Central este cel mai frecvent scenariu. Aplicația pe smartphone caută dispozitive BLE (senzori, căști, brățări), se conectează la ele și primește date. Dezvoltatorul utilizează API-ul sistemului de operare pentru a lucra cu Central: CBCentralManager în iOS, BluetoothLeScanner și BluetoothGatt în Android.
Scanarea — este prima etapă de lucru a Central. Dispozitivul ascultă canalele radio BLE (37, 38, 39) pentru a detecta pachetele de publicitate trimise periodic de Peripheral. Fiecare pachet de publicitate conține numele dispozitivului, lista UUID-urilor serviciilor și date personalizate.
Central poate funcționa în două moduri de scanare: passive scanning (doar recepționarea pachetelor de publicitate) și active scanning (trimiterea unei cereri de scanare pentru a obține date suplimentare prin scan response). Passive scanning economisește energie, dar oferă mai puține informații. Active scanning permite obținerea datelor complete ale pachetului de publicitate, inclusiv numele dispozitivului și lista completă a serviciilor.
Filtrarea după UUID — o optimizare importantă. Central poate scana doar dispozitivele cu un anumit Service UUID, ignorându-le pe celelalte. Aceasta nu doar economisește energie, ci și simplifică logica aplicației: delegate primește doar dispozitivele relevante.
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
]
)
}
}
}
Gestionarea conexiunilor — responsabilitatea principală a Central. După detectarea unui Peripheral potrivit, Central inițiază conexiunea. Conexiunea BLE se stabilește prin procedura de stabilire a conexiunii, care include schimbul de parametri: connection interval, slave latency și supervision timeout.
Connection interval determină cât de des Central și Peripheral fac schimb de date după conectare. Intervalul poate fi de la 7.5 ms până la 4 secunde. Cu cât intervalul este mai scurt, cu atât lățimea de bandă este mai mare, dar consumul de energie este mai ridicat. Slave latency permite Peripheral să sară peste câteva evenimente de conexiune pentru economisirea energiei. Supervision timeout — timpul maxim fără răspuns, după care conexiunea este considerată pierdută.
Central este responsabil pentru întreruperea conexiunii după finalizarea schimbului de date. Dispozitivele BLE de obicei nu mențin conexiunea permanent — Central se conectează, primește date și se deconectează. Acesta este un model standard pentru senzorii IoT: Central scanează, găsește un senzor de temperatură, se conectează, citește valoarea și se deconectează.
| Parametru | Interval | Scop | Recomandare |
|---|---|---|---|
| Connection Interval | 7.5 ms – 4 s | Frecvența schimbului de date | 30–50 ms pentru fluxuri, 1–4 s pentru date rare |
| Slave Latency | 0–499 evenimente | Omiteri de evenimente de către Peripheral | 4–10 pentru economisirea energiei senzorului |
| Supervision Timeout | 100 ms – 32 s | Timeout de pierdere a conexiunii | 6–10 secunde pentru majoritatea scenariilor |
| MTU | 23–517 bytes | Dimensiunea pachetului ATT | Solicită maximul la conectare |
Core Bluetooth — framework-ul Apple pentru lucrul cu BLE pe iOS și macOS. Clasa CBCentralManager oferă API-ul complet pentru implementarea rolului Central: scanare, conectare, gestionare conexiuni. Lucrul cu Central în iOS se bazează pe modelul delegate: CBCentralManagerDelegate primește evenimente de schimbare a stării, detectare a dispozitivelor și rezultate ale conexiunii.
Pașii principali de lucru cu Central în iOS: inițializarea CBCentralManager, verificarea stării Bluetooth, pornirea scanării, procesarea dispozitivelor detectate prin delegate, conectarea la Peripheral-ul selectat, detectarea serviciilor și caracteristicilor, schimbul de date.
// Conectare la Peripheral-ul detectat
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Păstrează referința la peripheral și conectează-te
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// Conexiune reușită
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
iOS limitează funcționarea BLE în fundal: în modul fundal, aplicația poate scana doar cu anumite chei în Info.plist, iar dispozitivele conectate pot notifica Central despre modificări de date. Pentru aplicații critice (dispozitive medicale) utilizați Background Modes cu cheia bluetooth-central.
Android oferă API-ul BluetoothLeScanner pentru scanarea dispozitivelor BLE și BluetoothGatt pentru gestionarea conexiunilor. Începând cu Android 5.0 (API 21), BluetoothLeScanner a înlocuit învechitul startLeScan. API-ul necesită permisiunile BLUETOOTH, BLUETOOTH_ADMIN și ACCESS_FINE_LOCATION (sau ACCESS_BACKGROUND_LOCATION pentru Android 10+).
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// Configurează scanarea
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// Pornește scanarea
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// Conectare la dispozitiv
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
Pe Android este important să se țină cont de limitările de scanare: începând cu Android 7 (API 24), scanarea nu poate fi pornită mai des de 5 ori la 30 de secunde în aplicațiile care nu utilizează Location. Android 12+ necesită permisiunile BLUETOOTH_SCAN, BLUETOOTH_CONNECT și ADVERTISE, precum și solicitarea acestora la runtime.
Consumul de energie al Central este mai mare decât al Peripheral din cauza necesității de a scana constant canalele radio. Central primește date prin pachete BLE, le procesează, gestionează conexiunile și adesea execută calcule pe procesorul aplicației. Conform Bluetooth SIG, scanarea consumă între 30 mA și 100 mA în funcție de mod.
Există mai multe strategii de economisire a energiei pentru Central. Scanarea intervată — cea mai eficientă metodă: Central scanează în ferestre scurte (scan window) cu pauze lungi (scan interval). De exemplu, cu scan window de 30 ms și scan interval de 1000 ms, consumul de energie se reduce cu 97% comparativ cu scanarea continuă.
Optimizare suplimentară — filtrarea după UUID. Central procesează mai rapid doar pachetele de publicitate relevante, ignorându-le pe celelalte. Aceasta reduce încărcarea procesorului și mărește durata de funcționare a dispozitivului pe baterie. De asemenea, se recomandă oprirea scanării imediat după detectarea dispozitivului dorit și menținerea conexiunii doar cât este necesar.
Întrebări frecvente
Da, BLE suportă dual role: un dispozitiv poate fi simultan Central pentru unele dispozitive și Peripheral pentru altele. De exemplu, un smartphone citește date de la un senzor (ca Central) și în același timp își publică propriul serviciu (ca Peripheral) pentru a transmite date către alt dispozitiv.
Specificația BLE definește o limită de 7 conexiuni pentru un singur Central. În practică, limitarea depinde de producătorul cipului: cipurile Nordic nRF52840 suportă până la 20 de conexiuni, iar unele adaptoare Bluetooth bugetare — nu mai mult de 3–4.
Motivele pot fi diverse: senzorul nu face publicitate (nu este în modul advertising), filtrul după UUID este prea strict, Bluetooth-ul pe smartphone este oprit, lipsesc permisiunile necesare (Location pe Android) sau senzorul este în afara razei de acțiune (se recomandă până la 10 metri în interior).
Nu neapărat. Pentru multe scenarii se utilizează modelul connect-and-read: Central scanează, se conectează, citește datele necesare și întrerupe conexiunea. Conexiunea permanentă este necesară doar pentru date în flux (puls, EKG) sau controlul dispozitivului în timp real.
Utilizați scanarea intervată cu raportul scan window 30–50 ms și scan interval 500–1000 ms. Filtrați dispozitivele după UUID pentru a procesa doar pachetele de publicitate relevante. Opriți scanarea imediat după detectarea Peripheral-ului dorit.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și