Peripheral — är en enhet i Bluetooth Low Energy-arkitekturen som annonserar sina tjänster via advertising-paket och väntar på anslutning från Central. I IoT-ekosystemet är Peripheral vanligtvis en enhet med begränsad strömförbrukning: temperatursensor, smart lampa, fitnessarmband, beacon. Bluetooth Core Specification 5.4 (2023) definierar annonseringsprotokollet: Peripheral skickar periodiskt advertising-paket som innehåller enhetens namn, tjänstlista och användardata, medan Central skannar dessa paket och bestämmer om den ska ansluta. Efter att anslutningen etablerats fungerar Peripheral som en GATT-server och tillhandahåller tjänster och egenskaper för läsning och skrivning.
Huvudpunkter
Peripheral — är en BLE-enhet som implementerar en GATT-server och annonserar sina möjligheter via advertising-kanaler. Till skillnad från Central, som aktivt söker efter enheter, väntar Peripheral passivt på anslutning. Detta är en asymmetrisk modell som är optimerad för energieffektivitet hos batteridrivna enheter.
Peripheral kan vara i flera lägen: advertising (annonsering), connected (ansluten till Central), sleeping (sömn med annonsering avstängd). I advertising-läget skickar Peripheral periodiskt korta datapaket med minimal strömförbrukning. Efter anslutning går Peripheral till connected-läget, där den utbyter data med Central enligt det överenskomna connection-intervallet.
Enligt Bluetooth Core Specification 5.4 (2023) kan en enhet dynamiskt växla mellan rollerna Peripheral och Central, men varje ögonblick är rollen för en anslutning fast. Ett typiskt scenario: en IoT-sensor arbetar ständigt i Peripheral-rollen och en smartphone hanterar anslutningen som Central.
Det är viktigt för utvecklaren att förstå: Peripheral bestämmer vilka tjänster och egenskaper som är tillgängliga och hanterar åtkomsten till dem. Strukturen på GATT-servern på Peripheral bestämmer vilka data Central kan läsa och vilka kommandon den kan skriva.
Advertising (annonsering) — är mekanismen genom vilken Peripheral meddelar sin närvaro. Peripheral skickar advertising-paket på tre dedikerade kanaler (37, 38, 39) med ett intervall från 20 ms till 10.24 sekunder. Varje annonseringspaket innehåller fast information och kan inkludera valfria data.
Det finns två typer av annonseringspaket: advertising PDU (huvudpaket) och scan response PDU (svar på Central-förfrågan). Huvudpaketet innehåller obligatoriska fält: pakettyp, avsändarens adress, data. Om Central skickar en skanningsförfrågan (scan request) svarar Peripheral med ett extra paket som innehåller mer fullständig information — till exempel enhetens fullständiga namn.
Advertising-parametrar påverkar detekteringshastigheten och strömförbrukningen. Advertising-intervall — tiden mellan paketsändningar. Ju kortare intervall, desto snabbare upptäcker Central enheten, men desto mer energi förbrukar Peripheral. Rekommenderat intervall: 100–1000 ms för de flesta enheter.
| Parameter | Intervall | Påverkan | Rekommendation |
|---|---|---|---|
| Advertising Interval | 20 ms – 10.24 s | Detekteringshastighet, energi | 100–1000 ms för balans |
| Advertising Channels | 37, 38, 39 | Detekteringstillförlitlighet | Alla 3 kanaler obligatoriskt |
| Tx Power | −20 – +10 dBm | Räckvidd, störningar | 0 dBm för inomhus, +4 dBm för utomhus |
| Advertising Timeout | 0 – 180 sekunder | Annonseringens varaktighet | 0 (oändligt) för beacons |
BLE-annonseringspaketet har en begränsning på 31 byte för advertising PDU och ytterligare 31 byte för scan response. Inuti paketet är data organiserade i AD Structure-format (Advertising Data Structure): varje fält har en typ (1 byte), längd (1 byte) och värde.
De mest använda AD Type: Flags (0x01) — anslutnings- och detekteringslägen, Local Name (0x08 eller 0x09) — enhetens namn, Service UUID List (0x02–0x07) — lista över tjänsters UUID, Manufacturer Specific Data (0xFF) — tillverkningsdata. Korrekt packning av data i ett 31-byte-paket är en viktig uppgift för utvecklaren av inbäddade enheter.
För enheter som behöver skicka mer data finns extended advertising (BLE 5.0+), som ökar annonseringspaketets storlek till 251 byte och lägger till nya pakettyper. Extended advertising stöder även kodade kanaler (coded PHY) för att öka räckvidden upp till 1 km på öppen yta.
När du utformar annonseringspaketet, tänk på: ju mer data i advertising-paketet, desto högre är sannolikheten för kollision med andra enheter. För snabb detektering rekommenderas att endast placera kritiska data (Service UUID) i advertising PDU och ytterligare data i scan response.
GATT-servern på Peripheral innehåller alla tjänster och egenskaper som Central kan upptäcka och interagera med. Efter anslutning upptäcker Central tjänster (discover services), sedan egenskaper (discover characteristics) och interagerar med dem via GATT-protokollet.
Peripheral som GATT-server måste korrekt behandla förfrågningar från Central: läsning (read request), skrivning (write request), notifieringar (notification) och bekräftade notifieringar (indication). Varje begäran passerar genom GATT-tabellen, där varje attribut (tjänst, egenskap, beskrivning) motsvarar ett Handle — en 16-bitars adress.
Utvecklaren av Peripheral bestämmer åtkomsträttigheterna för varje attribut: endast läsning, endast skrivning, läsning och skrivning, med eller utan kryptering. För konfidentiella data (personlig information, medicinska parametrar) rekommenderas att kräva kryptering via MITM Protection.
CBPeripheralManager — Core Bluetooth-klassen för att implementera Peripheral-rollen på iOS. Den hanterar GATT-servern, publicerar tjänster och egenskaper, behandlar förfrågningar från Central. Till skillnad från CBCentralManager skannar CBPeripheralManager inte — den annonserar bara och betjänar anslutningar.
Huvudstegen för att implementera Peripheral på iOS: initiera CBPeripheralManager, lägga till tjänster via add, starta annonsering via startAdvertising, behandla förfrågningar från Central via delegaten 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 tillåter Peripheral att arbeta i bakgrundsläge när bluetooth-peripheral-nyckeln finns i Background Modes. I bakgrunden kan iOS annonsera med en begränsad datamängd och betjäna anslutningar. För långvarig annonsering (mer än 180 sekunder), använd alternativet CBAdvertisementDataWaitForResponseFromCentral för att spara energi.
Android tillhandahåller BluetoothLeAdvertiser för arbete i Peripheral-rollen (från API 21). API:et gör det möjligt att starta annonsering med konfigurerbara parametrar: sändareffekt, annonseringsintervall, paketdata. Android stöder även extended advertising (BLE 5.0) på kompatibla enheter.
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
);
}
På Android beror stödet för Peripheral på tillverkaren och OS-versionen. Alla enheter stöder inte BluetoothLeAdvertiser — kontrollera via adapter.isMultipleAdvertisementSupported(). Från och med Android 10 krävs behörigheten BLUETOOTH_ADVERTISE för att arbeta i Peripheral-rollen, samt en körningsförfrågan för appar med target SDK 31+.
Energieffektivitet — den viktigaste fördelen med BLE, och Peripheral spelar huvudrollen i detta. Enheten kan fungera på ett CR2032-batteri (220 mAh) i mer än ett år tack vare optimerad strömförbrukning. Peripheral tillbringar större delen av tiden i sömnläge med avstängd annonsering och vaknar bara för att skicka ett annonseringspaket eller behandla en förfrågan från Central.
Strömförbrukningen för Peripheral i olika lägen: sömnläge (deep sleep) — 1–5 µA, idle med timer påslagen — 10–50 µA, advertising — 5–15 mA (under paketsändning), connected — 5–10 mA (under connection event). Vid advertising-intervall 1000 ms och paketvaraktighet 4 ms är medelströmmen cirka 50–100 µA.
Enligt Texas Instruments Application Report (SWRA478, 2024) minskar optimering av advertising-intervallet från 100 ms till 1000 ms den genomsnittliga strömförbrukningen med 90%. Ytterligare besparingar uppnås genom att använda slave latency (hoppa över connection events), minska Tx Power på korta avstånd och stänga av annonsering efter anslutning (connectable advertising).
Vanliga frågor
Ja, genom mekanismen för notifieringar (Notify/Indicate). Även om initiativtagaren till anslutningen alltid är Central, kan Peripheral efter anslutning skicka data via GATT-notifieringar utan uttrycklig begäran från Central. För detta måste Central prenumerera i förväg via CCCD.
Annonseringens varaktighet är inte begränsad av specifikationen, men i praktiken begränsas den av batteriets energi. På iOS kan Peripheral annonsera i bakgrunden i högst 180 sekunder per session utan extra inställningar. På Android kan annonsering fungera obegränsat, men förkortar avsevärt batteritiden.
Öka advertising-intervallet (rekommenderas 500–1000 ms), använd slave latency för att hoppa över connection events, stäng av annonsering efter anslutning och välj den minimala Tx Power som räcker för stabil kommunikation på önskat avstånd.
Non-connectable advertising — ett läge där Peripheral annonserar men inte accepterar anslutningsförfrågningar. Används för beacons som endast sänder data (till exempel butiksidentifierare) utan att upprätta tvåvägskommunikation. Sparar energi jämfört med connectable advertising.
I 31 byte kan man inkludera: flaggor (3 byte), enhetsnamn (upp till 28 byte i förkortad form), lista över tjänsters UUID (2–16 byte per UUID), tillverkningsdata (upp till 26 byte). Optimal strategi — placera tjänsters UUID i advertising PDU för filtrering och fullständigt namn i scan response.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också