Service UUID: ce este, formatul și unde se aplică

Autor: IT Sectr Publicat: 2026-07-14 Timp de citire: 8 min

Service UUID — este un identificator unic de 16 sau 128 de biți Bluetooth Low Energy (BLE) care definește fără ambiguitate un serviciu funcțional pe un dispozitiv. Bluetooth SIG a alocat UUID-uri standard de 16 biți pentru servicii comune precum Battery Service (0x180F), Device Information (0x180A) și Heart Rate (0x180D), ceea ce simplifică compatibilitatea cross-platform. Conform Bluetooth Core Specification 5.4 (2023), serviciile personalizate ale dezvoltatorilor terți trebuie să utilizeze UUID-uri de 128 de biți, al căror format garantează unicitatea globală fără un registru central. Declararea corectă a Service UUID este primul pas către funcționarea corectă a serverului GATT pe dispozitivul periferic.

Principalele puncte

  • Service UUID — identificatorul serviciului BLE, care poate fi de 16 biți (standard) sau 128 de biți (personalizat).
  • Bluetooth SIG a alocat peste 60 de UUID-uri standard pentru servicii comune — Battery, Heart Rate, Device Information și altele.
  • UUID-urile de 128 de biți sunt generate de dezvoltator și garantează unicitatea globală a serviciului fără înregistrare la un organism central.
  • La scanare, Central detectează serviciile Peripheral după Service UUID-ul lor, ceea ce determină compatibilitatea dispozitivelor.
  • Un singur server GATT poate declara mai multe servicii cu UUID-uri diferite — fiecare serviciu conține propriile caracteristici.

Ce este Service UUID în BLE?

Service UUID — este un identificator atribuit unui serviciu GATT Bluetooth Low Energy pentru recunoașterea sa unică de către alte dispozitive. În arhitectura BLE, fiecare serviciu reprezintă un grup logic de caracteristici unite printr-o funcție comună. De exemplu, serviciul Battery Service conține caracteristica Battery Level, care transmite nivelul curent de încărcare a bateriei.

Bluetooth SIG (Special Interest Group) administrează registrul UUID-urilor standard de 16 biți care sunt atribuite celor mai comune servicii. Acest lucru permite dispozitivelor de la diferiți producători să recunoască serviciile reciproc fără configurare prealabilă. Un tracker de fitness de orice marcă poate declara Heart Rate Service cu UUID 0x180D, iar orice smartphone va înțelege că este un serviciu de puls.

Conform Bluetooth Core Specification 5.4 (2023), domeniul UUID-urilor de 16 biți (0x0000–0xFFFF) este împărțit în două părți: de la 0x0001 la 0xFFFE — serviciile standard Bluetooth SIG, iar 0xFFFF este rezervat. Dacă un dezvoltator are nevoie de un serviciu unic care nu există în registrul SIG, acesta folosește un UUID de 128 de biți.

Diferența dintre UUID-ul standard și cel personalizat nu este doar în lungime: UUID-urile de 16 biți economisesc timpul de emisie al pachetului de advertising, deoarece sunt transmise ca 2 octeți în loc de 16 octeți. Pentru dispozitivele cu limitări stricte ale dimensiunii pachetului de advertising (până la 31 de octeți), acest lucru este critic.

UUID-uri standard și personalizate

UUID-urile standard de 16 biți acoperă principalele categorii de dispozitive BLE: senzori medicali, trackere de fitness, electronice purtabile și accesorii. Dacă un dispozitiv implementează o funcție standard — dezvoltatorului i se recomandă să folosească UUID-ul corespunzător din registrul Bluetooth SIG pentru o compatibilitate maximă.

Iată câteva exemple de UUID-uri standard de servicii:

UUID (hex)Numele serviciuluiScop
0x1800Generic AccessGestionarea accesului, numele dispozitivului, aspectul exterior
0x180ADevice InformationProducător, model, număr de serie, versiune software
0x180DHeart RateMăsurarea pulsului, localizarea senzorului, energia bateriei
0x180FBattery ServiceNivelul de încărcare a bateriei în procente
0x181AEnvironmental SensingTemperatură, umiditate, presiune, iluminare
0x181CUser DataVârstă, greutate, înălțime, sex, puls în repaus

UUID-urile personalizate de 128 de biți sunt necesare atunci când dispozitivul oferă funcționalitate unică. De exemplu, producătorul unui lacăt inteligent creează propriul serviciu Lock Control cu UUID de forma XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Un astfel de UUID garantează că nu va intra în conflict cu alte servicii, deoarece spațiul valorilor de 128 de biți este practic inepuizabil.

Formatul UUID-ului de 128 de biți

UUID-ul de 128 de biți este scris în formatul standard UUID RFC 4122: opt caractere hexazecimale, cratimă, patru, cratimă, patru, cratimă, patru, cratimă, douăsprezece caractere. Pentru BLE se folosește versiunea în care partea de bază a UUID-ului Bluetooth SIG are biți fixați.

Bluetooth SIG definește UUID-ul de bază: 0000XXXX-0000-1000-8000-00805F9B34FB. Pentru serviciile standard de 16 biți, în această mască se înlocuiește valoarea UUID: de exemplu, 0x180F devine 0000180F-0000-1000-8000-00805F9B34FB. Serviciile personalizate folosesc un UUID complet independent, generat de dezvoltator.

La crearea unui UUID personalizat puteți folosi orice generator de UUID (UUID v4). Un UUID v4 aleatoriu asigură 122 de biți de entropie, ceea ce face coliziunile practic imposibile. Nu folosiți o versiune modificată a UUID-ului de bază Bluetooth SIG pentru servicii personalizate — acest lucru încalcă specificația.

Cum să declari un serviciu cu UUID în cod

Declararea serviciului cu UUID se realizează pe partea Peripheral la crearea serverului GATT. În iOS se folosește Core Bluetooth, în Android — android.bluetooth.le. Să analizăm ambele abordări.

iOS: Core Bluetooth

În Swift, serviciul se creează prin CBMutableService cu specificarea UUID-ului, după care i se adaugă caracteristici prin CBMutableCharacteristic.

swift
import CoreBluetooth

// UUID standard de 16 biți
let batteryServiceUUID = CBUUID("180F")

// UUID personalizat de 128 de biți
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")

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

// Adăugare caracteristici
service.characteristics = [characteristic]

// Publicare serviciu prin peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

Pe Android, serviciul se înregistrează prin BluetoothGattServer și BluetoothGattService. UUID-ul este transmis ca șir de caractere în java.util.UUID.fromString.

java
import android.bluetooth.*;

// UUID personalizat al serviciului
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
);

// Adăugare caracteristici
service.addCharacteristic(characteristic);

// Înregistrare pe serverul GATT
gattServer.addService(service);

Scanarea serviciilor după UUID

Scanarea după Service UUID permite Central să găsească dispozitive care oferă serviciul necesar fără a se conecta la toate Peripheral-urile detectate. Pachetul de advertising BLE poate conține o listă de UUID-uri de servicii, ceea ce permite Central să filtreze dispozitivele în etapa de scanare.

În iOS, CBCentralManager scanează dispozitivele cu filtru după UUID-ul serviciului. Acest lucru reduce consumul de energie și accelerează detectarea dispozitivelor necesare.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

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

// Delegatul primește doar dispozitive Heart Rate Service
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral are doar dispozitive cu UUID 0x180D
}

Pe Android, filtrarea după UUID este de asemenea suportată prin ScanFilter.Builder. Aceasta este o modalitate eficientă de a restrânge domeniul de căutare fără a se conecta la fiecare dispozitiv.

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

Mai multe servicii pe un singur dispozitiv

