Service UUID: mi ez, formátum és hol alkalmazzák

Szerző: IT Sectr Megjelenés: 2026-07-14 Olvasási idő: 8 perc

Service UUID — egy egyedi 16 vagy 128 bites Bluetooth Low Energy (BLE) azonosító, amely egyértelműen meghatározza a funkcionális szolgáltatást egy eszközön. A Bluetooth SIG szabványos 16 bites UUID-eket jelölt ki gyakori szolgáltatásokhoz, mint a Battery Service (0x180F), Device Information (0x180A) és Heart Rate (0x180D), ami leegyszerűsíti a platformok közötti kompatibilitást. A Bluetooth Core Specification 5.4 (2023) szerint a külső fejlesztők egyedi szolgáltatásainak 128 bites UUID-eket kell használniuk, amelyek formátuma globális egyediséget garantál központi nyilvántartás nélkül. A Service UUID helyes deklarálása az első lépés a GATT szerver megfelelő működéséhez a periféria eszközön.

Főbb pontok

  • Service UUID — a BLE szolgáltatás azonosítója, amely lehet 16 bites (szabványos) vagy 128 bites (egyedi).
  • A Bluetooth SIG több mint 60 szabványos UUID-t jelölt ki gyakori szolgáltatásokhoz — Battery, Heart Rate, Device Information és mások.
  • A 128 bites UUID-eket a fejlesztő generálja, és garantálják a szolgáltatás globális egyediségét központi szervnél történő regisztráció nélkül.
  • Szkenneléskor a Central a Peripheral szolgáltatásait azok Service UUID-je alapján érzékeli, ami meghatározza az eszközök kompatibilitását.
  • Egy GATT szerver több szolgáltatást is deklarálhat különböző UUID-ekkel — minden szolgáltatás saját jellemzőket tartalmaz.

Mi az a Service UUID a BLE-ben?

Service UUID — egy azonosító, amelyet egy Bluetooth Low Energy GATT szolgáltatáshoz rendelnek annak egyedi felismeréséhez más eszközök által. A BLE architektúrában minden szolgáltatás egy logikai csoportot alkot a jellemzőkből, amelyeket egy közös funkció egyesít. Például a Battery Service szolgáltatás tartalmazza a Battery Level jellemzőt, amely az aktuális akkumulátortöltöttségi szintet továbbítja.

A Bluetooth SIG (Special Interest Group) kezeli a szabványos 16 bites UUID-ek nyilvántartását, amelyeket a leggyakoribb szolgáltatásokhoz rendelnek. Ez lehetővé teszi a különböző gyártók eszközei számára, hogy előzetes konfiguráció nélkül felismerjék egymás szolgáltatásait. Bármely márka fitnesz követője deklarálhatja a Heart Rate Service-t 0x180D UUID-vel, és bármely okostelefon megérti, hogy ez egy pulzusmérő szolgáltatás.

A Bluetooth Core Specification 5.4 (2023) szerint a 16 bites UUID-k tartománya (0x0000–0xFFFF) két részre oszlik: 0x0001-től 0xFFFE-ig — a Bluetooth SIG szabványos szolgáltatásai, a 0xFFFF pedig fenntartott. Ha egy fejlesztőnek olyan egyedi szolgáltatásra van szüksége, amely nem szerepel a SIG nyilvántartásában, 128 bites UUID-t használ.

A különbség a szabványos és az egyedi UUID között nem csak a hosszban van: a 16 bites UUID-ek sugárzási időt takarítanak meg, mivel 2 bájtként kerülnek továbbításra 16 bájt helyett. Azoknál az eszközöknél, amelyeknél szigorú korlátozások vannak a reklámcsomag méretére (31 bájtig), ez kritikus jelentőségű.

Szabványos és egyedi UUID-ek

Szabványos 16 bites UUID-ek lefedik a BLE eszközök fő kategóriáit: orvosi érzékelők, fitnesz követők, viselhető elektronika és tartozékok. Ha egy eszköz szabványos funkciót valósít meg — a fejlesztőnek ajánlott a megfelelő UUID használata a Bluetooth SIG nyilvántartásából a maximális kompatibilitás érdekében.

Íme néhány példa a szabványos szolgáltatás UUID-ekre:

UUID (hex)Szolgáltatás neveCél
0x1800Generic AccessHozzáférés-kezelés, eszköznév, külső megjelenés
0x180ADevice InformationGyártó, modell, sorozatszám, szoftververzió
0x180DHeart RatePulzusmérés, érzékelő helye, akkumulátor energia
0x180FBattery ServiceAkkumulátor töltöttségi szintje százalékban
0x181AEnvironmental SensingHőmérséklet, páratartalom, nyomás, megvilágítás
0x181CUser DataÉletkor, súly, magasság, nem, nyugalmi pulzus

Egyedi 128 bites UUID-ek akkor szükségesek, amikor az eszköz egyedi funkcionalitást nyújt. Például egy intelligens zár gyártója létrehozza saját Lock Control szolgáltatását XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX alakú UUID-vel. Egy ilyen UUID garantálja, hogy nem ütközik más szolgáltatásokkal, mivel a 128 bites értékek tere gyakorlatilag kimeríthetetlen.

A 128 bites UUID formátuma

128 bites UUID a szabványos UUID RFC 4122 formátumban íródik: nyolc hexadecimális karakter, kötőjel, négy, kötőjel, négy, kötőjel, négy, kötőjel, tizenkét karakter. A BLE esetében azt a verziót használják, ahol a Bluetooth SIG UUID alaprészének fix bitjei vannak.

A Bluetooth SIG meghatározza az alap UUID-t: 0000XXXX-0000-1000-8000-00805F9B34FB. Szabványos 16 bites szolgáltatások esetén ebbe a maszkba kerül behelyettesítésre az UUID érték: például 0x180F 0000180F-0000-1000-8000-00805F9B34FB lesz. Az egyedi szolgáltatások teljesen független, a fejlesztő által generált UUID-t használnak.

Egyedi UUID létrehozásakor bármely UUID generátort (UUID v4) használhat. Egy véletlenszerű UUID v4 122 bit entrópiát biztosít, ami az ütközéseket gyakorlatilag lehetetlenné teszi. Ne használja a Bluetooth SIG alap UUID módosított verzióját egyedi szolgáltatásokhoz — ez megsérti a specifikációt.

Hogyan deklaráljunk szolgáltatást UUID-vel kódban

A szolgáltatás deklarálása UUID-vel a Peripheral oldalán történik a GATT szerver létrehozásakor. iOS-ben ehhez Core Bluetooth-t használnak, Androidban — android.bluetooth.le-t. Vizsgáljuk meg mindkét megközelítést.

iOS: Core Bluetooth

Swift-ben a szolgáltatás a CBMutableService segítségével jön létre az UUID megadásával, majd a jellemzők a CBMutableCharacteristic segítségével kerülnek hozzáadásra.

swift
import CoreBluetooth

// Szabványos 16 bites UUID
let batteryServiceUUID = CBUUID("180F")

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

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

// Jellemzők hozzáadása
service.characteristics = [characteristic]

// Szolgáltatás közzététele peripheralManager segítségével
peripheralManager.add(service)

Android: Bluetooth GATT Server

Android-ban a szolgáltatás a BluetoothGattServer és BluetoothGattService segítségével kerül regisztrálásra. Az UUID stringként kerül átadásra a java.util.UUID.fromString-ben.

java
import android.bluetooth.*;

// Egyedi szolgáltatás 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
);

// Jellemzők hozzáadása
service.addCharacteristic(characteristic);

// Regisztráció a GATT szerveren
gattServer.addService(service);

Szolgáltatások szkennelése UUID alapján

Szolgáltatás UUID alapján történő szkennelés lehetővé teszi a Central számára, hogy megtalálja a kívánt szolgáltatást nyújtó eszközöket anélkül, hogy az összes észlelt Peripheral-hez csatlakozna. A BLE reklámcsomag tartalmazhatja a szolgáltatás UUID-ek listáját, ami lehetővé teszi a Central számára az eszközök szűrését a szkennelési szakaszban.

iOS-ben a CBCentralManager a szolgáltatás UUID-je alapján szűrve szkenneli az eszközöket. Ez csökkenti az energiafogyasztást és felgyorsítja a kívánt eszközök észlelését.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

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

// A delegate csak Heart Rate Service eszközöket fogad
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // a peripheral csak UUID 0x180D eszközökkel rendelkezik
}

Android-ban az UUID szerinti szűrés szintén támogatott a ScanFilter.Builder segítségével. Ez egy hatékony módja a keresési kör szűkítésének anélkül, hogy minden eszközhöz csatlakozni kellene.

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

Több szolgáltatás egy eszközön

Egy BLE eszköz egyszerre több szolgáltatást is deklarálhat. Például egy fitnesz karkötő tartalmazhat Battery Service-t (0x180F), Heart Rate Service-t (0x180D) és egy egyedi szolgáltatást a felhővel való adatszinkronizáláshoz. Minden szolgáltatásnak saját UUID-je és saját jellemzőkészlete van.

Több szolgáltatás esetén fontos figyelembe venni a reklámcsomag korlátozását. A BLE reklámcsomag legfeljebb 31 bájt adatot tartalmazhat. Ha a szolgáltatás UUID-ek túl sok helyet foglalnak, előfordulhat, hogy néhány nem fér bele a reklámcsomagba. Ebben az esetben scan response használatos — a második csomag, amelyet a Central kérésére küldenek.

A Bluetooth Core Specification 5.4 (2023) szerint az elsődleges szolgáltatások maximális száma egy GATT szerveren nincs korlátozva a specifikáció által, de a gyakorlatban az eszköz memóriája és a teljesítménykövetelmények korlátozzák. Beágyazott eszközök esetén 256 KB flash memóriával legfeljebb 5–10 szolgáltatás ajánlott.

Gyakran ismételt kérdések

Miben különbözik a 16 bites UUID a 128 bites UUID-től?

A 16 bites UUID-ek a Bluetooth SIG által a szabványos szolgáltatások számára vannak fenntartva, és 2 bájtot foglalnak a reklámcsomagban. A 128 bites UUID-ek egyedi szolgáltatásokhoz használatosak és 16 bájtot foglalnak. A választás a szolgáltatás típusától függ: a szabványos funkcionalitás 16 bites UUID-t, az egyedi 128 bites UUID-t használ.

Hogyan generáljunk egyedi 128 bites UUID-t BLE szolgáltatáshoz?

Használja a UUID v4-et — egy véletlenszerű UUID-t, amelyet online eszközök, a uuidgen terminálparancs vagy a programozási nyelv API-ja generál. Példa: UUID.fromString(UUID.randomUUID().toString()) Java-ban vagy UUID() Swift-ben.

Regisztrálni kell az egyedi UUID-t a Bluetooth SIG-nél?

Nem, regisztráció nem szükséges. A Bluetooth SIG csak 16 bites UUID-eket regisztrál. Az egyedi 128 bites UUID-eket a fejlesztő önállóan generálja, és az óriási címtér (2^128 kombináció) garantálja az egyediséget.

Tartalmazhat egy szolgáltatás több jellemzőt?

Igen, egy szabványos GATT szolgáltatás korlátlan számú jellemzőt tartalmazhat. Például a Battery Service tartalmazhat Battery Level (0x2A19) és Battery Power State (0x2A1A) jellemzőket. Minden jellemző saját UUID-vel és tulajdonságkészlettel rendelkezik.

Mi történik, ha két eszköz ugyanazt az egyedi UUID-t használja?

Ha az UUID-k megegyeznek, a Central nem tudja megkülönböztetni az egyik szolgáltatást a másiktól további információk nélkül. A véletlenszerű UUID v4 ütközésének valószínűsége elhanyagolhatóan kicsi — körülbelül 5,3 × 10^−37. Használjon véletlenszerű UUID generátort, ne másolja az UUID-t példákból.

Összefoglalás

  • Service UUID — a BLE szolgáltatás globális azonosítója, amely lehet 16 bites (szabványos) vagy 128 bites (egyedi).
  • A Bluetooth SIG több mint 60 szabványos UUID-t jelölt ki — használja őket a más gyártók eszközeivel való kompatibilitás érdekében.
  • A 128 bites UUID-eket a fejlesztő hozza létre UUID v4 segítségével, és központi nyilvántartás nélkül garantálják az egyediséget.
  • Szkenneléskor a Central Service UUID alapján szűri az eszközöket, ami csökkenti az energiafogyasztást és felgyorsítja a keresést.
  • Egy eszköz több szolgáltatást deklarálhat különböző UUID-ekkel — a számot a memória és a reklámcsomag korlátozza.
  • iOS-ben és Androidban a szolgáltatások a CBMutableService és BluetoothGattService segítségével deklarálhatók az UUID megadásával.
  • Az UUID helyes megválasztása befolyásolja a kompatibilitást, a reklámcsomag méretét és a GATT profil helyes működését.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is