Central — je zařízení v architektuře Bluetooth Low Energy, které inicializuje skenování, navazuje spojení a spravuje výměnu dat s periferními zařízeními. V kontextu mobilního vývoje je Central smartphone nebo tablet na iOS nebo Android, který se připojuje k BLE senzorům, fitness trackerům a chytrým příslušenstvím. Podle Bluetooth Core Specification 5.4 (2023) může Central současně podporovat až 7 připojení k různým Peripheral, ačkoli skutečné omezení závisí na výrobci čipu a verzi OS. Core Bluetooth na iOS a android.bluetooth.le na Android poskytují plné API pro správu role Central.
Hlavní body
Central — je GATT klient v architektuře Bluetooth Low Energy, který inicializuje veškerou komunikaci. Na rozdíl od Peripheral, které pasivně čeká na připojení a inzeruje své služby, Central aktivně skenuje éter, detekuje reklamní pakety a inicializuje připojení.
Asymetrický model Central-Peripheral je základní charakteristikou BLE. Central řídí logiku interakce: rozhoduje, ke kterému zařízení se připojit, které služby prozkoumat, které charakteristiky číst a zapisovat. Peripheral plní roli datového serveru — ukládá služby a charakteristiky, ale neinicializuje připojení.
Podle Bluetooth Core Specification 5.4 (2023) může být zařízení současně Central i Peripheral (dual role). Například smartphone může být Central pro fitness náramek a Peripheral pro jiný smartphone přenášející soubory. Současná práce v obou rolích však zvyšuje spotřebu energie a složitost správy připojení.
V ekosystému mobilního vývoje je role Central nejčastějším scénářem. Aplikace na smartphonu hledá BLE zařízení (senzory, sluchátka, náramky), připojuje se k nim a přijímá data. Vývojář používá API operačního systému pro práci s Central: CBCentralManager v iOS, BluetoothLeScanner a BluetoothGatt v Android.
Skenování — je první fáze práce Central. Zařízení naslouchá BLE rádiovým kanálům (37, 38, 39) pro detekci reklamních paketů, které periodicky vysílá Peripheral. Každý reklamní paket obsahuje název zařízení, seznam UUID služeb a uživatelská data.
Central může pracovat ve dvou režimech skenování: passive scanning (pouze příjem reklamních paketů) a active scanning (odeslání žádosti o skenování pro získání dalších dat prostřednictvím scan response). Passive scanning šetří energii, ale poskytuje méně informací. Active scanning umožňuje získat kompletní data reklamního paketu včetně názvu zařízení a úplného seznamu služeb.
Filtrování podle UUID — důležitá optimalizace. Central může skenovat pouze zařízení s konkrétním Service UUID a ignorovat ostatní. To nejen šetří energii, ale také zjednodušuje logiku aplikace: delegate přijímá pouze relevantní zařízení.
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
]
)
}
}
}
Správa připojení — hlavní odpovědnost Central. Po detekci vhodného Peripheral Central inicializuje připojení. BLE připojení se navazuje prostřednictvím procedury navázání spojení, která zahrnuje výměnu parametrů: connection interval, slave latency a supervision timeout.
Connection interval určuje, jak často si Central a Peripheral po připojení vyměňují data. Interval může být od 7.5 ms do 4 sekund. Čím kratší interval, tím vyšší propustnost, ale také vyšší spotřeba energie. Slave latency umožňuje Peripheral přeskočit několik událostí připojení pro úsporu energie. Supervision timeout — maximální doba bez odpovědi, po které je připojení považováno za ztracené.
Central je zodpovědný za ukončení připojení po dokončení výměny dat. BLE zařízení obvykle neudržují připojení trvale — Central se připojí, přijme data a odpojí se. Toto je standardní vzor pro IoT senzory: Central skenuje, najde teplotní senzor, připojí se, přečte hodnotu a odpojí se.
| Parametr | Rozsah | Účel | Doporučení |
|---|---|---|---|
| Connection Interval | 7.5 ms – 4 s | Frekvence výměny dat | 30–50 ms pro streamy, 1–4 s pro řídká data |
| Slave Latency | 0–499 událostí | Přeskakování událostí Peripheral | 4–10 pro úsporu energie senzoru |
| Supervision Timeout | 100 ms – 32 s | Časový limit ztráty spojení | 6–10 sekund pro většinu scénářů |
| MTU | 23–517 bajtů | Velikost ATT paketu | Požádat o maximum při připojení |
Core Bluetooth — framework Apple pro práci s BLE na iOS a macOS. Třída CBCentralManager poskytuje plné API pro implementaci role Central: skenování, připojování, správa připojení. Práce s Central v iOS je založena na modelu delegate: CBCentralManagerDelegate přijímá události změny stavu, detekce zařízení a výsledků připojení.
Hlavní kroky práce Central v iOS: inicializace CBCentralManager, kontrola stavu Bluetooth, spuštění skenování, zpracování detekovaných zařízení přes delegate, připojení k vybranému Peripheral, detekce služeb a charakteristik, výměna dat.
// Připojit k detekovanému Peripheral
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Uchovat referenci na peripheral a připojit
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// Úspěšné připojení
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
iOS omezuje práci BLE na pozadí: v režimu na pozadí může aplikace skenovat pouze s určitými klíči v Info.plist a připojená zařízení mohou upozorňovat Central na změny dat. Pro kritické aplikace (zdravotnická zařízení) použijte Background Modes s klíčem bluetooth-central.
Android poskytuje API BluetoothLeScanner pro skenování BLE zařízení a BluetoothGatt pro správu připojení. Od Android 5.0 (API 21) nahradil BluetoothLeScanner zastaralý startLeScan. API vyžaduje oprávnění BLUETOOTH, BLUETOOTH_ADMIN a ACCESS_FINE_LOCATION (nebo ACCESS_BACKGROUND_LOCATION pro Android 10+).
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// Nakonfigurovat skenování
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// Spustit skenování
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// Připojit k zařízení
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
V Android je důležité zohlednit omezení skenování: od Android 7 (API 24) nelze skenování spustit častěji než 5krát za 30 sekund v aplikacích, které nepoužívají Location. Android 12+ vyžaduje oprávnění BLUETOOTH_SCAN, BLUETOOTH_CONNECT a ADVERTISE, stejně jako runtime žádost o tato oprávnění.
Spotřeba energie Central je vyšší než u Peripheral kvůli nutnosti neustále skenovat rádiové kanály. Central přijímá data prostřednictvím BLE paketů, zpracovává je, spravuje připojení a často provádí výpočty na procesoru aplikace. Podle Bluetooth SIG spotřebovává skenování od 30 mA do 100 mA v závislosti na režimu.
Existuje několik strategií úspory energie pro Central. Intervalové skenování — nejúčinnější metoda: Central skenuje v krátkých oknech (scan window) s dlouhými pauzami (scan interval). Například při scan window 30 ms a scan interval 1000 ms se spotřeba energie sníží o 97% ve srovnání s nepřetržitým skenováním.
Další optimalizace — filtrování podle UUID. Central rychleji zpracovává pouze relevantní reklamní pakety a ignoruje ostatní. To snižuje zatížení procesoru a prodlužuje výdrž baterie zařízení. Doporučuje se také vypnout skenování ihned po detekci požadovaného zařízení a neudržovat připojení déle, než je nutné.
Často kladené otázky
Ano, BLE podporuje dual role: zařízení může být současně Central pro některá zařízení a Peripheral pro jiná. Například smartphone čte data ze senzoru (jako Central) a současně inzeruje svou vlastní službu (jako Peripheral) pro přenos dat do jiného zařízení.
Specifikace BLE definuje limit 7 připojení pro jeden Central. V praxi omezení závisí na výrobci čipu: čipy Nordic nRF52840 podporují až 20 připojení, zatímco některé levné Bluetooth adaptéry — ne více než 3–4.
Důvody mohou být různé: senzor neinzeruje (není v režimu advertising), filtr UUID je příliš přísný, Bluetooth na smartphonu je vypnutý, chybí potřebná oprávnění (Location na Android) nebo je senzor mimo dosah (doporučuje se do 10 metrů v místnosti).
Ne nutně. Pro mnoho scénářů se používá vzor connect-and-read: Central skenuje, připojí se, přečte potřebná data a ukončí připojení. Trvalé připojení je potřeba pouze pro streamovaná data (puls, EKG) nebo ovládání zařízení v reálném čase.
Použijte intervalové skenování s poměrem scan window 30–50 ms a scan interval 500–1000 ms. Filtrujte zařízení podle UUID, abyste zpracovávali pouze relevantní reklamní pakety. Vypněte skenování ihned po detekci požadovaného Peripheral.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také