Un singur dispozitiv BLE poate declara mai multe servicii simultan. De exemplu, o brățară fitness poate conține Battery Service (0x180F), Heart Rate Service (0x180D) și un serviciu personalizat pentru sincronizarea datelor cu cloud-ul. Fiecare serviciu are propriul UUID și propriul set de caracteristici.

În cazul serviciilor multiple, este important să se ia în considerare limitarea pachetului de advertising. Pachetul de advertising BLE poate conține până la 31 de octeți de date. Dacă UUID-urile serviciilor ocupă prea mult spațiu, unele dintre ele pot să nu încapă în pachetul de advertising. În acest caz, se folosește scan response — al doilea pachet trimis la cererea Central.

Conform Bluetooth Core Specification 5.4 (2023), numărul maxim de servicii primare pe un singur server GATT nu este limitat de specificație, dar în practică este limitat de memoria dispozitivului și de cerințele de performanță. Pentru dispozitivele încorporate cu 256 KB de memorie flash, se recomandă nu mai mult de 5–10 servicii.

Întrebări frecvente

Cu ce se diferențiază UUID-ul de 16 biți de cel de 128 de biți?

UUID-urile de 16 biți sunt rezervate de Bluetooth SIG pentru servicii standard și ocupă 2 octeți în pachetul de advertising. UUID-urile de 128 de biți sunt folosite pentru servicii personalizate și ocupă 16 octeți. Alegerea depinde de tipul serviciului: funcționalitatea standard folosește UUID de 16 biți, cea unică — UUID de 128 de biți.

Cum se generează un UUID personalizat de 128 de biți pentru un serviciu BLE?

Folosiți UUID v4 — un UUID aleatoriu generat de instrumente online, comanda terminală uuidgen sau API-ul limbajului dumneavoastră de programare. Exemplu: UUID.fromString(UUID.randomUUID().toString()) în Java sau UUID() în Swift.

Este necesară înregistrarea UUID-ului personalizat în Bluetooth SIG?

Nu, înregistrarea nu este necesară. Bluetooth SIG înregistrează doar UUID-urile de 16 biți. UUID-urile personalizate de 128 de biți sunt generate independent de dezvoltator și garantează unicitatea datorită spațiului uriaș de adrese (2^128 de combinații).

Poate un singur serviciu să conțină mai multe caracteristici?

Da, un serviciu GATT standard poate conține un număr nelimitat de caracteristici. De exemplu, Battery Service poate conține Battery Level (0x2A19) și Battery Power State (0x2A1A). Fiecare caracteristică are propriul UUID și propriul set de proprietăți.

Ce se întâmplă dacă două dispozitive folosesc același UUID personalizat?

Dacă UUID-urile coincid, Central nu va putea distinge un serviciu de celălalt fără informații suplimentare. Probabilitatea de coliziune a UUID v4 aleatorii este extrem de mică — aproximativ 5,3 × 10^−37. Folosiți un generator de UUID aleator, nu copiați UUID-uri din exemple.

Rezumat

  • Service UUID — identificatorul global al unui serviciu BLE, care poate fi de 16 biți (standard) sau de 128 de biți (personalizat).
  • Bluetooth SIG a alocat peste 60 de UUID-uri standard — folosiți-le pentru compatibilitate cu dispozitivele altor producători.
  • UUID-urile de 128 de biți sunt create de dezvoltator prin UUID v4 și garantează unicitatea fără un registru central.
  • La scanare, Central filtrează dispozitivele după Service UUID, ceea ce reduce consumul de energie și accelerează căutarea.
  • Un singur dispozitiv poate declara mai multe servicii cu UUID-uri diferite — numărul este limitat de memorie și de pachetul de advertising.
  • În iOS și Android, serviciile se declară prin CBMutableService și, respectiv, BluetoothGattService cu specificarea UUID-ului.
  • Alegerea corectă a UUID-ului influențează compatibilitatea, dimensiunea pachetului de advertising și corectitudinea funcționării profilului GATT.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și