Peripheral — is een apparaat in de Bluetooth Low Energy-architectuur dat zijn services adverteert via advertising-pakketten en wacht op een verbinding van Central. In het IoT-ecosysteem is Peripheral meestal een apparaat met een laag energieverbruik: temperatuursensor, slimme lamp, fitnessarmband, beacon. Bluetooth Core Specification 5.4 (2023) definieert het advertentieprotocol: Peripheral verzendt periodiek advertising-pakketten met de apparaatnaam, servicelijst en gebruikersgegevens, en Central scant deze pakketten en beslist of er verbinding wordt gemaakt. Na het tot stand brengen van de verbinding fungeert Peripheral als GATT-server en biedt services en kenmerken voor lezen en schrijven.
Belangrijkste punten
Peripheral — is een BLE-apparaat dat een GATT-server implementeert en zijn mogelijkheden adverteert via advertising-kanalen. In tegenstelling tot Central, dat actief naar apparaten zoekt, wacht Peripheral passief op verbinding. Dit is een asymmetrisch model, geoptimaliseerd voor energie-efficiëntie van apparaten op batterijvoeding.
Peripheral kan zich in verschillende modi bevinden: advertising (advertentie), connected (verbonden met Central), sleeping (slaap met uitgeschakelde advertentie). In de advertising-modus verzendt Peripheral periodiek korte gegevenspakketten met minimaal energieverbruik. Na verbinding gaat Peripheral naar de connected-modus, waar gegevens worden uitgewisseld met Central volgens het overeengekomen connection-interval.
Volgens Bluetooth Core Specification 5.4 (2023) kan een apparaat dynamisch schakelen tussen de rollen Peripheral en Central, maar op elk moment is de rol voor één verbinding vast. Een typisch scenario: een IoT-sensor werkt constant in de Peripheral-rol en een smartphone beheert de verbinding als Central.
Het is belangrijk voor de ontwikkelaar om te begrijpen: Peripheral bepaalt welke services en kenmerken beschikbaar zijn en beheert de toegang ertoe. De structuur van de GATT-server op Peripheral bepaalt welke gegevens Central kan lezen en welke opdrachten het kan schrijven.
Advertising (advertentie) — is het mechanisme waarmee Peripheral zijn aanwezigheid aankondigt. Peripheral verzendt advertising-pakketten op drie speciale kanalen (37, 38, 39) met een interval van 20 ms tot 10.24 seconden. Elk advertentiepakket bevat vaste informatie en kan optionele gegevens bevatten.
Er zijn twee soorten advertentiepakketten: advertising PDU (het hoofdpakket) en scan response PDU (antwoord op een Central-verzoek). Het hoofdpakket bevat verplichte velden: pakkettype, afzenderadres, gegevens. Als Central een scan-verzoek stuurt, antwoordt Peripheral met een extra pakket met volledigere informatie — bijvoorbeeld de volledige apparaatnaam.
Advertising-parameters beïnvloeden de detectiesnelheid en het energieverbruik. Advertising-interval — de tijd tussen het verzenden van pakketten. Hoe korter het interval, hoe sneller Central het apparaat detecteert, maar hoe meer energie Peripheral verbruikt. Aanbevolen interval: 100–1000 ms voor de meeste apparaten.
| Parameter | Bereik | Invloed | Aanbeveling |
|---|---|---|---|
| Advertising Interval | 20 ms – 10.24 s | Detectiesnelheid, energie | 100–1000 ms voor balans |
| Advertising Channels | 37, 38, 39 | Detectiebetrouwbaarheid | Alle 3 kanalen verplicht |
| Tx Power | −20 – +10 dBm | Bereik, interferentie | 0 dBm voor binnen, +4 dBm voor buiten |
| Advertising Timeout | 0 – 180 seconden | Advertentieduur | 0 (oneindig) voor beacons |
Het BLE-advertentiepakket heeft een limiet van 31 bytes voor advertising PDU en nog eens 31 bytes voor scan response. Binnen het pakket zijn de gegevens georganiseerd in AD Structure-indeling (Advertising Data Structure): elk veld heeft een type (1 byte), lengte (1 byte) en waarde.
De meest gebruikte AD Type: Flags (0x01) — verbindings- en detectiemodi, Local Name (0x08 of 0x09) — apparaatnaam, Service UUID List (0x02–0x07) — lijst met service-UUID's, Manufacturer Specific Data (0xFF) — fabrikantgegevens. Het correct verpakken van gegevens in een pakket van 31 bytes is een belangrijke taak voor de ontwikkelaar van embedded apparaten.
Voor apparaten die meer gegevens moeten verzenden, is er extended advertising (BLE 5.0+), dat de grootte van het advertentiepakket vergroot tot 251 bytes en nieuwe pakkettypen toevoegt. Extended advertising ondersteunt ook gecodeerde kanalen (coded PHY) om het bereik te vergroten tot 1 km in open gebied.
Houd bij het ontwerpen van het advertentiepakket rekening met het volgende: hoe meer gegevens in het advertising-pakket, hoe groter de kans op botsingen met andere apparaten. Voor snelle detectie wordt aanbevolen om alleen kritieke gegevens (Service UUID) in advertising PDU te plaatsen en aanvullende gegevens in scan response.
De GATT-server op Peripheral bevat alle services en kenmerken die Central kan detecteren en waarmee het kan interageren. Na verbinding detecteert Central de services (discover services), vervolgens de kenmerken (discover characteristics) en interageert ermee via het GATT-protocol.
Peripheral als GATT-server moet verzoeken van Central correct verwerken: lezen (read request), schrijven (write request), meldingen (notification) en bevestigde meldingen (indication). Elk verzoek doorloopt de GATT-tabel, waar elk attribuut (service, kenmerk, descriptor) overeenkomt met een Handle — een 16-bits adres.
De ontwikkelaar van Peripheral bepaalt de toegangsrechten voor elk attribuut: alleen lezen, alleen schrijven, lezen en schrijven, met of zonder codering. Voor vertrouwelijke gegevens (persoonlijke informatie, medische parameters) wordt aanbevolen om codering via MITM Protection te vereisen.
CBPeripheralManager — de Core Bluetooth-klasse voor het implementeren van de Peripheral-rol op iOS. Het beheert de GATT-server, publiceert services en kenmerken en verwerkt verzoeken van Central. In tegenstelling tot CBCentralManager scant CBPeripheralManager niet — het adverteert alleen en bedient verbindingen.
De belangrijkste stappen voor het implementeren van Peripheral op iOS: initialisatie van CBPeripheralManager, toevoegen van services via add, starten van advertentie via startAdvertising, verwerken van verzoeken van Central via de delegate 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 staat Peripheral toe om op de achtergrond te werken wanneer de bluetooth-peripheral-sleutel aanwezig is in Background Modes. Op de achtergrond kan iOS adverteren met een beperkte gegevensset en verbindingen bedienen. Gebruik voor langdurige advertentie (meer dan 180 seconden) de optie CBAdvertisementDataWaitForResponseFromCentral om energie te besparen.
Android biedt BluetoothLeAdvertiser voor het werken in de Peripheral-rol (vanaf API 21). De API maakt het mogelijk om advertentie te starten met configureerbare parameters: zendvermogen, advertentie-interval, pakketgegevens. Android ondersteunt ook extended advertising (BLE 5.0) op compatibele apparaten.
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
);
}
Op Android hangt de ondersteuning voor Peripheral af van de fabrikant en OS-versie. Niet alle apparaten ondersteunen BluetoothLeAdvertiser — controleer via adapter.isMultipleAdvertisementSupported(). Vanaf Android 10 is voor de Peripheral-rol de machtiging BLUETOOTH_ADVERTISE vereist, evenals een runtime-aanvraag voor apps met target SDK 31+.
Energie-efficiëntie — het belangrijkste voordeel van BLE, en Peripheral speelt hierin de hoofdrol. Het apparaat kan meer dan een jaar werken op een CR2032-batterij (220 mAh) dankzij geoptimaliseerd energieverbruik. Peripheral brengt het grootste deel van de tijd door in slaapmodus met uitgeschakelde advertentie, en wordt alleen wakker om een advertentiepakket te verzenden of een verzoek van Central te verwerken.
Het stroomverbruik van Peripheral in verschillende modi: slaapmodus (deep sleep) — 1–5 µA, idle met ingeschakelde timer — 10–50 µA, advertising — 5–15 mA (tijdens het verzenden van pakket), connected — 5–10 mA (tijdens connection event). Bij een advertising-interval van 1000 ms en een pakketduur van 4 ms bedraagt de gemiddelde stroom ongeveer 50–100 µA.
Volgens Texas Instruments Application Report (SWRA478, 2024) vermindert optimalisatie van het advertising-interval van 100 ms naar 1000 ms het gemiddelde energieverbruik met 90%. Extra besparing wordt bereikt door gebruik van slave latency (overslaan van connection events), vermindering van Tx Power over korte afstanden en uitschakeling van advertentie na verbinding (connectable advertising).
Veelgestelde vragen
Ja, via het mechanisme van meldingen (Notify/Indicate). Hoewel de initiatiefnemer van de verbinding altijd Central is, kan Peripheral na verbinding gegevens verzenden via GATT-meldingen zonder expliciet verzoek van Central. Hiervoor moet Central zich vooraf abonneren via CCCD.
De advertentieduur is niet beperkt door de specificatie, maar in de praktijk wordt deze beperkt door de batterij-energie. Op iOS kan Peripheral op de achtergrond maximaal 180 seconden per sessie adverteren zonder extra instellingen. Op Android kan advertentie onbeperkt werken, maar dit verkort de batterijduur aanzienlijk.
Verhoog het advertising-interval (aanbevolen 500–1000 ms), gebruik slave latency om connection events over te slaan, schakel advertentie uit na verbinding en kies het minimale Tx Power dat voldoende is voor stabiele communicatie op de gewenste afstand.
Non-connectable advertising — een modus waarin Peripheral adverteert maar geen verbindingsverzoeken accepteert. Het wordt gebruikt voor beacons die alleen gegevens verzenden (bijvoorbeeld een winkelidentificatie) zonder tweerichtingscommunicatie. Het bespaart energie in vergelijking met connectable advertising.
In 31 bytes kunnen worden opgenomen: vlaggen (3 bytes), apparaatnaam (tot 28 bytes in verkorte vorm), lijst met service-UUID's (2–16 bytes per UUID), fabrikantgegevens (tot 26 bytes). Optimale strategie — plaats service-UUID's in advertising PDU voor filtering en de volledige naam in scan response.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook