Service UUID: bu nima, format va qayerda qo'llaniladi

Muallif: IT Sectr Nashr etilgan: 2026-07-14 O'qish vaqti: 8 daq

Service UUID — bu qurilmadagi funksional xizmatni aniq belgilaydigan noyob 16 yoki 128 bitli Bluetooth Low Energy (BLE) identifikatoridir. Bluetooth SIG Battery Service (0x180F), Device Information (0x180A) va Heart Rate (0x180D) kabi keng tarqalgan xizmatlar uchun standart 16 bitli UUIDlarni ajratgan, bu esa platformalararo moslikni soddalashtiradi. Bluetooth Core Specification 5.4 (2023) ma'lumotlariga ko'ra, uchinchi tomon ishlab chiquvchilarining maxsus xizmatlari 128 bitli UUIDlardan foydalanishi shart, ularning formati markaziy reyestrsiz global noyoblikni kafolatlaydi. Service UUIDni to'g'ri e'lon qilish periferik qurilmada GATT serverining to'g'ri ishlashi uchun birinchi qadamdir.

Asosiy fikrlar

  • Service UUID — 16 bitli (standart) yoki 128 bitli (maxsus) bo'lishi mumkin bo'lgan BLE xizmat identifikatori.
  • Bluetooth SIG keng tarqalgan xizmatlar — Battery, Heart Rate, Device Information va boshqalar uchun 60 dan ortiq standart UUID ajratgan.
  • 128 bitli UUIDlar ishlab chiquvchi tomonidan yaratiladi va markaziy organda ro'yxatdan o'tkazmasdan xizmatning global noyobligini kafolatlaydi.
  • Skanerlashda Central Peripheral xizmatlarini ularning Service UUID orqali aniqlaydi, bu qurilmalarning mosligini belgilaydi.
  • Bitta GATT serveri turli UUIDlar bilan bir nechta xizmatlarni e'lon qilishi mumkin — har bir xizmat o'z xususiyatlarini o'z ichiga oladi.

BLE da Service UUID nima?

Service UUID — bu boshqa qurilmalar tomonidan noyob tanib olish uchun Bluetooth Low Energy GATT xizmatiga tayinlanadigan identifikatordir. BLE arxitekturasida har bir xizmat umumiy funksiya bilan birlashtirilgan xususiyatlarning mantiqiy guruhini ifodalaydi. Masalan, Battery Service xizmati batareyaning joriy zaryad darajasini uzatuvchi Battery Level xususiyatini o'z ichiga oladi.

Bluetooth SIG (Special Interest Group) eng keng tarqalgan xizmatlarga tayinlanadigan standart 16 bitli UUIDlar reyestrini boshqaradi. Bu turli ishlab chiqaruvchilarning qurilmalariga oldindan sozlamasdan bir-birlarining xizmatlarini tanib olish imkonini beradi. Har qanday brendning fitness trackeri UUID 0x180D bilan Heart Rate Service ni e'lon qilishi mumkin va har qanday smartfon bu yurak urishi xizmati ekanligini tushunadi.

Bluetooth Core Specification 5.4 (2023) ma'lumotlariga ko'ra, 16 bitli UUID diapazoni (0x0000–0xFFFF) ikki qismga bo'linadi: 0x0001 dan 0xFFFE gacha — Bluetooth SIG standart xizmatlari, 0xFFFF esa zaxiralangan. Agar ishlab chiquvchiga SIG reyestrida mavjud bo'lmagan noyob xizmat kerak bo'lsa, u 128 bitli UUID dan foydalanadi.

Standart va maxsus UUID o'rtasidagi farq faqat uzunlikda emas: 16 bitli UUIDlar efir vaqtini tejaydi, chunki ular 16 bayt o'rniga 2 bayt sifatida uzatiladi. Advertising paketi hajmi bo'yicha qattiq cheklovlarga ega qurilmalar (31 baytgacha) uchun bu juda muhimdir.

Standart va maxsus UUIDlar

Standart 16 bitli UUIDlar BLE qurilmalarining asosiy toifalarini qamrab oladi: tibbiy sensorlar, fitness trekerlar, taqiladigan elektronika va aksessuarlar. Agar qurilma standart funksiyani amalga oshirsa — ishlab chiquvchiga maksimal moslik uchun Bluetooth SIG reyestridan tegishli UUID dan foydalanish tavsiya etiladi.

Mana bir nechta standart xizmat UUIDlariga misollar:

UUID (hex)Xizmat nomiMaqsadi
0x1800Generic AccessKirishni boshqarish, qurilma nomi, tashqi ko'rinish
0x180ADevice InformationIshlab chiqaruvchi, model, seriya raqami, dasturiy ta'minot versiyasi
0x180DHeart RateYurak urishini o'lchash, sensor joylashuvi, batareya quvvati
0x180FBattery ServiceBatareya zaryad darajasi foizda
0x181AEnvironmental SensingHarorat, namlik, bosim, yorug'lik
0x181CUser DataYosh, vazn, bo'y, jins, dam olishdagi yurak urishi

Maxsus 128 bitli UUIDlar qurilma noyob funksionallikni taqdim etganda zarurdir. Masalan, aqlli qulf ishlab chiqaruvchisi XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ko'rinishidagi o'z Lock Control xizmatini yaratadi. Bunday UUID boshqa xizmatlar bilan ziddiyatga kelmasligini kafolatlaydi, chunki 128 bitli qiymatlar fazosi amalda tuganmasdir.

128 bitli UUID formati

128 bitli UUID standart UUID RFC 4122 formatida yoziladi: sakkizta o'n oltilik belgi, defis, to'rt, defis, to'rt, defis, to'rt, defis, o'n ikki belgi. BLE uchun Bluetooth SIG asosiy UUID qismi sobit bitlarga ega bo'lgan versiya ishlatiladi.

Bluetooth SIG asosiy UUID ni belgilaydi: 0000XXXX-0000-1000-8000-00805F9B34FB. Standart 16 bitli xizmatlar uchun ushbu maskaga UUID qiymati qo'yiladi: masalan, 0x180F 0000180F-0000-1000-8000-00805F9B34FB ga aylanadi. Maxsus xizmatlar ishlab chiquvchi tomonidan yaratilgan butunlay mustaqil UUID dan foydalanadi.

Maxsus UUID yaratishda istalgan UUID generatoridan (UUID v4) foydalanish mumkin. Tasodifiy UUID v4 122 bit entropiyani ta'minlaydi, bu esa to'qnashuvlarni amalda imkonsiz qiladi. Maxsus xizmatlar uchun Bluetooth SIG asosiy UUID ning o'zgartirilgan versiyasidan foydalanmang — bu spetsifikatsiyani buzadi.

Kodda UUID bilan xizmatni qanday e'lon qilish

Xizmatni e'lon qilish UUID bilan GATT serverini yaratishda Peripheral tomonidan amalga oshiriladi. iOS da buning uchun Core Bluetooth, Android da esa android.bluetooth.le ishlatiladi. Keling, ikkala yondashuvni ko'rib chiqaylik.

iOS: Core Bluetooth

Swift da xizmat UUID ko'rsatilgan holda CBMutableService orqali yaratiladi, so'ngra unga CBMutableCharacteristic orqali xususiyatlar qo'shiladi.

swift
import CoreBluetooth

// Standart 16 bitli UUID
let batteryServiceUUID = CBUUID("180F")

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

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

// Xususiyatlar qo'shish
service.characteristics = [characteristic]

// peripheralManager orqali xizmatni nashr qilish
peripheralManager.add(service)

Android: Bluetooth GATT Server

Android da xizmat BluetoothGattServer va BluetoothGattService orqali ro'yxatdan o'tkaziladi. UUID java.util.UUID.fromString da satr sifatida uzatiladi.

java
import android.bluetooth.*;

// Maxsus xizmat UUID si
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
);

// Xususiyatlar qo'shish
service.addCharacteristic(characteristic);

// GATT serverida ro'yxatdan o'tkazish
gattServer.addService(service);

UUID bo'yicha xizmatlarni skanerlash

Service UUID bo'yicha skanerlash Central ga barcha aniqlangan Peripheral larga ulanishsiz kerakli xizmatni taqdim etuvchi qurilmalarni topish imkonini beradi. BLE advertising paketi xizmat UUIDlari ro'yxatini o'z ichiga olishi mumkin, bu Central ga skanerlash bosqichida qurilmalarni filtrlash imkonini beradi.

iOS da CBCentralManager xizmat UUID si bo'yicha filtr bilan qurilmalarni skanerlaydi. Bu energiya sarfini kamaytiradi va kerakli qurilmalarni aniqlashni tezlashtiradi.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

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

// Delegat faqat Heart Rate Service qurilmalarini qabul qiladi
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral faqat UUID 0x180D bo'lgan qurilmalarga ega
}

Android da UUID bo'yicha filtrlash ham ScanFilter.Builder orqali qo'llab-quvvatlanadi. Bu har bir qurilmaga ulanishsiz qidiruv doirasini toraytirishning samarali usulidir.

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

Bitta qurilmada bir nechta xizmatlar

Bitta BLE qurilmasi bir vaqtning o'zida bir nechta xizmatlarni e'lon qilishi mumkin. Masalan, fitness bilaguzuk Battery Service (0x180F), Heart Rate Service (0x180D) va bulut bilan ma'lumotlarni sinxronlash uchun maxsus xizmatni o'z ichiga olishi mumkin. Har bir xizmat o'z UUID va o'z xususiyatlar to'plamiga ega.

Bir nechta xizmatlar bo'lganda reklama paketining cheklovini hisobga olish muhimdir. BLE advertising paketi 31 baytgacha ma'lumotni o'z ichiga olishi mumkin. Agar xizmat UUIDlari juda ko'p joy egallasa, ularning ba'zilari reklama paketiga sig'masligi mumkin. Bunday holda scan response ishlatiladi — Central so'rovi bo'yicha yuboriladigan ikkinchi paket.

Bluetooth Core Specification 5.4 (2023) ma'lumotlariga ko'ra, bitta GATT serveridagi birlamchi xizmatlarning maksimal soni spetsifikatsiya bilan cheklanmagan, ammo amalda qurilma xotirasi va ishlash talablari bilan cheklanadi. 256 KB flesh xotiraga ega o'rnatilgan qurilmalar uchun 5–10 dan ortiq bo'lmagan xizmatlar tavsiya etiladi.

Tez-tez so'raladigan savollar

16 bitli UUID 128 bitlidan qanday farq qiladi?

16 bitli UUIDlar Bluetooth SIG tomonidan standart xizmatlar uchun zaxiralangan va reklama paketida 2 bayt joy egallaydi. 128 bitli UUIDlar maxsus xizmatlar uchun ishlatiladi va 16 bayt joy egallaydi. Tanlov xizmat turiga bog'liq: standart funksionallik 16 bitli UUID, noyob esa 128 bitli UUID dan foydalanadi.

BLE xizmati uchun maxsus 128 bitli UUIDni qanday yaratish mumkin?

UUID v4 dan foydalaning — onlayn vositalar, uuidgen terminal buyrug'i yoki dasturlash tili API tomonidan yaratiladigan tasodifiy UUID. Misol: Java da UUID.fromString(UUID.randomUUID().toString()) yoki Swift da UUID().

Maxsus UUIDni Bluetooth SIG da ro'yxatdan o'tkazish kerakmi?

Yo'q, ro'yxatdan o'tkazish talab qilinmaydi. Bluetooth SIG faqat 16 bitli UUIDlarni ro'yxatga oladi. Maxsus 128 bitli UUIDlar ishlab chiquvchi tomonidan mustaqil ravishda yaratiladi va ulkan manzil maydoni (2^128 kombinatsiya) tufayli noyoblikni kafolatlaydi.

Bitta xizmat bir nechta xususiyatlarni o'z ichiga olishi mumkinmi?

Ha, standart GATT xizmati cheklanmagan miqdordagi xususiyatlarni o'z ichiga olishi mumkin. Masalan, Battery Service Battery Level (0x2A19) va Battery Power State (0x2A1A) ni o'z ichiga olishi mumkin. Har bir xususiyat o'z UUID va xususiyatlar to'plamiga ega.

Agar ikkita qurilma bir xil maxsus UUID dan foydalansa nima bo'ladi?

Agar UUID mos kelsa, Central qo'shimcha ma'lumotlarsiz bir xizmatni boshqasidan ajrata olmaydi. Tasodifiy UUID v4 to'qnashuvi ehtimoli juda kichik — taxminan 5,3 × 10^−37. Misollardan UUID nusxalash o'rniga tasodifiy UUID generatoridan foydalaning.

Xulosa

  • Service UUID — 16 bitli (standart) yoki 128 bitli (maxsus) bo'lishi mumkin bo'lgan BLE xizmatining global identifikatori.
  • Bluetooth SIG 60 dan ortiq standart UUID ajratgan — boshqa ishlab chiqaruvchilar qurilmalari bilan moslik uchun ulardan foydalaning.
  • 128 bitli UUIDlar UUID v4 orqali ishlab chiquvchi tomonidan yaratiladi va markaziy reyestrsiz noyoblikni kafolatlaydi.
  • Skanerlashda Central Service UUID bo'yicha qurilmalarni filtrlaydi, bu energiya sarfini kamaytiradi va qidiruvni tezlashtiradi.
  • Bitta qurilma turli UUIDlar bilan bir nechta xizmatlarni e'lon qilishi mumkin — soni xotira va reklama paketi bilan cheklangan.
  • iOS va Android da xizmatlar mos ravishda CBMutableService va BluetoothGattService orqali UUID ko'rsatilgan holda e'lon qilinadi.
  • UUIDni to'g'ri tanlash moslikka, reklama paketi hajmiga va GATT profilining to'g'ri ishlashiga ta'sir qiladi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing