Central — egy eszköz a Bluetooth Low Energy architektúrában, amely elindítja a szkennelést, létrehozza a kapcsolatot és kezeli az adatcserét a perifériás eszközökkel. A mobilfejlesztés kontextusában a Central egy okostelefon vagy tablet iOS-en vagy Androidon, amely BLE-érzékelőkhöz, fitneszkövetőkhöz és okos kiegészítőkhöz csatlakozik. A Bluetooth Core Specification 5.4 (2023) szerint a Central akár 7 egyidejű kapcsolatot is támogathat különböző Peripheral-ökkel, bár a tényleges korlátozás a chip gyártójától és az OS verziójától függ. Az iOS-en a Core Bluetooth és Androidon az android.bluetooth.le teljes API-t biztosít a Central szerepének kezeléséhez.
Főbb pontok
Central — egy GATT-kliens a Bluetooth Low Energy architektúrában, amely az összes kommunikációt elindítja. Ellentétben a Peripheral-lel, amely passzívan várja a kapcsolatot és hirdeti szolgáltatásait, a Central aktívan szkenneli az étert, észleli a reklámcsomagokat és elindítja a kapcsolatot.
Az aszimmetrikus Central-Peripheral modell a BLE alapvető jellemzője. A Central kezeli az interakció logikáját: eldönti, melyik eszközhöz csatlakozzon, mely szolgáltatásokat vizsgálja meg, mely jellemzőket olvassa és írja. Peripheral adatszerver szerepét tölti be — tárolja a szolgáltatásokat és jellemzőket, de nem kezdeményez kapcsolatokat.
A Bluetooth Core Specification 5.4 (2023) szerint egy eszköz egyidejűleg lehet Central és Peripheral (dual role). Például egy okostelefon lehet Central egy fitnesz karkötő számára és Peripheral egy másik fájlokat átvivő okostelefon számára. Azonban a két szerepben való egyidejű működés növeli az energiafogyasztást és a kapcsolatkezelés komplexitását.
A mobilfejlesztés ökoszisztémájában a Central szerep a leggyakoribb forgatókönyv. Az okostelefonon lévő alkalmazás BLE-eszközöket (érzékelők, fejhallgatók, karkötők) keres, csatlakozik hozzájuk és adatokat fogad. A fejlesztő az operációs rendszer API-ját használja a Central-lal való munkához: CBCentralManager iOS-ben, BluetoothLeScanner és BluetoothGatt Androidban.
Szkennelés — a Central munka első szakasza. Az eszköz hallgatja a BLE rádiócsatornákat (37, 38, 39) a Peripheral által időszakosan küldött reklámcsomagok észlelésére. Minden reklámcsomag tartalmazza az eszköz nevét, a szolgáltatások UUID-listáját és felhasználói adatokat.
A Central két szkennelési módban működhet: passive scanning (csak reklámcsomagok vétele) és active scanning (scan request küldése további adatok megszerzéséhez scan response-on keresztül). A passive scanning energiát takarít meg, de kevesebb információt nyújt. Az active scanning lehetővé teszi a reklámcsomag teljes adatainak megszerzését, beleértve az eszköz nevét és a szolgáltatások teljes listáját.
UUID alapú szűrés — fontos optimalizálás. A Central csak meghatározott Service UUID-val rendelkező eszközöket szkennelhet, figyelmen kívül hagyva a többit. Ez nemcsak energiát takarít meg, hanem egyszerűsíti az alkalmazás logikáját is: a delegate csak releváns eszközöket kap.
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
]
)
}
}
}
Kapcsolatok kezelése — a Central fő felelőssége. A megfelelő Peripheral észlelése után a Central elindítja a kapcsolatot. A BLE-kapcsolat a kapcsolatfelvételi eljáráson keresztül jön létre, amely paramétercserét foglal magában: connection interval, slave latency és supervision timeout.
A connection interval határozza meg, hogy a Central és a Peripheral milyen gyakran cserél adatokat a kapcsolódás után. Az intervallum 7.5 ms-tól 4 másodpercig terjedhet. Minél rövidebb az intervallum, annál nagyobb a sávszélesség, de annál nagyobb az energiafogyasztás. Slave latency lehetővé teszi a Peripheral számára, hogy több kapcsolati eseményt kihagyjon az energiatakarékosság érdekében. Supervision timeout — a maximális idő válasz nélkül, amely után a kapcsolat elveszettnek tekintendő.
A Central felelős a kapcsolat bontásáért az adatcsere befejezése után. A BLE-eszközök általában nem tartják fenn a kapcsolatot állandóan — a Central csatlakozik, adatokat fogad és bontja a kapcsolatot. Ez egy standard minta az IoT-érzékelőknél: a Central szkennel, talál egy hőmérséklet-érzékelőt, csatlakozik, leolvassa az értéket és bontja a kapcsolatot.
| Paraméter | Tartomány | Cél | Ajánlás |
|---|---|---|---|
| Connection Interval | 7.5 ms – 4 s | Adatcsere gyakorisága | 30–50 ms adatfolyamokhoz, 1–4 s ritka adatokhoz |
| Slave Latency | 0–499 esemény | Események kihagyása Peripheral által | 4–10 az érzékelő energia megtakarításához |
| Supervision Timeout | 100 ms – 32 s | Kapcsolat megszakadásának időtúllépése | 6–10 másodperc a legtöbb forgatókönyvhöz |
| MTU | 23–517 bájt | ATT-csomag mérete | Kérje a maximumot csatlakozáskor |
Core Bluetooth — az Apple keretrendszere a BLE-vel való munkához iOS-en és macOS-en. A CBCentralManager osztály teljes API-t biztosít a Central szerepének megvalósításához: szkennelés, csatlakozás, kapcsolatok kezelése. A Central-lal való munka iOS-ben a delegate modellen alapul: a CBCentralManagerDelegate eseményeket kap az állapotváltozásokról, eszközészlelésekről és kapcsolódási eredményekről.
A Central iOS-ben végzett munkájának fő lépései: a CBCentralManager inicializálása, a Bluetooth állapotának ellenőrzése, a szkennelés elindítása, az észlelt eszközök feldolgozása delegate-en keresztül, csatlakozás a kiválasztott Peripheral-hez, szolgáltatások és jellemzők észlelése, adatcsere.
// Csatlakozás az észlelt Peripheral-hez
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Peripheral referencia megtartása és csatlakozás
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// Sikeres csatlakozás
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
Az iOS korlátozza a BLE háttérben végzett munkáját: háttérmódban az alkalmazás csak meghatározott kulcsokkal szkennelhet az Info.plist-ben, és a csatlakoztatott eszközök értesíthetik a Central-t az adatváltozásokról. Kritikus alkalmazásokhoz (orvosi eszközök) használja a Background Modes-t a bluetooth-central kulccsal.
Android a BluetoothLeScanner API-t biztosítja a BLE-eszközök szkenneléséhez és a BluetoothGatt-ot a kapcsolatok kezeléséhez. Az Android 5.0-tól (API 21) kezdve a BluetoothLeScanner felváltotta az elavult startLeScan-t. Az API BLUETOOTH, BLUETOOTH_ADMIN és ACCESS_FINE_LOCATION (vagy Android 10+ esetén ACCESS_BACKGROUND_LOCATION) engedélyeket igényel.
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// Szkennelés konfigurálása
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// Szkennelés indítása
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// Csatlakozás az eszközhöz
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
Androidon fontos figyelembe venni a szkennelési korlátozásokat: az Android 7-től (API 24) kezdve a szkennelés nem indítható 30 másodpercenként 5-nél többször olyan alkalmazásokban, amelyek nem használják a Location-t. Az Android 12+ BLUETOOTH_SCAN, BLUETOOTH_CONNECT és ADVERTISE engedélyeket, valamint ezen engedélyek runtime kérését igényli.
A Central energiafogyasztása magasabb, mint a Peripheral-é, a rádiócsatornák folyamatos szkennelésének szükségessége miatt. A Central BLE-csomagokon keresztül fogad adatokat, feldolgozza azokat, kezeli a kapcsolatokat és gyakran számításokat végez az alkalmazás processzorán. A Bluetooth SIG szerint a szkennelés 30 mA-tól 100 mA-ig fogyaszt, a módtól függően.
Több energiatakarékossági stratégia létezik a Central számára. Intervallum szkennelés — a leghatékonyabb módszer: a Central rövid ablakokban (scan window) szkennel hosszú szünetekkel (scan interval). Például 30 ms scan window és 1000 ms scan interval esetén az energiafogyasztás 97%-kal csökken a folyamatos szkenneléshez képest.
További optimalizálás — UUID alapú szűrés. A Central gyorsabban feldolgozza csak a releváns reklámcsomagokat, figyelmen kívül hagyva a többit. Ez csökkenti a processzor terhelését és növeli az eszköz akkumulátorának élettartamát. Szintén ajánlott a szkennelés azonnali leállítása a kívánt eszköz észlelése után, és a kapcsolat fenntartása csak a szükséges ideig.
Gyakran ismételt kérdések
Igen, a BLE támogatja a dual role-t: egy eszköz egyszerre lehet Central egyes eszközök számára és Peripheral mások számára. Például egy okostelefon adatokat olvas egy érzékelőről (Central-ként) és egyidejűleg hirdeti saját szolgáltatását (Peripheral-ként) adatok másik eszköznek történő továbbításához.
A BLE specifikáció 7 kapcsolat korlátot határoz meg egy Central számára. A gyakorlatban a korlátozás a chip gyártójától függ: a Nordic nRF52840 chipek akár 20 kapcsolatot is támogatnak, míg néhány olcsó Bluetooth-adapter legfeljebb 3–4 kapcsolatot.
Az okok különbözőek lehetnek: az érzékelő nem hirdet (nincs advertising módban), a UUID-szűrő túl szigorú, a Bluetooth ki van kapcsolva az okostelefonon, hiányoznak a szükséges engedélyek (Location Androidon), vagy az érzékelő hatótávolságon kívül van (beltérben 10 méterig ajánlott).
Nem feltétlenül. Sok forgatókönyvhöz a connect-and-read mintát használják: a Central szkennel, csatlakozik, beolvassa a szükséges adatokat és bontja a kapcsolatot. Folyamatos kapcsolat csak adatfolyamokhoz (pulzus, EKG) vagy valós idejű eszközvezérléshez szükséges.
Használjon intervallum szkennelést scan window 30–50 ms és scan interval 500–1000 ms aránnyal. Szűrje az eszközöket UUID alapján, hogy csak a releváns reklámcsomagokat dolgozza fel. Állítsa le a szkennelést azonnal a kívánt Peripheral észlelése után.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is