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 використовується версія, де базова частина UUID Bluetooth SIG має фіксовані біти.

Bluetooth SIG визначає базовий UUID: 0000XXXX-0000-1000-8000-00805F9B34FB. Для стандартних 16-бітних сервісів у цю маску підставляється значення UUID: наприклад, 0x180F перетворюється на 0000180F-0000-1000-8000-00805F9B34FB. Кастомні сервіси використовують повністю незалежний UUID, згенерований розробником.

При створенні кастомного UUID можна використовувати будь-який генератор UUID (UUID v4). Випадковий UUID v4 забезпечує 122 біти ентропії, що робить колізії практично неможливими. Не використовуйте модифіковану версію базового UUID Bluetooth SIG для кастомних сервісів — це порушує специфікацію.

Як оголосити сервіс з UUID у коді

Оголошення сервісу з UUID виконується на стороні Peripheral при створенні GATT-сервера. У iOS для цього використовується Core Bluetooth, в Android — android.bluetooth.le. Розглянемо обидва підходи.

iOS: Core Bluetooth

У Swift сервіс створюється через CBMutableService із зазначенням UUID, після чого до нього додаються характеристики через CBMutableCharacteristic.

swift
import CoreBluetooth

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

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

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

// Add characteristics
service.characteristics = [characteristic]

// Publish service via peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

На Android сервіс реєструється через BluetoothGattServer та BluetoothGattService. UUID передається як рядок у java.util.UUID.fromString.

java
import android.bluetooth.*;

// Custom service 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
);

// Add characteristics
service.addCharacteristic(characteristic);

// Register on GATT server
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
    )
}

// Delegate receives only Heart Rate Service devices
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral has only devices with 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 і власний набір характеристик.

При множинних сервісах важливо враховувати обмеження рекламного пакета. Advertising-пакет BLE може містити до 31 байта даних. Якщо UUID сервісів займають занадто багато місця, деякі з них можуть не поміститися в рекламний пакет. У цьому випадку використовується scan response — другий пакет, який надсилається за запитом Central.

Згідно з Bluetooth Core Specification 5.4 (2023), максимальна кількість первинних сервісів на одному GATT-сервері не обмежена специфікацією, але на практиці обмежена пам'яттю пристрою та вимогами до продуктивності. Для вбудованих пристроїв з 256 КБ флеш-пам'яті рекомендується не більше 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також