Service UUID: vad är det, format och var det tillämpas

Författare: IT Sectr Publicerad: 2026-07-14 Lästid: 8 min

Service UUID — är en unik 16- eller 128-bitars identifierare för Bluetooth Low Energy (BLE) som entydigt definierar en funktionell tjänst på en enhet. Bluetooth SIG har tilldelat standard 16-bitars UUID för vanliga tjänster som Battery Service (0x180F), Device Information (0x180A) och Heart Rate (0x180D), vilket förenklar plattformsoberoende kompatibilitet. Enligt Bluetooth Core Specification 5.4 (2023) måste anpassade tjänster från tredjepartsutvecklare använda 128-bitars UUID, vars format garanterar global unikhet utan centralt register. Korrekt deklaration av Service UUID är det första steget mot korrekt funktion av GATT-servern på den perifera enheten.

Huvudpunkter

  • Service UUID — identifierare för BLE-tjänsten, som kan vara 16-bitars (standard) eller 128-bitars (anpassad).
  • Bluetooth SIG har tilldelat mer än 60 standard UUID för vanliga tjänster — Battery, Heart Rate, Device Information och andra.
  • 128-bitars UUID genereras av utvecklaren och garanterar global unikhet för tjänsten utan registrering hos en central myndighet.
  • Vid skanning upptäcker Central Peripheral-tjänster baserat på deras Service UUID, vilket bestämmer enheternas kompatibilitet.
  • En GATT-server kan deklarera flera tjänster med olika UUID — varje tjänst innehåller egna egenskaper.

Vad är Service UUID i BLE?

Service UUID — är en identifierare som tilldelas en GATT-tjänst för Bluetooth Low Energy för unik igenkänning av andra enheter. I BLE-arkitekturen representerar varje tjänst en logisk grupp av egenskaper förenade av en gemensam funktion. Till exempel innehåller tjänsten Battery Service egenskapen Battery Level, som överför den aktuella batteriladdningsnivån.

Bluetooth SIG (Special Interest Group) hanterar registret över standard 16-bitars UUID som tilldelas de vanligaste tjänsterna. Detta gör att enheter från olika tillverkare kan känna igen varandras tjänster utan föregående konfiguration. En fitness-tracker av vilket märke som helst kan deklarera Heart Rate Service med UUID 0x180D, och vilken smartphone som helst förstår att det är en pulstjänst.

Enligt Bluetooth Core Specification 5.4 (2023) är intervallet för 16-bitars UUID (0x0000–0xFFFF) uppdelat i två delar: från 0x0001 till 0xFFFE — standard Bluetooth SIG-tjänster, och 0xFFFF är reserverat. Om en utvecklare behöver en unik tjänst som inte finns i SIG-registret, använder han ett 128-bitars UUID.

Skillnaden mellan standard och anpassat UUID är inte bara i längd: 16-bitars UUID sparar sändningstid för reklampaketet eftersom de överförs som 2 byte istället för 16 byte. För enheter med strikta begränsningar av storleken på advertising-paketet (upp till 31 byte) är detta kritiskt.

Standard och anpassade UUID

Standard 16-bitars UUID täcker huvudkategorierna av BLE-enheter: medicinska sensorer, fitness-trackers, bärbar elektronik och tillbehör. Om en enhet implementerar en standardfunktion — rekommenderas utvecklaren att använda motsvarande UUID från Bluetooth SIG-registret för maximal kompatibilitet.

Här är några exempel på standard UUID för tjänster:

UUID (hex)Tjänstens namnSyfte
0x1800Generic AccessÅtkomsthantering, enhetsnamn, yttre utseende
0x180ADevice InformationTillverkare, modell, serienummer, programvaruversion
0x180DHeart RatePulsmätning, sensorplacering, batterienergi
0x180FBattery ServiceBatteriladdningsnivå i procent
0x181AEnvironmental SensingTemperatur, luftfuktighet, tryck, belysning
0x181CUser DataÅlder, vikt, längd, kön, vilopuls

Anpassade 128-bitars UUID är nödvändiga när enheten tillhandahåller unik funktionalitet. Till exempel skapar en tillverkare av ett smart lås sin egen tjänst Lock Control med UUID av formen XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Ett sådant UUID garanterar att det inte kommer i konflikt med andra tjänster, eftersom utrymmet för 128-bitars värden är praktiskt taget outtömligt.

Format för 128-bitars UUID

128-bitars UUID skrivs i standardformatet UUID RFC 4122: åtta hexadecimala tecken, bindestreck, fyra, bindestreck, fyra, bindestreck, fyra, bindestreck, tolv tecken. För BLE används versionen där basdelen av Bluetooth SIG UUID har fasta bitar.

Bluetooth SIG definierar bas-UUID: 0000XXXX-0000-1000-8000-00805F9B34FB. För standard 16-bitars tjänster sätts UUID-värdet in i denna mask: till exempel blir 0x180F 0000180F-0000-1000-8000-00805F9B34FB. Anpassade tjänster använder ett helt oberoende UUID som genererats av utvecklaren.

När du skapar ett anpassat UUID kan du använda vilken UUID-generator som helst (UUID v4). Ett slumpmässigt UUID v4 ger 122 bitar entropi, vilket gör kollisioner praktiskt taget omöjliga. Använd inte en modifierad version av Bluetooth SIG bas-UUID för anpassade tjänster — detta bryter mot specifikationen.

Hur man deklarerar en tjänst med UUID i kod

