Service UUID: шта је то, формат и где се примењује

Аутор: IT Sectr Објављено: 2026-07-14 Време читања: 8 мин

Service UUID — је јединствени 16- или 128-битни идентификатор Bluetooth Low Energy (BLE) који недвосмислено дефинише функционални сервис на уређају. Bluetooth SIG је доделио стандардне 16-битне UUID-ове за уобичајене сервисе као што су Battery Service (0x180F), Device Information (0x180A) и Heart Rate (0x180D), што поједностављује међуплатформну компатибилност. Према Bluetooth Core Specification 5.4 (2023), прилагођени сервиси програмера трећих страна морају да користе 128-битне UUID-ове, чији формат гарантује глобалну јединственост без централног регистра. Исправно декларисање Service UUID-а је први корак ка исправном раду GATT сервера на периферном уређају.

Главне тачке

  • Service UUID — идентификатор BLE сервиса, који може бити 16-битни (стандардни) или 128-битни (прилагођени).
  • Bluetooth SIG је доделио више од 60 стандардних UUID-ова за уобичајене сервисе — Battery, Heart Rate, Device Information и друге.
  • 128-битни UUID-ови се генеришу од стране програмера и гарантују глобалну јединственост сервиса без регистрације у централном органу.
  • Приликом скенирања, Central открива сервисе Peripheral-а по њиховом Service UUID-у, што одређује компатибилност уређаја.
  • Један GATT сервер може да декларише више сервиса са различитим UUID-овима — сваки сервис садржи сопствене карактеристике.

Шта је Service UUID у BLE-у?

Service UUID — је идентификатор који се додељује GATT сервису Bluetooth Low Energy ради његовог јединственог препознавања од стране других уређаја. У BLE архитектури, сваки сервис представља логичку групу карактеристика обједињених заједничком функцијом. На пример, сервис Battery Service садржи карактеристику Battery Level, која преноси тренутни ниво напуњености батерије.

Bluetooth SIG (Special Interest Group) управља регистром стандардних 16-битних UUID-ова који се додељују најчешћим сервисима. Ово омогућава уређајима различитих произвођача да препознају сервисе једни других без претходне конфигурације. Фитнес тракер било које марке може да декларише Heart Rate Service са UUID-ом 0x180D, и сваки паметни телефон ће разумети да је то сервис пулса.

Према Bluetooth Core Specification 5.4 (2023), опсег 16-битних UUID-ова (0x0000–0xFFFF) је подељен на два дела: од 0x0001 до 0xFFFE — стандардни сервиси Bluetooth SIG, а 0xFFFF је резервисан. Ако је програмеру потребан јединствени сервис који не постоји у SIG регистру, користи 128-битни UUID.

Разлика између стандардног и прилагођеног UUID-а није само у дужини: 16-битни UUID-ови штеде време емитовања рекламног пакета, јер се преносе као 2 бајта уместо 16 бајтова. За уређаје са строгим ограничењима величине advertising пакета (до 31 бајта) ово је критично.

Стандардни и прилагођени UUID-ови

Стандардни 16-битни UUID-ови покривају главне категорије BLE уређаја: медицински сензори, фитнес тракери, носива електроника и додатна опрема. Ако уређај имплементира стандардну функцију — програмеру се препоручује да користи одговарајући UUID из Bluetooth SIG регистра за максималну компатибилност.

Ево неколико примера стандардних сервисних UUID-ова:

UUID (hex)Име сервисаНамена
0x1800Generic AccessУправљање приступом, име уређаја, спољашњи изглед
0x180ADevice InformationПроизвођач, модел, серијски број, верзија софтвера
0x180DHeart RateМерење пулса, локација сензора, енергија батерије
0x180FBattery ServiceНиво напуњености батерије у процентима
0x181AEnvironmental SensingТемпература, влажност, притисак, осветљење
0x181CUser DataСтарост, тежина, висина, пол, пулс у мировању

Прилагођени 128-битни UUID-ови су неопходни када уређај пружа јединствену функционалност. На пример, произвођач паметне браве креира сопствени сервис Lock Control са UUID-ом облика XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Такав UUID гарантује да неће доћи у конфликт са другим сервисима, јер је простор 128-битних вредности практично неисцрпан.

Формат 128-битног UUID-а

128-битни UUID се записује у стандардном формату UUID RFC 4122: осам хексадецималних знакова, цртица, четири, цртица, четири, цртица, четири, цртица, дванаест знакова. За BLE се користи верзија где основни део Bluetooth SIG UUID-а има фиксне битове.

Bluetooth SIG дефинише основни UUID: 0000XXXX-0000-1000-8000-00805F9B34FB. За стандардне 16-битне сервисе, у ову маску се замењује вредност UUID-а: на пример, 0x180F постаје 0000180F-0000-1000-8000-00805F9B34FB. Прилагођени сервиси користе потпуно независни UUID, генерисан од стране програмера.

Приликом креирања прилагођеног UUID-а можете користити било који генератор UUID-а (UUID v4). Случајни UUID v4 обезбеђује 122 бита ентропије, што чини колизије практично немогућим. Немојте користити модификовану верзију основног Bluetooth SIG UUID-а за прилагођене сервисе — ово крши спецификацију.

Како декларисати сервис са UUID-ом у коду

Декларисање сервиса са UUID-ом се врши на страни Peripheral-а приликом креирања GATT сервера. У iOS-у се за то користи Core Bluetooth, у Android-у — android.bluetooth.le. Размотримо оба приступа.

iOS: Core Bluetooth

У Swift-у сервис се креира кроз CBMutableService са навођењем UUID-а, након чега му се додају карактеристике кроз CBMutableCharacteristic.

swift
import CoreBluetooth

// Стандардни 16-битни UUID
let batteryServiceUUID = CBUUID("180F")

// Прилагођени 128-битни UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")

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

// Додај карактеристике
service.characteristics = [characteristic]

// Објави сервис путем peripheralManager-а
peripheralManager.add(service)

Android: Bluetooth GATT Server

На Android-у сервис се региструје кроз BluetoothGattServer и BluetoothGattService. UUID се преноси као стринг у java.util.UUID.fromString.

java
import android.bluetooth.*;

// Прилагођени 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
);

// Додај карактеристике
service.addCharacteristic(characteristic);

// Региструј на GATT серверу
gattServer.addService(service);

Скенирање сервиса по UUID-у

Скенирање по Service UUID-у омогућава Central-у да пронађе уређаје који пружају потребан сервис без повезивања на све откривене Peripheral-е. BLE advertising пакет може да садржи листу UUID-ова сервиса, што омогућава Central-у да филтрира уређаје у фази скенирања.

У iOS-у, CBCentralManager скенира уређаје са филтером по UUID-у сервиса. Ово смањује потрошњу енергије и убрзава откривање потребних уређаја.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

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

// Делегат прима само уређаје Heart Rate Service
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral има само уређаје са UUID 0x180D
}

На Android-у филтрирање по UUID-у је такође подржано кроз ScanFilter.Builder. Ово је ефикасан начин да се сузи круг претраге без повезивања на сваки уређај.

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

Више сервиса на једном уређају

Један BLE уређај може да декларише више сервиса истовремено. На пример, фитнес наруквица може да садржи Battery Service (0x180F), Heart Rate Service (0x180D) и прилагођени сервис за синхронизацију података са облаком. Сваки сервис има сопствени UUID и сопствени скуп карактеристика.

Код вишеструких сервиса важно је узети у обзир ограничење рекламног пакета. BLE advertising пакет може да садржи до 31 бајта података. Ако UUID-ови сервиса заузимају превише простора, неки од њих можда неће стати у рекламни пакет. У овом случају се користи scan response — други пакет који се шаље на захтев Central-а.

Према Bluetooth Core Specification 5.4 (2023), максималан број примарних сервиса на једном GATT серверу није ограничен спецификацијом, али је у пракси ограничен меморијом уређаја и захтевима за перформансе. За уграђене уређаје са 256 KB флеш меморије препоручује се не више од 5–10 сервиса.

Често постављана питања

По чему се 16-битни UUID разликује од 128-битног?

16-битни UUID-ови су резервисани од стране Bluetooth SIG-а за стандардне сервисе и заузимају 2 бајта у рекламном пакету. 128-битни UUID-ови се користе за прилагођене сервисе и заузимају 16 бајтова. Избор зависи од типа сервиса: стандардна функционалност користи 16-битни UUID, јединствена — 128-битни.

Како генерисати прилагођени 128-битни UUID за BLE сервис?

Користите UUID v4 — случајни UUID који се генерише онлајн алатима, терминалном командом uuidgen или API-јем вашег програмског језика. Пример: UUID.fromString(UUID.randomUUID().toString()) у Java-и или UUID() у Swift-у.

Да ли је потребно регистровати прилагођени UUID у Bluetooth SIG?

Не, регистрација није потребна. Bluetooth SIG региструје само 16-битне UUID-ове. Прилагођени 128-битни UUID-ови се генеришу самостално од стране програмера и гарантују јединственост захваљујући огромном адресном простору (2^128 комбинација).

Може ли један сервис да садржи више карактеристика?

Да, стандардни GATT сервис може да садржи неограничен број карактеристика. На пример, Battery Service може да садржи Battery Level (0x2A19) и Battery Power State (0x2A1A). Свака карактеристика има сопствени UUID и скуп својстава.

Шта се дешава ако два уређаја користе исти прилагођени UUID?

Ако се UUID-ови поклопе, Central неће моћи да разликује један сервис од другог без додатних информација. Вероватноћа колизије случајних UUID v4 је занемарљиво мала — приближно 5,3 × 10^−37. Користите генератор случајних UUID-ова, не копирајте UUID-ове из примера.

Резиме

  • Service UUID — глобални идентификатор BLE сервиса, који може бити 16-битни (стандардни) или 128-битни (прилагођени).
  • Bluetooth SIG је доделио више од 60 стандардних UUID-ова — користите их за компатибилност са уређајима других произвођача.
  • 128-битни UUID-ови се креирају од стране програмера путем UUID v4 и гарантују јединственост без централног регистра.
  • Приликом скенирања, Central филтрира уређаје по Service UUID-у, што смањује потрошњу енергије и убрзава претрагу.
  • Један уређај може да декларише више сервиса са различитим UUID-овима — број је ограничен меморијом и рекламним пакетом.
  • У iOS-у и Android-у сервиси се декларишу кроз CBMutableService и BluetoothGattService са навођењем UUID-а.
  • Исправан избор UUID-а утиче на компатибилност, величину рекламног пакета и исправност рада GATT профила.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође