Service UUID: co to je, formát a kde se používá

Autor: IT Sectr Publikováno: 2026-07-14 Doba čtení: 8 min

Service UUID — je jedinečný 16- nebo 128-bitový identifikátor Bluetooth Low Energy (BLE), který jednoznačně definuje funkční službu na zařízení. Bluetooth SIG přidělil standardní 16-bitová UUID pro běžné služby jako Battery Service (0x180F), Device Information (0x180A) a Heart Rate (0x180D), což zjednodušuje kompatibilitu napříč platformami. Podle Bluetooth Core Specification 5.4 (2023) musí vlastní služby vývojářů třetích stran používat 128-bitová UUID, jejichž formát zaručuje globální jedinečnost bez centrálního registru. Správné deklarování Service UUID je prvním krokem ke správnému fungování GATT serveru na periferním zařízení.

Hlavní body

  • Service UUID — identifikátor služby BLE, který může být 16-bitový (standardní) nebo 128-bitový (vlastní).
  • Bluetooth SIG přidělil více než 60 standardních UUID pro běžné služby — Battery, Heart Rate, Device Information a další.
  • 128-bitová UUID jsou generována vývojářem a zaručují globální jedinečnost služby bez registrace u centrálního orgánu.
  • Při skenování Central detekuje služby Peripheral podle jejich Service UUID, což určuje kompatibilitu zařízení.
  • Jeden GATT server může deklarovat několik služeb s různými UUID — každá služba obsahuje vlastní charakteristiky.

Co je Service UUID v BLE?

Service UUID — je identifikátor, který je přidělen službě GATT Bluetooth Low Energy pro její jedinečné rozpoznání jinými zařízeními. V architektuře BLE každá služba představuje logickou skupinu charakteristik spojených společnou funkcí. Například služba Battery Service obsahuje charakteristiku Battery Level, která přenáší aktuální úroveň nabití baterie.

Bluetooth SIG (Special Interest Group) spravuje registr standardních 16-bitových UUID, která jsou přidělována nejběžnějším službám. To umožňuje zařízením různých výrobců rozpoznávat služby navzájem bez předchozí konfigurace. Fitness tracker jakékoli značky může deklarovat Heart Rate Service s UUID 0x180D a každý smartphone pochopí, že se jedná o službu tepové frekvence.

Podle Bluetooth Core Specification 5.4 (2023) je rozsah 16-bitových UUID (0x0000–0xFFFF) rozdělen na dvě části: od 0x0001 do 0xFFFE — standardní služby Bluetooth SIG, a 0xFFFF je rezervován. Pokud vývojář potřebuje jedinečnou službu, která není v registru SIG, použije 128-bitové UUID.

Rozdíl mezi standardním a vlastním UUID není pouze v délce: 16-bitová UUID šetří vysílací čas reklamního paketu, protože jsou přenášena jako 2 bajty místo 16 bajtů. Pro zařízení s přísnými omezeními velikosti advertising paketu (do 31 bajtů) je to kritické.

Standardní a vlastní UUID

Standardní 16-bitová UUID pokrývají hlavní kategorie BLE zařízení: lékařské senzory, fitness trackery, nositelnou elektroniku a příslušenství. Pokud zařízení implementuje standardní funkci — vývojáři se doporučuje použít odpovídající UUID z registru Bluetooth SIG pro maximální kompatibilitu.

Zde je několik příkladů standardních UUID služeb:

UUID (hex)Název službyÚčel
0x1800Generic AccessSpráva přístupu, název zařízení, vnější vzhled
0x180ADevice InformationVýrobce, model, sériové číslo, verze softwaru
0x180DHeart RateMěření pulsu, umístění senzoru, energie baterie
0x180FBattery ServiceÚroveň nabití baterie v procentech
0x181AEnvironmental SensingTeplota, vlhkost, tlak, osvětlení
0x181CUser DataVěk, váha, výška, pohlaví, klidový puls

Vlastní 128-bitová UUID jsou nezbytná, když zařízení poskytuje jedinečnou funkcionalitu. Například výrobce chytrého zámku vytvoří vlastní službu Lock Control s UUID ve tvaru XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Takové UUID zaručuje, že nebude kolidovat s jinými službami, protože prostor 128-bitových hodnot je prakticky nevyčerpatelný.

Formát 128-bitového UUID

128-bitové UUID se zapisuje ve standardním formátu UUID RFC 4122: osm hexadecimálních znaků, pomlčka, čtyři, pomlčka, čtyři, pomlčka, čtyři, pomlčka, dvanáct znaků. Pro BLE se používá verze, kde základní část UUID Bluetooth SIG má pevné bity.

Bluetooth SIG definuje základní UUID: 0000XXXX-0000-1000-8000-00805F9B34FB. Pro standardní 16-bitové služby se do této masky dosadí hodnota UUID: například 0x180F se změní na 0000180F-0000-1000-8000-00805F9B34FB. Vlastní služby používají zcela nezávislé UUID generované vývojářem.

Při vytváření vlastního UUID můžete použít libovolný generátor UUID (UUID v4). Náhodné UUID v4 poskytuje 122 bitů entropie, což činí kolize prakticky nemožnými. Nepoužívejte modifikovanou verzi základního UUID Bluetooth SIG pro vlastní služby — to porušuje specifikaci.

Jak deklarovat službu s UUID v kódu

Deklarování služby s UUID se provádí na straně Peripheral při vytváření GATT serveru. V iOS se k tomu používá Core Bluetooth, v Androidu — android.bluetooth.le. Podívejme se na oba přístupy.

iOS: Core Bluetooth

Ve Swiftu se služba vytváří přes CBMutableService s uvedením UUID, poté se k ní přidávají charakteristiky přes CBMutableCharacteristic.

swift
import CoreBluetooth

// Standardní 16-bitové UUID
let batteryServiceUUID = CBUUID("180F")

// Vlastní 128-bitové UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")

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

// Přidat charakteristiky
service.characteristics = [characteristic]

// Publikovat službu přes peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

Na Androidu se služba registruje přes BluetoothGattServer a BluetoothGattService. UUID se předává jako řetězec v java.util.UUID.fromString.

java
import android.bluetooth.*;

// Vlastní UUID služby
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
);

// Přidat charakteristiky
service.addCharacteristic(characteristic);

// Registrovat na GATT serveru
gattServer.addService(service);

Skenování služeb podle UUID

Skenování podle Service UUID umožňuje Centralu najít zařízení poskytující požadovanou službu bez připojování ke všem detekovaným Peripheral. BLE reklamní paket může obsahovat seznam UUID služeb, což umožňuje Centralu filtrovat zařízení ve fázi skenování.

V iOS CBCentralManager skenuje zařízení s filtrem podle UUID služby. To snižuje spotřebu energie a urychluje detekci požadovaných zařízení.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

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

// Delegát přijímá pouze zařízení Heart Rate Service
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral má pouze zařízení s UUID 0x180D
}

Na Androidu je filtrování podle UUID také podporováno přes ScanFilter.Builder. To je efektivní způsob, jak zúžit okruh vyhledávání bez připojování ke každému zařízení.

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

Několik služeb na jednom zařízení

Jedno BLE zařízení může deklarovat několik služeb současně. Například fitness náramek může obsahovat Battery Service (0x180F), Heart Rate Service (0x180D) a vlastní službu pro synchronizaci dat s cloudem. Každá služba má vlastní UUID a vlastní sadu charakteristik.

Při několika službách je důležité zohlednit omezení reklamního paketu. BLE reklamní paket může obsahovat až 31 bajtů dat. Pokud UUID služeb zabírají příliš mnoho místa, některá z nich se nemusí vejít do reklamního paketu. V tomto případě se používá scan response — druhý paket odeslaný na žádost Centralu.

Podle Bluetooth Core Specification 5.4 (2023) není maximální počet primárních služeb na jednom GATT serveru omezen specifikací, ale v praxi je omezen pamětí zařízení a požadavky na výkon. Pro vestavěná zařízení s 256 KB flash paměti se doporučuje nejvýše 5–10 služeb.

Často kladené otázky

Čím se liší 16-bitové UUID od 128-bitového?

16-bitová UUID jsou rezervována Bluetooth SIG pro standardní služby a zabírají 2 bajty v reklamním paketu. 128-bitová UUID se používají pro vlastní služby a zabírají 16 bajtů. Volba závisí na typu služby: standardní funkcionalita používá 16-bitové UUID, jedinečná — 128-bitové UUID.

Jak vygenerovat vlastní 128-bitové UUID pro BLE službu?

Použijte UUID v4 — náhodné UUID generované online nástroji, terminálovým příkazem uuidgen nebo API vašeho programovacího jazyka. Příklad: UUID.fromString(UUID.randomUUID().toString()) v Javě nebo UUID() ve Swiftu.

Je nutné registrovat vlastní UUID v Bluetooth SIG?

Ne, registrace není vyžadována. Bluetooth SIG registruje pouze 16-bitová UUID. Vlastní 128-bitová UUID jsou generována samostatně vývojářem a zaručují jedinečnost díky obrovskému adresnímu prostoru (2^128 kombinací).

Může jedna služba obsahovat několik charakteristik?

Ano, standardní služba GATT může obsahovat neomezený počet charakteristik. Například Battery Service může obsahovat Battery Level (0x2A19) a Battery Power State (0x2A1A). Každá charakteristika má vlastní UUID a sadu vlastností.

Co se stane, když dvě zařízení použijí stejné vlastní UUID?

Pokud se UUID shodují, Central nebude schopen rozlišit jednu službu od druhé bez dodatečných informací. Pravděpodobnost kolize náhodných UUID v4 je zanedbatelně malá — přibližně 5,3 × 10^−37. Používejte generátor náhodných UUID, nekopírujte UUID z příkladů.

Shrnutí

  • Service UUID — globální identifikátor služby BLE, který může být 16-bitový (standardní) nebo 128-bitový (vlastní).
  • Bluetooth SIG přidělil více než 60 standardních UUID — používejte je pro kompatibilitu se zařízeními jiných výrobců.
  • 128-bitová UUID jsou vytvářena vývojářem pomocí UUID v4 a zaručují jedinečnost bez centrálního registru.
  • Při skenování Central filtruje zařízení podle Service UUID, což snižuje spotřebu energie a urychluje vyhledávání.
  • Jedno zařízení může deklarovat několik služeb s různými UUID — počet je omezen pamětí a reklamním paketem.
  • V iOS a Androidu jsou služby deklarovány přes CBMutableService a BluetoothGattService s uvedením UUID.
  • Správný výběr UUID ovlivňuje kompatibilitu, velikost reklamního paketu a správnost fungování profilu GATT.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také