Deklaration av tjänsten med UUID utförs på Peripheral-sidan när GATT-servern skapas. I iOS används Core Bluetooth för detta, i Android — android.bluetooth.le. Låt oss titta på båda metoderna.

iOS: Core Bluetooth

I Swift skapas tjänsten via CBMutableService med angivande av UUID, varefter egenskaper läggs till via CBMutableCharacteristic.

swift
import CoreBluetooth

// Standard 16-bitars UUID
let batteryServiceUUID = CBUUID("180F")

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

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

// Lägg till egenskaper
service.characteristics = [characteristic]

// Publicera tjänst via peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

Android registreras tjänsten via BluetoothGattServer och BluetoothGattService. UUID skickas som en sträng i java.util.UUID.fromString.

java
import android.bluetooth.*;

// Anpassat tjänst-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
);

// Lägg till egenskaper
service.addCharacteristic(characteristic);

// Registrera på GATT-server
gattServer.addService(service);

Skanning av tjänster efter UUID

Skanning efter Service UUID gör det möjligt för Central att hitta enheter som erbjuder den önskade tjänsten utan att ansluta till alla upptäckta Peripheral. BLE-reklampaketet kan innehålla en lista över UUID för tjänster, vilket gör att Central kan filtrera enheter i skanningsfasen.

I iOS skannar CBCentralManager enheter med filter baserat på tjänstens UUID. Detta minskar strömförbrukningen och påskyndar upptäckten av önskade enheter.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

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

// Delegat tar endast emot Heart Rate Service-enheter
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral har endast enheter med UUID 0x180D
}

Android stöds filtrering efter UUID också via ScanFilter.Builder. Detta är ett effektivt sätt att begränsa sökningen utan att ansluta till varje enhet.

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
);

Flera tjänster på en enhet

En BLE-enhet kan deklarera flera tjänster samtidigt. Till exempel kan ett fitnessarmband innehålla Battery Service (0x180F), Heart Rate Service (0x180D) och en anpassad tjänst för datasynkronisering med molnet. Varje tjänst har sitt eget UUID och sin egen uppsättning egenskaper.

Vid flera tjänster är det viktigt att ta hänsyn till begränsningen av reklampaketet. BLE-reklampaketet kan innehålla upp till 31 byte data. Om UUID för tjänsterna tar för mycket plats kan några av dem inte få plats i reklampaketet. I sådana fall används scan response — det andra paketet som skickas på begäran av Central.

Enligt Bluetooth Core Specification 5.4 (2023) är det maximala antalet primära tjänster på en GATT-server inte begränsat av specifikationen, men i praktiken begränsas det av enhetens minne och prestandakrav. För inbyggda enheter med 256 KB flash-minne rekommenderas högst 5–10 tjänster.

Vanliga frågor

Vad är skillnaden mellan 16-bitars UUID och 128-bitars UUID?

16-bitars UUID är reserverade av Bluetooth SIG för standardtjänster och tar 2 byte i reklampaketet. 128-bitars UUID används för anpassade tjänster och tar 16 byte. Valet beror på tjänstetypen: standardfunktionalitet använder 16-bitars UUID, unik — 128-bitars UUID.

Hur genererar man ett anpassat 128-bitars UUID för BLE-tjänst?

Använd UUID v4 — ett slumpmässigt UUID som genereras av onlineverktyg, terminalkommandot uuidgen eller API för ditt programmeringsspråk. Exempel: UUID.fromString(UUID.randomUUID().toString()) i Java eller UUID() i Swift.

Behöver jag registrera anpassat UUID hos Bluetooth SIG?

Nej, registrering krävs inte. Bluetooth SIG registrerar endast 16-bitars UUID. Anpassade 128-bitars UUID genereras oberoende av utvecklaren och garanterar unikhet tack vare det enorma adressutrymmet (2^128 kombinationer).

Kan en tjänst innehålla flera egenskaper?

Ja, en standard GATT-tjänst kan innehålla obegränsat antal egenskaper. Till exempel kan Battery Service innehålla Battery Level (0x2A19) och Battery Power State (0x2A1A). Varje egenskap har sitt eget UUID och uppsättning egenskaper.

Vad händer om två enheter använder samma anpassade UUID?

Om UUID matchar kan Central inte skilja en tjänst från en annan utan ytterligare information. Sannolikheten för kollision av slumpmässiga UUID v4 är försumbar — cirka 5,3 × 10^−37. Använd en slumpmässig UUID-generator, kopiera inte UUID från exempel.

Sammanfattning

  • Service UUID — den globala identifieraren för en BLE-tjänst, som kan vara 16-bitars (standard) eller 128-bitars (anpassad).
  • Bluetooth SIG har tilldelat mer än 60 standard UUID — använd dem för kompatibilitet med enheter från andra tillverkare.
  • 128-bitars UUID skapas av utvecklaren via UUID v4 och garanterar unikhet utan centralt register.
  • Vid skanning filtrerar Central enheter baserat på Service UUID, vilket minskar strömförbrukningen och påskyndar sökningen.
  • En enhet kan deklarera flera tjänster med olika UUID — antalet begränsas av minne och reklampaket.
  • I iOS och Android deklareras tjänster via CBMutableService respektive BluetoothGattService med angivande av UUID.
  • Rätt val av UUID påverkar kompatibiliteten, storleken på reklampaketet och korrekt funktion av GATT-profilen.

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.

Diskutera projektet

Läs också