Peripheral — je zařízení v architektuře Bluetooth Low Energy, které inzeruje své služby prostřednictvím advertising paketů a očekává připojení od Central. V ekosystému IoT je Peripheral obvykle zařízení s omezenou spotřebou energie: teplotní čidlo, chytrá lampa, fitness náramek, beacon. Bluetooth Core Specification 5.4 (2023) definuje reklamní protokol: Peripheral periodicky vysílá advertising pakety obsahující název zařízení, seznam služeb a uživatelská data, zatímco Central tyto pakety skenuje a rozhoduje, zda se připojit. Po navázání spojení funguje Peripheral jako GATT server, poskytující služby a charakteristiky pro čtení a zápis.
Hlavní body
Peripheral — je BLE zařízení, které implementuje GATT server a inzeruje své schopnosti prostřednictvím advertising kanálů. Na rozdíl od Central, které aktivně vyhledává zařízení, Peripheral pasivně čeká na připojení. Jedná se o asymetrický model optimalizovaný pro energetickou účinnost zařízení napájených bateriemi.
Peripheral může být v několika režimech: advertising (reklama), connected (připojeno k Central), sleeping (spánek s vypnutou reklamou). V režimu advertising Peripheral periodicky vysílá krátké datové pakety s minimální spotřebou energie. Po připojení přejde Peripheral do režimu connected, kde si vyměňuje data s Central podle dohodnutého connection intervalu.
Podle Bluetooth Core Specification 5.4 (2023) může zařízení dynamicky přepínat mezi rolemi Peripheral a Central, ale v každém okamžiku je pro jedno připojení role pevná. Typický scénář: IoT senzor neustále pracuje v roli Peripheral a smartphone spravuje připojení jako Central.
Pro vývojáře je důležité pochopit: Peripheral určuje, které služby a charakteristiky jsou dostupné, a spravuje k nim přístup. Struktura GATT serveru na Peripheral určuje, jaká data může Central číst a jaké příkazy může zapisovat.
Advertising (reklama) — je mechanismus, kterým Peripheral oznamuje svou přítomnost. Peripheral vysílá advertising pakety na třech vyhrazených kanálech (37, 38, 39) v intervalu od 20 ms do 10.24 sekund. Každý reklamní paket obsahuje pevné informace a může zahrnovat volitelná data.
Existují dva typy reklamních paketů: advertising PDU (hlavní paket) a scan response PDU (odpověď na dotaz Central). Hlavní paket obsahuje povinná pole: typ paketu, adresu odesílatele, data. Pokud Central odešle scan request, Peripheral odpoví dalším paketem s úplnějšími informacemi — například s plným názvem zařízení.
Parametry advertising ovlivňují rychlost detekce a spotřebu energie. Advertising interval — čas mezi odesíláním paketů. Čím kratší interval, tím rychleji Central detekuje zařízení, ale tím více energie Peripheral spotřebovává. Doporučený interval: 100–1000 ms pro většinu zařízení.
| Parametr | Rozsah | Vliv | Doporučení |
|---|---|---|---|
| Advertising Interval | 20 ms – 10.24 s | Rychlost detekce, energie | 100–1000 ms pro rovnováhu |
| Advertising Channels | 37, 38, 39 | Spolehlivost detekce | Všechny 3 kanály povinně |
| Tx Power | −20 – +10 dBm | Dosah, rušení | 0 dBm pro interiér, +4 dBm pro exteriér |
| Advertising Timeout | 0 – 180 sekund | Délka reklamy | 0 (nekonečno) pro beacon |
Reklamní paket BLE má omezení 31 bajtů pro advertising PDU a dalších 31 bajtů pro scan response. Uvnitř paketu jsou data organizována ve formátu AD Structure (Advertising Data Structure): každé pole má typ (1 bajt), délku (1 bajt) a hodnotu.
Nejčastěji používané AD Type: Flags (0x01) — režimy připojení a detekce, Local Name (0x08 nebo 0x09) — název zařízení, Service UUID List (0x02–0x07) — seznam UUID služeb, Manufacturer Specific Data (0xFF) — data výrobce. Správné zabalení dat do 31bajtového paketu je důležitým úkolem pro vývojáře vestavěných zařízení.
Pro zařízení, která potřebují přenést více dat, existuje extended advertising (BLE 5.0+), které zvyšuje velikost reklamního paketu na 251 bajtů a přidává nové typy paketů. Extended advertising také podporuje kódované kanály (coded PHY) pro zvýšení dosahu až na 1 km na otevřeném prostranství.
Při návrhu reklamního paketu zvažte: čím více dat v advertising paketu, tím vyšší je pravděpodobnost kolize s jinými zařízeními. Pro rychlou detekci se doporučuje umístit do advertising PDU pouze kritická data (Service UUID) a doplňková data do scan response.
GATT server na Peripheral obsahuje všechny služby a charakteristiky, které Central může objevit a se kterými může interagovat. Po připojení Central objeví služby (discover services), poté charakteristiky (discover characteristics) a interaguje s nimi prostřednictvím GATT protokolu.
Peripheral jako GATT server musí správně zpracovávat požadavky od Central: čtení (read request), zápis (write request), oznámení (notification) a potvrzená oznámení (indication). Každý požadavek prochází GATT tabulkou, kde každému atributu (služba, charakteristika, deskriptor) odpovídá Handle — 16bitová adresa.
Vývojář Peripheral určuje přístupová práva pro každý atribut: pouze čtení, pouze zápis, čtení i zápis, s šifrováním nebo bez. Pro důvěrná data (osobní informace, lékařské parametry) se doporučuje vyžadovat šifrování prostřednictvím MITM Protection.
CBPeripheralManager — třída Core Bluetooth pro implementaci role Peripheral v iOS. Spravuje GATT server, publikuje služby a charakteristiky, zpracovává požadavky od Central. Na rozdíl od CBCentralManager, CBPeripheralManager neskenuje — pouze inzeruje a obsluhuje připojení.
Hlavní kroky implementace Peripheral v iOS: inicializace CBPeripheralManager, přidání služeb pomocí add, spuštění reklamy pomocí startAdvertising, zpracování požadavků od Central prostřednictvím delegáta CBPeripheralManagerDelegate.
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()
}
}
}
iOS umožňuje Peripheral pracovat v režimu na pozadí, pokud je v Background Modes přítomen klíč bluetooth-peripheral. Na pozadí může iOS inzerovat s omezenou sadou dat a obsluhovat připojení. Pro dlouhodobou reklamu (více než 180 sekund) použijte volbu CBAdvertisementDataWaitForResponseFromCentral pro úsporu energie.
Android poskytuje BluetoothLeAdvertiser pro práci v roli Peripheral (od API 21). API umožňuje spustit reklamu s konfigurovatelnými parametry: výkon vysílače, interval reklamy, data paketu. Android také podporuje extended advertising (BLE 5.0) na kompatibilních zařízeních.
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
);
}
V Androidu závisí podpora Peripheral na výrobci a verzi OS. Ne všechna zařízení podporují BluetoothLeAdvertiser — ověřte pomocí adapter.isMultipleAdvertisementSupported(). Od Androidu 10 je pro práci v roli Peripheral vyžadováno oprávnění BLUETOOTH_ADVERTISE, stejně jako runtime požadavek pro aplikace s target SDK 31+.
Energetická účinnost — klíčová výhoda BLE a Peripheral v tom hraje hlavní roli. Zařízení může pracovat na baterii CR2032 (220 mAh) déle než rok díky optimalizované spotřebě energie. Peripheral tráví většinu času v režimu spánku s vypnutou reklamou a probouzí se pouze pro odeslání reklamního paketu nebo zpracování požadavku od Central.
Spotřeba energie Peripheral v různých režimech: režim spánku (deep sleep) — 1–5 µA, idle se zapnutým časovačem — 10–50 µA, advertising — 5–15 mA (po dobu odesílání paketu), connected — 5–10 mA (po dobu connection event). Při advertising intervalu 1000 ms a délce paketu 4 ms je průměrný proud přibližně 50–100 µA.
Podle Texas Instruments Application Report (SWRA478, 2024) snižuje optimalizace advertising intervalu ze 100 ms na 1000 ms průměrnou spotřebu energie o 90%. Další úspory je dosaženo použitím slave latency (přeskakování connection events), snížením Tx Power na krátké vzdálenosti a vypnutím reklamy po připojení (connectable advertising).
Často kladené otázky
Ano, prostřednictvím mechanismu oznámení (Notify/Indicate). Přestože je iniciátorem spojení vždy Central, po připojení může Peripheral odesílat data prostřednictvím GATT oznámení bez explicitního požadavku od Central. K tomu se musí Central předem přihlásit prostřednictvím CCCD.
Délka reklamy není specifikací omezena, ale v praxi je omezena energií baterie. V iOS může Peripheral inzerovat na pozadí nejvýše 180 sekund na relaci bez dalších nastavení. V Androidu může reklama fungovat neomezeně, ale výrazně zkracuje dobu provozu na baterii.
Zvyšte advertising interval (doporučeno 500–1000 ms), používejte slave latency pro přeskakování connection events, vypněte reklamu po připojení a zvolte minimální Tx Power dostačující pro stabilní komunikaci na požadovanou vzdálenost.
Non-connectable advertising — režim, ve kterém Peripheral inzeruje, ale nepřijímá požadavky na připojení. Používá se pro beacon, které pouze vysílají data (například identifikátor obchodu) bez vytvoření obousměrného spojení. Šetří energii ve srovnání s connectable advertising.
Do 31 bajtů lze zahrnout: příznaky (3 bajty), název zařízení (až 28 bajtů ve zkrácené podobě), seznam UUID služeb (2–16 bajtů na UUID), data výrobce (až 26 bajtů). Optimální strategie — umístit UUID služeb do advertising PDU pro filtrování a plný název do scan response.
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é