Service UUID — cihazdakı funksional xidməti unikal şəkildə müəyyən edən 16 və ya 128 bitlik Bluetooth Low Energy (BLE) identifikatorudur. Bluetooth SIG, Battery Service (0x180F), Device Information (0x180A) və Heart Rate (0x180D) kimi ümumi xidmətlər üçün standart 16 bitlik UUID-lər ayırmışdır ki, bu da platformalararası uyğunluğu asanlaşdırır. Bluetooth Core Specification 5.4 (2023) məlumatına görə, üçüncü tərəf tərtibatçılarının fərdi xidmətləri 128 bitlik UUID-lərdən istifadə etməlidir, onların formatı mərkəzi reyestr olmadan qlobal unikallığı təmin edir. Service UUID-nin düzgün elan edilməsi periferik cihazda GATT serverinin düzgün işləməsinə doğru ilk addımdır.
Əsas məqamlar
Service UUID — digər cihazlar tərəfindən unikal tanınması üçün Bluetooth Low Energy GATT xidmətinə təyin edilən identifikatordur. BLE arxitekturasında hər bir xidmət ümumi funksiya ilə birləşdirilmiş xüsusiyyətlərin məntiqi qrupunu təşkil edir. Məsələn, Battery Service xidməti batareyanın cari doldurulma səviyyəsini ötürən Battery Level xüsusiyyətini ehtiva edir.
Bluetooth SIG (Special Interest Group) ən çox yayılmış xidmətlərə təyin edilən standart 16 bitlik UUID-lərin reyestrini idarə edir. Bu, müxtəlif istehsalçıların cihazlarına əvvəlcədən konfiqurasiya olmadan bir-birlərinin xidmətlərini tanımağa imkan verir. İstənilən brendin fitness trackeri UUID 0x180D ilə Heart Rate Service elan edə bilər və istənilən smartfon bunun ürək döyüntüsü xidməti olduğunu başa düşəcək.
Bluetooth Core Specification 5.4 (2023) məlumatına görə, 16 bitlik UUID diapazonu (0x0000–0xFFFF) iki hissəyə bölünür: 0x0001-dən 0xFFFE-dək — Bluetooth SIG standart xidmətləri, 0xFFFF isə rezerv edilmişdir. Əgər tərtibatçıya SIG reyestrində olmayan unikal xidmət lazımdırsa, o, 128 bitlik UUID-dən istifadə edir.
Standart və fərdi UUID arasındakı fərq yalnız uzunluqda deyil: 16 bitlik UUID-lər efir vaxtına qənaət edir, çünki 16 bayt əvəzinə 2 bayt kimi ötürülür. Advertising paketinin ölçüsündə ciddi məhdudiyyətləri olan cihazlar (31 bayta qədər) üçün bu kritikdir.
Standart 16 bitlik UUID-lər BLE cihazlarının əsas kateqoriyalarını əhatə edir: tibbi sensorlar, fitness trekerlər, geyilən elektronika və aksesuarlar. Əgər cihaz standart funksiyanı həyata keçirirsə — maksimum uyğunluq üçün tərtibatçıya Bluetooth SIG reyestrindən müvafiq UUID-dən istifadə etmək tövsiyə olunur.
Budur bir neçə standart xidmət UUID nümunəsi:
| UUID (hex) | Xidmət adı | Təyinatı |
|---|---|---|
| 0x1800 | Generic Access | Girişin idarə edilməsi, cihaz adı, xarici görünüş |
| 0x180A | Device Information | İstehsalçı, model, seriya nömrəsi, proqram versiyası |
| 0x180D | Heart Rate | Nəbzin ölçülməsi, sensor yeri, batareya enerjisi |
| 0x180F | Battery Service | Batareyanın doldurulma səviyyəsi faizlə |
| 0x181A | Environmental Sensing | Temperatur, rütubət, təzyiq, işıqlanma |
| 0x181C | User Data | Yaş, çəki, boy, cins, istirahət zamanı nəbz |
Fərdi 128 bitlik UUID-lər cihaz unikal funksionallıq təqdim etdikdə zəruridir. Məsələn, ağıllı qıfıl istehsalçısı XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX şəklində öz Lock Control xidmətini yaradır. Belə UUID digər xidmətlərlə ziddiyyət təşkil etməyəcəyinə zəmanət verir, çünki 128 bitlik dəyərlər fəzası praktiki olaraq tükənməzdir.
128 bitlik UUID standart UUID RFC 4122 formatında yazılır: səkkiz onaltılıq simvol, defis, dörd, defis, dörd, defis, dörd, defis, on iki simvol. BLE üçün Bluetooth SIG-nin əsas UUID hissəsinin sabit bitlərə malik olduğu versiya istifadə olunur.
Bluetooth SIG əsas UUID-ni müəyyən edir: 0000XXXX-0000-1000-8000-00805F9B34FB. Standart 16 bitlik xidmətlər üçün bu maskaya UUID dəyəri əvəz olunur: məsələn, 0x180F 0000180F-0000-1000-8000-00805F9B34FB-ə çevrilir. Fərdi xidmətlər tərtibatçı tərəfindən yaradılan tamamilə müstəqil UUID-dən istifadə edir.
Fərdi UUID yaradarkən istənilən UUID generatorundan (UUID v4) istifadə edə bilərsiniz. Təsadüfi UUID v4 122 bit entropiya təmin edir ki, bu da toqquşmaları praktiki olaraq qeyri-mümkün edir. Fərdi xidmətlər üçün Bluetooth SIG-nin əsas UUID-nin dəyişdirilmiş versiyasından istifadə etməyin — bu, spesifikasiyanı pozur.
Xidmətin elan edilməsi UUID ilə GATT serverinin yaradılması zamanı Peripheral tərəfindən həyata keçirilir. iOS-da bunun üçün Core Bluetooth, Android-də isə android.bluetooth.le istifadə olunur. Hər iki yanaşmaya baxaq.
Swift-də xidmət UUID-nin göstərilməsi ilə CBMutableService vasitəsilə yaradılır, bundan sonra CBMutableCharacteristic vasitəsilə ona xüsusiyyətlər əlavə edilir.
import CoreBluetooth
// Standart 16 bitlik UUID
let batteryServiceUUID = CBUUID("180F")
// Fərdi 128 bitlik UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")
let service = CBMutableService(
type: customServiceUUID,
primary: true
)
// Xüsusiyyətlər əlavə et
service.characteristics = [characteristic]
// peripheralManager vasitəsilə xidməti dərc et
peripheralManager.add(service)
Android-də xidmət BluetoothGattServer və BluetoothGattService vasitəsilə qeydiyyatdan keçirilir. UUID java.util.UUID.fromString-də sətir kimi ötürülür.
import android.bluetooth.*;
// Fərdi xidmət 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
);
// Xüsusiyyətlər əlavə et
service.addCharacteristic(characteristic);
// GATT serverində qeydiyyatdan keçir
gattServer.addService(service);
Service UUID-ə görə skan etmə Central-ə bütün aşkar edilmiş Peripheral-lərə qoşulmadan lazımi xidməti təmin edən cihazları tapmağa imkan verir. BLE advertising paketi xidmət UUID-lərinin siyahısını ehtiva edə bilər ki, bu da Central-ə skan mərhələsində cihazları filtrləməyə imkan verir.
iOS-da CBCentralManager xidmət UUID-si üzrə filtr ilə cihazları skan edir. Bu, enerji istehlakını azaldır və lazımi cihazların aşkarlanmasını sürətləndirir.
import CoreBluetooth
let centralManager = CBCentralManager()
func scanForHeartRateMonitor() {
let services: [CBUUID] = [
CBUUID("180D") // Heart Rate Service
]
centralManager.scanForPeripherals(
withServices: services,
options: nil
)
}
// Delegat yalnız Heart Rate Service cihazlarını qəbul edir
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// peripheral yalnız UUID 0x180D olan cihazlara malikdir
}
Android-də UUID üzrə filtrləmə də ScanFilter.Builder vasitəsilə dəstəklənir. Bu, hər bir cihaza qoşulmadan axtarış dairəsini daraltmağın effektiv üsuludur.
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
);
Bir BLE cihazı eyni anda bir neçə xidmət elan edə bilər. Məsələn, fitness bilərziyi Battery Service (0x180F), Heart Rate Service (0x180D) və buludla məlumat sinxronizasiyası üçün fərdi xidmət ehtiva edə bilər. Hər bir xidmətin öz UUID-si və öz xüsusiyyətlər dəsti var.
Çoxsaylı xidmətlər olduqda reklam paketinin məhdudiyyətini nəzərə almaq vacibdir. BLE advertising paketi 31 bayta qədər məlumat ehtiva edə bilər. Əgər xidmət UUID-ləri çox yer tutursa, bəziləri reklam paketinə sığmaya bilər. Bu halda scan response istifadə olunur — Central-in sorğusu ilə göndərilən ikinci paket.
Bluetooth Core Specification 5.4 (2023) məlumatına görə, bir GATT serverində ilkin xidmətlərin maksimum sayı spesifikasiya ilə məhdudlaşdırılmayıb, lakin praktikada cihazın yaddaşı və performans tələbləri ilə məhdudlaşır. 256 KB fləş yaddaşı olan quraşdırılmış cihazlar üçün 5–10-dan çox olmayan xidmət tövsiyə olunur.
Tez-tez verilən suallar
16 bitlik UUID-lər Bluetooth SIG tərəfindən standart xidmətlər üçün ayrılıb və reklam paketində 2 bayt yer tutur. 128 bitlik UUID-lər fərdi xidmətlər üçün istifadə olunur və 16 bayt yer tutur. Seçim xidmətin növündən asılıdır: standart funksionallıq 16 bitlik UUID, unikal isə 128 bitlik UUID istifadə edir.
UUID v4 istifadə edin — onlayn alətlər, uuidgen terminal əmri və ya proqramlaşdırma dilinizin API-i tərəfindən yaradılan təsadüfi UUID. Nümunə: Java-da UUID.fromString(UUID.randomUUID().toString()) və ya Swift-də UUID().
Xeyr, qeydiyyat tələb olunmur. Bluetooth SIG yalnız 16 bitlik UUID-ləri qeydiyyata alır. Fərdi 128 bitlik UUID-lər tərtibatçı tərəfindən müstəqil şəkildə yaradılır və nəhəng ünvan fəzası (2^128 kombinasiya) sayəsində unikallığı təmin edir.
Bəli, standart GATT xidməti məhdudiyyətsiz sayda xüsusiyyət ehtiva edə bilər. Məsələn, Battery Service Battery Level (0x2A19) və Battery Power State (0x2A1A) ehtiva edə bilər. Hər bir xüsusiyyətin öz UUID-si və xassələr dəsti var.
UUID üst-üstə düşərsə, Central əlavə məlumat olmadan bir xidməti digərindən ayıra bilməyəcək. Təsadüfi UUID v4 toqquşma ehtimalı cüzi dərəcədə kiçikdir — təxminən 5,3 × 10^−37. Nümunələrdən UUID kopyalamaq əvəzinə təsadüfi UUID generatorundan istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun