Service UUID: wat is het, formaat en waar wordt het toegepast

Auteur: IT Sectr Gepubliceerd: 2026-07-14 Leestijd: 8 min

Service UUID — is een unieke 16- of 128-bits identificatie van Bluetooth Low Energy (BLE) die ondubbelzinnig een functionele service op een apparaat definieert. Bluetooth SIG heeft standaard 16-bits UUID's toegewezen voor veelvoorkomende services zoals Battery Service (0x180F), Device Information (0x180A) en Heart Rate (0x180D), wat cross-platform compatibiliteit vereenvoudigt. Volgens Bluetooth Core Specification 5.4 (2023) moeten aangepaste services van externe ontwikkelaars 128-bits UUID's gebruiken, waarvan het formaat wereldwijde uniciteit garandeert zonder centraal register. De juiste declaratie van Service UUID is de eerste stap naar correcte werking van de GATT-server op het perifere apparaat.

Belangrijkste punten

  • Service UUID — identificatie van de BLE-service, die 16-bits (standaard) of 128-bits (aangepast) kan zijn.
  • Bluetooth SIG heeft meer dan 60 standaard UUID's toegewezen voor veelvoorkomende services — Battery, Heart Rate, Device Information en andere.
  • 128-bits UUID's worden gegenereerd door de ontwikkelaar en garanderen wereldwijde uniciteit van de service zonder registratie bij een centrale instantie.
  • Tijdens het scannen detecteert Central de services van Peripheral aan de hand van hun Service UUID, wat de compatibiliteit van apparaten bepaalt.
  • Eén GATT-server kan meerdere services met verschillende UUID's declareren — elke service bevat eigen kenmerken.

Wat is Service UUID in BLE?

Service UUID — is een identificatie die wordt toegewezen aan een GATT-service van Bluetooth Low Energy voor unieke herkenning door andere apparaten. In de BLE-architectuur vormt elke service een logische groep kenmerken die verenigd zijn door een gemeenschappelijke functie. Bijvoorbeeld, de service Battery Service bevat het kenmerk Battery Level, dat het huidige batterijniveau doorgeeft.

Bluetooth SIG (Special Interest Group) beheert het register van standaard 16-bits UUID's die worden toegewezen aan de meest voorkomende services. Dit stelt apparaten van verschillende fabrikanten in staat om elkaars services te herkennen zonder voorafgaande configuratie. Een fitness-tracker van elk merk kan Heart Rate Service met UUID 0x180D declareren, en elke smartphone begrijpt dat dit een hartslagsensor is.

Volgens Bluetooth Core Specification 5.4 (2023) is het bereik van 16-bits UUID's (0x0000–0xFFFF) verdeeld in twee delen: van 0x0001 tot 0xFFFE — standaard Bluetooth SIG-services, en 0xFFFF is gereserveerd. Als een ontwikkelaar een unieke service nodig heeft die niet in het SIG-register bestaat, gebruikt hij een 128-bits UUID.

Het verschil tussen standaard en aangepaste UUID zit niet alleen in lengte: 16-bits UUID's besparen zendtijd van het advertising-pakket, omdat ze worden verzonden als 2 bytes in plaats van 16 bytes. Voor apparaten met strikte beperkingen op de grootte van het advertising-pakket (tot 31 bytes) is dit cruciaal.

Standaard en aangepaste UUID's

Standaard 16-bits UUID's dekken de belangrijkste categorieën BLE-apparaten: medische sensoren, fitness-trackers, draagbare elektronica en accessoires. Als een apparaat een standaardfunctie implementeert — wordt de ontwikkelaar aanbevolen om de bijbehorende UUID uit het Bluetooth SIG-register te gebruiken voor maximale compatibiliteit.

Hier zijn enkele voorbeelden van standaard service-UUID's:

UUID (hex)ServicenaamDoel
0x1800Generic AccessToegangsbeheer, apparaatnaam, uiterlijk
0x180ADevice InformationFabrikant, model, serienummer, softwareversie
0x180DHeart RateHartslagmeting, sensorlocatie, batterijvermogen
0x180FBattery ServiceBatterijniveau in procenten
0x181AEnvironmental SensingTemperatuur, luchtvochtigheid, druk, verlichting
0x181CUser DataLeeftijd, gewicht, lengte, geslacht, rustpols

