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 — 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 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 nomi | Maqsadi |
|---|---|---|
| 0x1800 | Generic Access | Kirishni boshqarish, qurilma nomi, tashqi ko'rinish |
| 0x180A | Device Information | Ishlab chiqaruvchi, model, seriya raqami, dasturiy ta'minot versiyasi |
| 0x180D | Heart Rate | Yurak urishini o'lchash, sensor joylashuvi, batareya quvvati |
| 0x180F | Battery Service | Batareya zaryad darajasi foizda |
| 0x181A | Environmental Sensing | Harorat, namlik, bosim, yorug'lik |
| 0x181C | User Data | Yosh, 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 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.
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.
Swift da xizmat UUID ko'rsatilgan holda CBMutableService orqali yaratiladi, so'ngra unga CBMutableCharacteristic orqali xususiyatlar qo'shiladi.
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 da xizmat BluetoothGattServer va BluetoothGattService orqali ro'yxatdan o'tkaziladi. UUID java.util.UUID.fromString da satr sifatida uzatiladi.
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);
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.
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.
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 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 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.
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().
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.
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 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
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.
Shuningdek o'qing