Peripheral — egy eszköz a Bluetooth Low Energy architektúrában, amely reklámozza szolgáltatásait advertising-csomagokon keresztül, és várja a kapcsolódást a Central-tól. Az IoT ökoszisztémában a Peripheral általában korlátozott energiafogyasztású eszköz: hőmérséklet-érzékelő, okos lámpa, fitnesz karkötő, beacon. A Bluetooth Core Specification 5.4 (2023) meghatározza a reklámprotokollt: a Peripheral időszakosan advertising-csomagokat küld, amelyek tartalmazzák az eszköz nevét, a szolgáltatások listáját és a felhasználói adatokat, a Central pedig beolvassa ezeket a csomagokat és eldönti, hogy csatlakozik-e. A kapcsolat létrejötte után a Peripheral GATT-szerverként működik, szolgáltatásokat és jellemzőket biztosítva olvasáshoz és íráshoz.
Főbb pontok
Peripheral — egy BLE-eszköz, amely GATT-szervert implementál és reklámozza képességeit advertising-csatornákon keresztül. Ellentétben a Central-lal, amely aktívan keres eszközöket, a Peripheral passzívan várja a kapcsolódást. Ez egy aszimmetrikus modell, amely az akkumulátoros eszközök energiahatékonyságára optimalizált.
A Peripheral több módban lehet: advertising (reklám), connected (csatlakozva a Central-hoz), sleeping (alvás kikapcsolt reklámmal). Advertising módban a Peripheral időszakosan rövid adatcsomagokat küld, minimális energiát fogyasztva. Csatlakozás után a Peripheral connected módba lép, ahol a megállapodott connection interval szerint adatokat cserél a Central-lal.
A Bluetooth Core Specification 5.4 (2023) szerint egy eszköz dinamikusan válthat a Peripheral és Central szerepek között, de minden pillanatban egy kapcsolathoz a szerep rögzített. Tipikus forgatókönyv: az IoT-érzékelő folyamatosan Peripheral szerepben dolgozik, az okostelefon pedig Central-ként kezeli a kapcsolatot.
A fejlesztő számára fontos megérteni: a Peripheral határozza meg, hogy mely szolgáltatások és jellemzők érhetők el, és kezeli a hozzáférést. A Peripheral GATT-szerverének szerkezete határozza meg, hogy a Central milyen adatokat olvashat és milyen parancsokat írhat.
Advertising (reklám) — az a mechanizmus, amellyel a Peripheral bejelenti jelenlétét. A Peripheral advertising-csomagokat küld három dedikált csatornán (37, 38, 39) 20 ms és 10.24 másodperc közötti időközönként. Minden reklámcsomag rögzített információkat tartalmaz, és opcionális adatokat is tartalmazhat.
Kétféle reklámcsomag létezik: advertising PDU (fő csomag) és scan response PDU (válasz a Central kérésére). A fő csomag kötelező mezőket tartalmaz: csomagtípus, feladó címe, adatok. Ha a Central scan request-et küld, a Peripheral egy további csomaggal válaszol, amely teljesebb információkat tartalmaz — például a teljes eszköznevet.
Az advertising paraméterei befolyásolják a felderítési sebességet és az energiafogyasztást. Advertising interval — a csomagok küldése közötti idő. Minél rövidebb az intervallum, annál gyorsabban érzékeli a Central az eszközt, de annál több energiát fogyaszt a Peripheral. Ajánlott intervallum: 100–1000 ms a legtöbb eszközhöz.
| Paraméter | Tartomány | Hatás | Ajánlás |
|---|---|---|---|
| Advertising Interval | 20 ms – 10.24 s | Felderítési sebesség, energia | 100–1000 ms az egyensúlyhoz |
| Advertising Channels | 37, 38, 39 | Felderítés megbízhatósága | Mind a 3 csatorna kötelező |
| Tx Power | −20 – +10 dBm | Távolság, interferencia | 0 dBm beltérre, +4 dBm kültérre |
| Advertising Timeout | 0 – 180 másodperc | Reklám időtartama | 0 (végtelen) beacon-ökhöz |
A BLE reklámcsomag korlátozása 31 bájt az advertising PDU számára és további 31 bájt a scan response számára. A csomagon belül az adatok AD Structure (Advertising Data Structure) formátumban vannak szervezve: minden mezőhöz tartozik egy típus (1 bájt), hossz (1 bájt) és érték.
A leggyakrabban használt AD Type: Flags (0x01) — kapcsolódási és felderítési módok, Local Name (0x08 vagy 0x09) — eszköznév, Service UUID List (0x02–0x07) — szolgáltatás UUID-k listája, Manufacturer Specific Data (0xFF) — gyártói adatok. Az adatok helyes becsomagolása egy 31 bájtos csomagba fontos feladat a beágyazott eszközök fejlesztője számára.
A több adatot küldeni kívánó eszközök számára létezik extended advertising (BLE 5.0+), amely 251 bájtra növeli a reklámcsomag méretét és új csomagtípusokat ad hozzá. Az extended advertising támogatja a kódolt csatornákat (coded PHY) is a hatótáv 1 km-re növeléséhez nyílt területen.
A reklámcsomag tervezésekor vegye figyelembe: minél több adat van az advertising csomagban, annál nagyobb az ütközés valószínűsége más eszközökkel. A gyors felderítés érdekében ajánlott csak a kritikus adatokat (Service UUID) az advertising PDU-ba helyezni, a kiegészítő adatokat pedig a scan response-ba.
A GATT-szerver a Peripheral-en tartalmazza az összes szolgáltatást és jellemzőt, amelyeket a Central felfedezhet és amelyekkel interakcióba léphet. Csatlakozás után a Central felfedezi a szolgáltatásokat (discover services), majd a jellemzőket (discover characteristics), és a GATT protokollon keresztül lép velük kapcsolatba.
A Peripheral mint GATT-szerver helyesen kell feldolgozza a Central kéréseit: olvasás (read request), írás (write request), értesítések (notification) és megerősített értesítések (indication). Minden kérés áthalad a GATT táblán, ahol minden attribútumhoz (szolgáltatás, jellemző, leíró) egy Handle — 16 bites cím — tartozik.
A Peripheral fejlesztője határozza meg az egyes attribútumok hozzáférési jogait: csak olvasás, csak írás, olvasás és írás, titkosítással vagy anélkül. Bizalmas adatok (személyes információk, orvosi paraméterek) esetén ajánlott a titkosítás megkövetelése MITM Protection segítségével.
CBPeripheralManager — a Core Bluetooth osztály a Peripheral szerep implementálásához iOS-ben. Kezeli a GATT-szervert, közzéteszi a szolgáltatásokat és jellemzőket, feldolgozza a Central kéréseit. Ellentétben a CBCentralManager-rel, a CBPeripheralManager nem szkennel — csak reklámoz és kiszolgálja a kapcsolatokat.
A Peripheral iOS-ben történő implementálásának fő lépései: a CBPeripheralManager inicializálása, szolgáltatások hozzáadása add-on keresztül, reklám indítása startAdvertising-en keresztül, a Central kéréseinek feldolgozása a CBPeripheralManagerDelegate delegált segítségével.
import CoreBluetooth
class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startAdvertising() {
let advertisementData: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Sensor",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
]
]
peripheralManager.startAdvertising(advertisementData)
}
func peripheralManagerDidUpdateState(
_ peripheral: CBPeripheralManager
) {
if peripheral.state == .poweredOn {
startAdvertising()
}
}
}
Az iOS lehetővé teszi a Peripheral számára, hogy háttérmódban működjön, ha a bluetooth-peripheral kulcs jelen van a Background Modes-ban. Háttérben az iOS korlátozott adatkészlettel reklámozhat és kiszolgálhat kapcsolatokat. Hosszú távú reklámhoz (több mint 180 másodperc) használja a CBAdvertisementDataWaitForResponseFromCentral opciót az energiatakarékosság érdekében.
Android BluetoothLeAdvertiser-t biztosít a Peripheral szerepben való munkához (API 21-től). Az API lehetővé teszi a reklám indítását konfigurálható paraméterekkel: adó teljesítménye, reklám intervalluma, csomag adatai. Az Android támogatja az extended advertising-et (BLE 5.0) is kompatibilis eszközökön.
import android.bluetooth.le.*;
private BluetoothLeAdvertiser advertiser;
public void startPeripheral() {
BluetoothAdapter adapter =
BluetoothAdapter.getDefaultAdapter();
advertiser = adapter.getBluetoothLeAdvertiser();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(
new ParcelUuid(
UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB")
)
)
.build();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
}
Androidon a Peripheral támogatása a gyártótól és az operációs rendszer verziójától függ. Nem minden eszköz támogatja a BluetoothLeAdvertiser-t — ellenőrizze az adapter.isMultipleAdvertisementSupported() segítségével. Android 10-től kezdve a Peripheral szerepben való munkához BLUETOOTH_ADVERTISE engedély szükséges, valamint futásidejű kérelem a target SDK 31+ alkalmazásokhoz.
Energiahatékonyság — a BLE kulcsfontosságú előnye, és a Peripheral ebben főszerepet játszik. Az eszköz több mint egy évig működhet egy CR2032-es elemről (220 mAh) az optimalizált energiafogyasztásnak köszönhetően. A Peripheral ideje nagy részét alvó módban tölti kikapcsolt reklámmal, csak reklámcsomag küldéséhez vagy a Central kérésének feldolgozásához ébred fel.
A Peripheral energiafogyasztása különböző módokban: alvó mód (deep sleep) — 1–5 µA, idle bekapcsolt időzítővel — 10–50 µA, advertising — 5–15 mA (a csomag küldésének idejére), connected — 5–10 mA (a connection event idejére). 1000 ms advertising interval és 4 ms csomagidőtartam mellett az átlagos áram körülbelül 50–100 µA.
A Texas Instruments Application Report (SWRA478, 2024) szerint az advertising interval optimalizálása 100 ms-ról 1000 ms-ra 90%-kal csökkenti az átlagos energiafogyasztást. További megtakarítás érhető el a slave latency használatával (connection események kihagyása), a Tx Power csökkentésével rövid távolságokon és a reklám kikapcsolásával csatlakozás után (connectable advertising).
Gyakran Ismételt Kérdések
Igen, az értesítések (Notify/Indicate) mechanizmusán keresztül. Bár a kapcsolat kezdeményezője mindig a Central, csatlakozás után a Peripheral küldhet adatokat GATT-értesítéseken keresztül a Central explicit kérése nélkül. Ehhez a Central-nak előzetesen fel kell iratkoznia a CCCD-n keresztül.
A reklám időtartama nincs korlátozva a specifikáció által, de a gyakorlatban az elem energiája korlátozza. iOS-ben a Peripheral legfeljebb 180 másodpercig reklámozhat a háttérben munkamenetenként további beállítások nélkül. Androidon a reklám korlátlanul működhet, de jelentősen csökkenti az akkumulátor élettartamát.
Növelje az advertising interval-t (ajánlott 500–1000 ms), használjon slave latency-t a connection események kihagyásához, kapcsolja ki a reklámot csatlakozás után, és válassza a minimális Tx Power-t, amely elegendő a stabil kommunikációhoz a kívánt távolságon.
Non-connectable advertising — olyan mód, amikor a Peripheral reklámoz, de nem fogad el kapcsolódási kérelmeket. Olyan beacon-ökhöz használják, amelyek csak adatokat küldenek (például üzletazonosítót) kétirányú kapcsolat létrehozása nélkül. Energiát takarít meg a connectable advertising-hez képest.
31 bájtba belefér: jelzőzászlók (3 bájt), eszköznév (legfeljebb 28 bájt rövidített formában), szolgáltatás UUID-k listája (UUID-nként 2–16 bájt), gyártói adatok (legfeljebb 26 bájt). Optimális stratégia — a szolgáltatás UUID-k elhelyezése az advertising PDU-ban a szűréshez, a teljes név pedig a scan response-ban.
Ö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