Aangepaste 128-bits UUID's zijn nodig wanneer het apparaat unieke functionaliteit biedt. Bijvoorbeeld, een fabrikant van een slim slot creëert zijn eigen service Lock Control met UUID van de vorm XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Zo'n UUID garandeert dat het niet conflicteert met andere services, omdat de ruimte van 128-bits waarden praktisch onuitputtelijk is.

Formaat van 128-bits UUID

128-bits UUID wordt geschreven in het standaard UUID-formaat RFC 4122: acht hexadecimale tekens, koppelteken, vier, koppelteken, vier, koppelteken, vier, koppelteken, twaalf tekens. Voor BLE wordt de versie gebruikt waarbij het basisdeel van de Bluetooth SIG UUID vaste bits heeft.

Bluetooth SIG definieert de basis-UUID: 0000XXXX-0000-1000-8000-00805F9B34FB. Voor standaard 16-bits services wordt in dit masker de UUID-waarde ingevuld: bijvoorbeeld 0x180F wordt 0000180F-0000-1000-8000-00805F9B34FB. Aangepaste services gebruiken een volledig onafhankelijke UUID, gegenereerd door de ontwikkelaar.

Bij het maken van een aangepaste UUID kun je elke UUID-generator (UUID v4) gebruiken. Een willekeurige UUID v4 biedt 122 bits entropie, waardoor botsingen praktisch onmogelijk zijn. Gebruik geen aangepaste versie van de basis Bluetooth SIG UUID voor aangepaste services — dit schendt de specificatie.

Hoe een service met UUID in code declareren

Declaratie van de service met UUID wordt uitgevoerd aan de kant van Peripheral bij het maken van de GATT-server. In iOS wordt hiervoor Core Bluetooth gebruikt, in Android — android.bluetooth.le. Laten we beide benaderingen bekijken.

iOS: Core Bluetooth

In Swift wordt de service gemaakt via CBMutableService met vermelding van UUID, waarna er kenmerken aan worden toegevoegd via CBMutableCharacteristic.

swift
import CoreBluetooth

// Standaard 16-bits UUID
let batteryServiceUUID = CBUUID("180F")

// Aangepaste 128-bits UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")

let service = CBMutableService(
    type: customServiceUUID,
    primary: true
)

// Kenmerken toevoegen
service.characteristics = [characteristic]

// Service publiceren via peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

Op Android wordt de service geregistreerd via BluetoothGattServer en BluetoothGattService. UUID wordt doorgegeven als string in java.util.UUID.fromString.

java
import android.bluetooth.*;

// Aangepaste service-UUID
private static final UUID CUSTOM_SERVICE_UUID =
    UUID.fromString("E20A39F4-73F5-4BC4-A12F-17D1AD07A961");

BluetoothGattService service = new BluetoothGattService(
    CUSTOM_SERVICE_UUID,
    BluetoothGattService.SERVICE_TYPE_PRIMARY
);

// Kenmerken toevoegen
service.addCharacteristic(characteristic);

// Registreren op GATT-server
gattServer.addService(service);

Scannen van services op UUID

Scannen op Service UUID stelt Central in staat om apparaten te vinden die de benodigde service bieden zonder verbinding te maken met alle gedetecteerde Peripheral-apparaten. Het BLE advertising-pakket kan een lijst met service-UUID's bevatten, waardoor Central apparaten kan filteren in de scanfase.

In iOS scant CBCentralManager apparaten met een filter op service-UUID. Dit vermindert het energieverbruik en versnelt de detectie van benodigde apparaten.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

func scanForHeartRateMonitor() {
    let services: [CBUUID] = [
        CBUUID("180D") // Heart Rate Service
    ]
    centralManager.scanForPeripherals(
        withServices: services,
        options: nil
    )
}

// Delegate ontvangt alleen Heart Rate Service-apparaten
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral heeft alleen apparaten met UUID 0x180D
}

Op Android wordt filteren op UUID ook ondersteund via ScanFilter.Builder. Dit is een effectieve manier om de zoekopdracht te verfijnen zonder verbinding te maken met elk apparaat.

java
import android.bluetooth.le.*;

ScanFilter filter = new ScanFilter.Builder()
    .setServiceUuid(
        new ParcelUuid(
            UUID.fromString("0000180D-0000-1000-8000-00805F9B34FB")
        )
    )
    .build();

BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner();
scanner.startScan(
    Collections.singletonList(filter),
    scanSettings,
    scanCallback
);

Meerdere services op één apparaat

Eén BLE-apparaat kan meerdere services tegelijk declareren. Bijvoorbeeld, een fitnessarmband kan Battery Service (0x180F), Heart Rate Service (0x180D) en een aangepaste service voor synchronisatie met de cloud bevatten. Elke service heeft zijn eigen UUID en eigen set kenmerken.

Bij meerdere services is het belangrijk om rekening te houden met de beperking van het advertising-pakket. Het BLE advertising-pakket kan maximaal 31 bytes aan gegevens bevatten. Als de service-UUID's te veel ruimte innemen, passen sommige mogelijk niet in het advertising-pakket. In dit geval wordt scan response gebruikt — het tweede pakket dat op verzoek van Central wordt verzonden.

Volgens Bluetooth Core Specification 5.4 (2023) wordt het maximale aantal primaire services op één GATT-server niet beperkt door de specificatie, maar in de praktijk wordt het beperkt door het geheugen van het apparaat en prestatie-eisen. Voor embedded apparaten met 256 KB flash-geheugen wordt niet meer dan 5–10 services aanbevolen.

Veelgestelde vragen

Wat is het verschil tussen een 16-bits UUID en een 128-bits UUID?

16-bits UUID's zijn gereserveerd door Bluetooth SIG voor standaard services en nemen 2 bytes in beslag in het advertising-pakket. 128-bits UUID's worden gebruikt voor aangepaste services en nemen 16 bytes in beslag. De keuze hangt af van het type service: standaardfunctionaliteit gebruikt een 16-bits UUID, unieke functionaliteit een 128-bits UUID.

Hoe genereer ik een aangepaste 128-bits UUID voor een BLE-service?

Gebruik UUID v4 — een willekeurige UUID die wordt gegenereerd door online tools, het terminalcommando uuidgen of de API van uw programmeertaal. Voorbeeld: UUID.fromString(UUID.randomUUID().toString()) in Java of UUID() in Swift.

Moet ik een aangepaste UUID registreren bij Bluetooth SIG?

Nee, registratie is niet vereist. Bluetooth SIG registreert alleen 16-bits UUID's. Aangepaste 128-bits UUID's worden onafhankelijk gegenereerd door de ontwikkelaar en garanderen uniciteit dankzij de enorme adresruimte (2^128 combinaties).

Kan één service meerdere kenmerken bevatten?

Ja, een standaard GATT-service kan een onbeperkt aantal kenmerken bevatten. Bijvoorbeeld, Battery Service kan Battery Level (0x2A19) en Battery Power State (0x2A1A) bevatten. Elk kenmerk heeft zijn eigen UUID en set eigenschappen.

Wat gebeurt er als twee apparaten dezelfde aangepaste UUID gebruiken?

Als de UUID overeenkomt, kan Central de ene service niet van de andere onderscheiden zonder aanvullende informatie. De kans op een botsing van willekeurige UUID v4 is verwaarloosbaar klein — ongeveer 5,3 × 10^−37. Gebruik een generator voor willekeurige UUID's, kopieer geen UUID's uit voorbeelden.

Samenvatting

  • Service UUID — de wereldwijde identificatie van een BLE-service, die 16-bits (standaard) of 128-bits (aangepast) kan zijn.
  • Bluetooth SIG heeft meer dan 60 standaard UUID's toegewezen — gebruik ze voor compatibiliteit met apparaten van andere fabrikanten.
  • 128-bits UUID's worden door de ontwikkelaar gemaakt via UUID v4 en garanderen uniciteit zonder centraal register.
  • Tijdens het scannen filtert Central apparaten op Service UUID, wat het energieverbruik vermindert en het zoeken versnelt.
  • Eén apparaat kan meerdere services met verschillende UUID's declareren — het aantal is beperkt door geheugen en advertising-pakket.
  • In iOS en Android worden services gedeclareerd via respectievelijk CBMutableService en BluetoothGattService met vermelding van UUID.
  • De juiste keuze van UUID beïnvloedt compatibiliteit, grootte van het advertising-pakket en correcte werking van het GATT-profiel.

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.

Bespreek het project

Lees ook