Peripheral ist ein Gerät in der Bluetooth-Low-Energy-Architektur, das seine Dienste über Advertising-Pakete bewirbt und auf eine Verbindung von einem Central wartet. Im IoT-Ökosystem ist ein Peripheral typischerweise ein Gerät mit begrenztem Stromverbrauch: ein Temperatursensor, eine intelligente Lampe, ein Fitness-Tracker, ein Beacon. Bluetooth Core Specification 5.4 (2023) definiert das Advertising-Protokoll: Der Peripheral sendet periodisch Advertising-Pakete mit dem Gerätenamen, einer Liste von Diensten und benutzerdefinierten Daten, während der Central diese Pakete scannt und entscheidet, ob eine Verbindung hergestellt werden soll. Nach dem Verbindungsaufbau fungiert der Peripheral als GATT-Server und stellt Dienste und Merkmale zum Lesen und Schreiben bereit.
Wichtige Punkte
Peripheral ist ein BLE-Gerät, das einen GATT-Server implementiert und seine Fähigkeiten über Advertising-Kanäle bewirbt. Im Gegensatz zu einem Central, das aktiv nach Geräten sucht, wartet ein Peripheral passiv auf Verbindungen. Dies ist ein asymmetrisches Modell, das für die Energieeffizienz batteriebetriebener Geräte optimiert ist.
Peripheral kann sich in mehreren Modi befinden: Advertising (Werbung), connected (mit einem Central verbunden), sleeping (Schlaf mit deaktivierter Werbung). Im Advertising-Modus sendet der Peripheral periodisch kurze Datenpakete mit minimalem Stromverbrauch. Nach der Verbindung wechselt der Peripheral in den Connected-Modus, in dem er gemà0 dem vereinbarten Verbindungsintervall Daten mit dem Central austauscht.
Laut Bluetooth Core Specification 5.4 (2023) kann ein Gerät dynamisch zwischen den Rollen Peripheral und Central wechseln, aber zu jedem Zeitpunkt ist die Rolle für eine einzelne Verbindung festgelegt. Ein typisches Szenario: Ein IoT-Sensor arbeitet ständig als Peripheral, während ein Smartphone die Verbindung als Central verwaltet.
Für Entwickler ist es wichtig zu verstehen: Der Peripheral bestimmt, welche Dienste und Merkmale verfügbar sind, und verwaltet den Zugriff auf sie. Die Struktur des GATT-Servers auf dem Peripheral bestimmt, welche Daten der Central lesen und welche Befehle er schreiben kann.
Advertising ist der Mechanismus, mit dem ein Peripheral seine Präsenz ankündigt. Der Peripheral sendet Advertising-Pakete auf drei dedizierten Kanälen (37, 38, 39) in einem Intervall von 20 ms bis 10,24 Sekunden. Jedes Advertising-Paket enthält feste Informationen und kann optionale Daten enthalten.
Es gibt zwei Arten von Advertising-Paketen: Advertising-PDU (Hauptpaket) und Scan-Response-PDU (Antwort auf eine Central-Anfrage). Das Hauptpaket enthält Pflichtfelder: Pakettyp, Absenderadresse, Daten. Wenn ein Central eine Scan-Anfrage sendet, antwortet der Peripheral mit einem zusätzlichen Paket, das vollständigere Informationen enthält – zum Beispiel den vollständigen Gerätenamen.
Advertising-Parameter beeinflussen die Erkennungsgeschwindigkeit und den Stromverbrauch. Advertising-Intervall ist die Zeit zwischen Paketsendungen. Je kürzer das Intervall, desto schneller erkennt der Central das Gerät, aber desto mehr Strom verbraucht der Peripheral. Empfohlenes Intervall: 100–1000 ms für die meisten Geräte.
| Parameter | Bereich | Auswirkung | Empfehlung |
|---|---|---|---|
| Advertising-Intervall | 20 ms – 10,24 s | Erkennungsgeschwindigkeit, Strom | 100–1000 ms für Ausgewogenheit |
| Advertising-Kanäle | 37, 38, 39 | Erkennungszuverlässigkeit | Alle 3 Kanäle erforderlich |
| Sendeleistung | -20 – +10 dBm | Reichweite, Störungen | 0 dBm innen, +4 dBm außen |
| Advertising-Timeout | 0 – 180 Sekunden | Werbedauer | 0 (unendlich) für Beacons |
BLE-Advertising-Paket hat ein Limit von 31 Byte für die Advertising-PDU und weitere 31 Byte für die Scan-Response. Innerhalb des Pakets sind die Daten im AD-Structure-Format (Advertising Data Structure) organisiert: Jedes Feld hat einen Typ (1 Byte), eine Länge (1 Byte) und einen Wert.
Die am häufigsten verwendeten AD-Typen: Flags (0x01) – Verbindungs- und Erkennungsmodi, Local Name (0x08 oder 0x09) – Gerätename, Service UUID List (0x02–0x07) – Liste der Dienst-UUIDs, Manufacturer Specific Data (0xFF) – Herstellerdaten. Das korrekte Verpacken von Daten in ein 31-Byte-Paket ist eine wichtige Aufgabe für Entwickler eingebetteter Geräte.
Für Geräte, die mehr Daten übertragen müssen, erhöht Extended Advertising (BLE 5.0+) die Paketgröße auf 251 Byte und fügt neue Pakettypen hinzu. Extended Advertising unterstützt auch codierte PHY-Kanäle für eine erhöhte Reichweite von bis zu 1 km im Freien.
Beim Entwurf eines Advertising-Pakets beachten: Je mehr Daten im Advertising-Paket, desto höher die Wahrscheinlichkeit einer Kollision mit anderen Geräten. Für eine schnelle Erkennung wird empfohlen, nur kritische Daten (Service-UUID) in die Advertising-PDU und zusätzliche Daten in die Scan-Response zu platzieren.
GATT-Server auf dem Peripheral enthält alle Dienste und Merkmale, die ein Central erkennen und mit denen es interagieren kann. Nach der Verbindung erkennt der Central Dienste, dann Merkmale und interagiert mit ihnen über das GATT-Protokoll.
Peripheral als GATT-Server muss Anfragen vom Central korrekt bearbeiten: Leseanfragen, Schreibanfragen, Benachrichtigungen und Bestätigungen. Jede Anfrage durchläuft die GATT-Tabelle, in der jedes Attribut (Dienst, Merkmal, Deskriptor) einem Handle – einer 16-Bit-Adresse – entspricht.
Der Peripheral-Entwickler definiert Zugriffsberechtigungen für jedes Attribut: Nur-Lesen, Nur-Schreiben, Lesen und Schreiben, mit oder ohne Verschlüsselung. Für vertrauliche Daten (persönliche Informationen, medizinische Indikatoren) wird empfohlen, die Verschlüsselung über MITM Protection zu aktivieren.
CBPeripheralManager ist eine Core-Blue-Zahn-Klasse zur Implementierung der Peripheral-Rolle unter iOS. Er verwaltet den GATT-Server, veröffentlicht Dienste und Merkmale und bearbeitet Anfragen von Centrals. Im Gegensatz zu CBCentralManager scannt CBPeripheralManager nicht – er wirbt nur und verwaltet Verbindungen.
Die wichtigsten Schritte zur Implementierung eines Peripheral unter iOS: Initialisieren von CBPeripheralManager, Hinzufügen von Diensten über add, Starten der Werbung über startAdvertising, Bearbeiten von Anfragen von Centrals über den 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 erlaubt dem Peripheral, mit dem bluetooth-peripheral-Schlüssel in Background Modes im Hintergrund zu arbeiten. Im Hintergrund kann iOS mit einem begrenzten Datensatz werben und Verbindungen verwalten. Für erweiterte Werbung (über 180 Sekunden) verwenden Sie die Option CBAdvertisementDataWaitForResponseFromCentral, um Strom zu sparen.
Android stellt BluetoothLeAdvertiser für die Arbeit in der Peripheral-Rolle bereit (ab API 21). Die API ermöglicht das Starten von Werbung mit konfigurierbaren Parametern: Sendeleistung, Werbeintervall, Paketdaten. Android unterstützt auch Extended Advertising (BLE 5.0) auf kompatiblen Geräten.
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
);
}
Unter Android hängt die Peripheral-Unterstützung vom Hersteller und der OS-Version ab. Nicht alle Geräte unterstützen BluetoothLeAdvertiser – überprüfen Sie dies mit adapter.isMultipleAdvertisementSupported(). Ab Android 10 ist die Berechtigung BLUETOOTH_ADVERTISE für die Peripheral-Rolle erforderlich, zusammen mit einer Laufzeitanfrage für Apps mit Ziel-SDK 31+.
Energieeffizienz ist ein Hauptvorteil von BLE, und der Peripheral spielt dabei eine entscheidende Rolle. Ein Gerät kann mit einer CR2032-Batterie (220 mAh) über ein Jahr lang betrieben werden, dank optimiertem Stromverbrauch. Die meiste Zeit verbringt der Peripheral im Schlafmodus mit deaktivierter Werbung und wacht nur auf, um ein Advertising-Paket zu senden oder eine Anfrage eines Central zu bearbeiten.
Stromverbrauch von Peripheral in verschiedenen Modi: Schlafmodus (Tiefschlaf) – 1–5 µA, Leerlauf mit aktiviertem Timer – 10–50 µA, Advertising – 5–15 mA (während der Paketübertragung), Connected – 5–10 mA (während des Verbindungsereignisses). Bei einem Advertising-Intervall von 1000 ms und einer Paketdauer von 4 ms beträgt der durchschnittliche Strom etwa 50–100 µA.
Laut Texas Instruments Application Report (SWRA478, 2024) reduziert die Optimierung des Advertising-Intervalls von 100 ms auf 1000 ms den durchschnittlichen Stromverbrauch um 90%. Zusätzliche Einsparungen werden durch Slave-Latenz (Überspringen von Verbindungsereignissen), Reduzierung der Sendeleistung auf kurzen Distanzen und Deaktivieren der Werbung nach der Verbindung (Connectable Advertising) erzielt.
Häufig gestellte Fragen
Ja, über den Benachrichtigungs-/Bestätigungsmechanismus. Obwohl der Central immer der Verbindungsinitiator ist, kann der Peripheral nach der Verbindung Daten über GATT-Benachrichtigungen ohne explizite Anfrage des Central senden. Dazu muss der Central zuvor über CCCD abonnieren.
Die Werbedauer ist nicht durch die Spezifikation begrenzt, wird aber in der Praxis durch die Batterieleistung eingeschränkt. Unter iOS kann ein Peripheral ohne zusätzliche Einstellungen maximal 180 Sekunden pro Sitzung im Hintergrund werben. Unter Android kann die Werbung unbegrenzt laufen, verkürzt jedoch die Batterielebensdauer erheblich.
Erhöhen Sie das Advertising-Intervall (empfohlen 500–1000 ms), verwenden Sie Slave-Latenz zum Überspringen von Verbindungsereignissen, deaktivieren Sie die Werbung nach der Verbindung und wählen Sie die minimale Sendeleistung, die für eine stabile Kommunikation auf der erforderlichen Distanz ausreicht.
Non-Connectable Advertising ist ein Modus, bei dem der Peripheral wirbt, aber keine Verbindungsanfragen annimmt. Es wird für Beacons verwendet, die nur Daten senden (z. B. eine Geschäftskennung), ohne eine bidirektionale Verbindung herzustellen. Es spart Energie im Vergleich zu Connectable Advertising.
In 31 Byte können Sie enthalten: Flags (3 Byte), Gerätenamen (bis zu 28 Byte in abgekürzter Form), eine Liste von Dienst-UUIDs (2–16 Byte pro UUID), Herstellerdaten (bis zu 26 Byte). Die optimale Strategie besteht darin, Dienst-UUIDs für die Filterung in die Advertising-PDU und den vollständigen Namen in die Scan-Response zu platzieren.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch