Service UUID — ay isang natatanging 16 o 128 bit na identifier ng Bluetooth Low Energy (BLE) na hindi malinaw na tumutukoy sa isang functional na serbisyo sa isang device. Ang Bluetooth SIG ay naglaan ng standard na 16 bit na UUID para sa mga karaniwang serbisyo tulad ng Battery Service (0x180F), Device Information (0x180A) at Heart Rate (0x180D), na nagpapasimple ng cross-platform compatibility. Ayon sa Bluetooth Core Specification 5.4 (2023), ang mga custom na serbisyo ng third-party na developer ay kinakailangang gumamit ng 128 bit na UUID, na ang format ay ginagarantiyahan ang global uniqueness nang walang central registry. Ang tamang deklarasyon ng Service UUID ay ang unang hakbang patungo sa tamang operasyon ng GATT server sa peripheral device.
Mga pangunahing punto
Service UUID — ay isang identifier na itinalaga sa isang GATT na serbisyo ng Bluetooth Low Energy para sa natatanging pagkilala ng iba pang mga device. Sa arkitektura ng BLE, ang bawat serbisyo ay kumakatawan sa isang lohikal na grupo ng mga katangian na pinag-isa ng isang karaniwang function. Halimbawa, ang serbisyong Battery Service ay naglalaman ng katangiang Battery Level, na naghahatid ng kasalukuyang antas ng charge ng baterya.
Ang Bluetooth SIG (Special Interest Group) ay namamahala ng rehistro ng standard na 16 bit na UUID na itinalaga sa mga pinakakaraniwang serbisyo. Ito ay nagpapahintulot sa mga device mula sa iba't ibang mga manufacturer na makilala ang mga serbisyo ng bawat isa nang walang paunang configuration. Ang fitness tracker ng anumang brand ay maaaring magdeklara ng Heart Rate Service na may UUID 0x180D, at anumang smartphone ay mauunawaan na ito ay isang serbisyo ng tibok ng puso.
Ayon sa Bluetooth Core Specification 5.4 (2023), ang hanay ng 16 bit na UUID (0x0000–0xFFFF) ay nahahati sa dalawang bahagi: mula 0x0001 hanggang 0xFFFE — standard na serbisyo ng Bluetooth SIG, at 0xFFFF ay nakalaan. Kung ang isang developer ay nangangailangan ng isang natatanging serbisyo na wala sa rehistro ng SIG, gumagamit siya ng 128 bit na UUID.
Ang pagkakaiba sa pagitan ng standard at custom na UUID ay hindi lamang sa haba: ang 16 bit na UUID ay nakakatipid ng air time ng advertising packet, dahil ang mga ito ay ipinapadala bilang 2 bytes sa halip na 16 bytes. Para sa mga device na may mahigpit na limitasyon sa laki ng advertising packet (hanggang 31 bytes), ito ay kritikal.
Standard na 16 bit na UUID ay sumasaklaw sa mga pangunahing kategorya ng BLE device: medical sensor, fitness tracker, wearable electronics at accessories. Kung ang isang device ay nagpapatupad ng standard na function — ang developer ay inirerekomenda na gamitin ang kaukulang UUID mula sa Bluetooth SIG register para sa maximum na compatibility.
Narito ang ilang halimbawa ng standard na UUID ng serbisyo:
| UUID (hex) | Pangalan ng serbisyo | Layunin |
|---|---|---|
| 0x1800 | Generic Access | Pamamahala ng access, pangalan ng device, panlabas na anyo |
| 0x180A | Device Information | Manufacturer, modelo, serial number, bersyon ng software |
| 0x180D | Heart Rate | Pagsukat ng pulso, lokasyon ng sensor, enerhiya ng baterya |
| 0x180F | Battery Service | Antas ng charge ng baterya sa porsyento |
| 0x181A | Environmental Sensing | Temperatura, halumigmig, presyon, liwanag |
| 0x181C | User Data | Edad, timbang, taas, kasarian, pulso sa pagpapahinga |
Custom na 128 bit na UUID ay kinakailangan kapag ang device ay nagbibigay ng natatanging functionality. Halimbawa, ang manufacturer ng isang smart lock ay lumilikha ng sarili nitong serbisyo na Lock Control na may UUID na anyong XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Ang naturang UUID ay ginagarantiyang hindi makakasagutan sa iba pang mga serbisyo, dahil ang espasyo ng 128 bit na halaga ay praktikal na hindi mauubos.
128 bit na UUID ay isinusulat sa standard na format ng UUID RFC 4122: walong hexadecimal na karakter, gitling, apat, gitling, apat, gitling, apat, gitling, labindalawang karakter. Para sa BLE, ginagamit ang bersyon kung saan ang base na bahagi ng Bluetooth SIG UUID ay may fixed na bits.
Tinutukoy ng Bluetooth SIG ang base UUID: 0000XXXX-0000-1000-8000-00805F9B34FB. Para sa standard na 16 bit na serbisyo, ang halaga ng UUID ay inilalagay sa mask na ito: halimbawa, ang 0x180F ay nagiging 0000180F-0000-1000-8000-00805F9B34FB. Ang custom na serbisyo ay gumagamit ng ganap na independiyenteng UUID, na binuo ng developer.
Sa paggawa ng custom na UUID maaari kang gumamit ng anumang UUID generator (UUID v4). Ang random na UUID v4 ay nagbibigay ng 122 bits ng entropy, na ginagawang praktikal na imposible ang mga collision. Huwag gumamit ng binagong bersyon ng base Bluetooth SIG UUID para sa custom na serbisyo — ito ay lumalabag sa specifikasyon.
Deklarasyon ng serbisyo na may UUID ay ginagawa sa panig ng Peripheral kapag lumilikha ng GATT server. Sa iOS, ginagamit ang Core Bluetooth para dito, sa Android — android.bluetooth.le. Tingnan natin ang parehong approach.
Sa Swift, ang serbisyo ay nilikha sa pamamagitan ng CBMutableService na may pagtukoy ng UUID, pagkatapos nito ay idinaragdag ang mga katangian sa pamamagitan ng CBMutableCharacteristic.
import CoreBluetooth
// Standard na 16 bit na UUID
let batteryServiceUUID = CBUUID("180F")
// Custom na 128 bit na UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")
let service = CBMutableService(
type: customServiceUUID,
primary: true
)
// Magdagdag ng mga katangian
service.characteristics = [characteristic]
// I-publish ang serbisyo sa pamamagitan ng peripheralManager
peripheralManager.add(service)
Sa Android, ang serbisyo ay nirerehistro sa pamamagitan ng BluetoothGattServer at BluetoothGattService. Ang UUID ay ipinapasa bilang string sa java.util.UUID.fromString.
import android.bluetooth.*;
// Custom na UUID ng serbisyo
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
);
// Magdagdag ng mga katangian
service.addCharacteristic(characteristic);
// Magrehistro sa GATT server
gattServer.addService(service);
Pag-scan ayon sa Service UUID ay nagpapahintulot sa Central na mahanap ang mga device na nag-aalok ng kinakailangang serbisyo nang hindi kumokonekta sa lahat ng natuklasang Peripheral. Ang BLE advertising packet ay maaaring maglaman ng listahan ng mga UUID ng serbisyo, na nagpapahintulot sa Central na i-filter ang mga device sa yugto ng pag-scan.
Sa iOS, ang CBCentralManager ay nag-scan ng mga device na may filter ayon sa UUID ng serbisyo. Ito ay nagbabawas ng konsumo ng kuryente at nagpapabilis ng pagtuklas ng mga kinakailangang device.
import CoreBluetooth
let centralManager = CBCentralManager()
func scanForHeartRateMonitor() {
let services: [CBUUID] = [
CBUUID("180D") // Heart Rate Service
]
centralManager.scanForPeripherals(
withServices: services,
options: nil
)
}
// Delegate ay tumatanggap lamang ng Heart Rate Service device
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// peripheral ay mayroon lamang device na may UUID 0x180D
}
Sa Android, ang pag-filter ayon sa UUID ay sinusuportahan din sa pamamagitan ng ScanFilter.Builder. Ito ay isang epektibong paraan upang paliitin ang saklaw ng paghahanap nang hindi kumokonekta sa bawat device.
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
);
Isang BLE device ay maaaring magdeklara ng maramihang serbisyo nang sabay-sabay. Halimbawa, ang isang fitness bracelet ay maaaring maglaman ng Battery Service (0x180F), Heart Rate Service (0x180D) at isang custom na serbisyo para sa pag-sync ng data sa cloud. Bawat serbisyo ay may sariling UUID at sariling set ng mga katangian.
Sa maramihang serbisyo, mahalagang isaalang-alang ang limitasyon ng advertising packet. Ang BLE advertising packet ay maaaring maglaman ng hanggang 31 bytes ng data. Kung ang mga UUID ng serbisyo ay masyadong maraming espasyo, ang ilan sa mga ito ay maaaring hindi magkasya sa advertising packet. Sa kasong ito, ginagamit ang scan response — ang pangalawang packet na ipinapadala sa kahilingan ng Central.
Ayon sa Bluetooth Core Specification 5.4 (2023), ang maximum na bilang ng primary na serbisyo sa isang GATT server ay hindi limitado ng specifikasyon, ngunit sa praktika ay limitado ng memorya ng device at mga kinakailangan sa pagganap. Para sa mga embedded device na may 256 KB flash memory, inirerekomenda ang hindi hihigit sa 5–10 serbisyo.
Mga madalas itanong
16 bit na UUID ay nakalaan ng Bluetooth SIG para sa standard na serbisyo at sumasakop ng 2 bytes sa advertising packet. 128 bit na UUID ay ginagamit para sa custom na serbisyo at sumasakop ng 16 bytes. Ang pagpili ay depende sa uri ng serbisyo: standard functionality ay gumagamit ng 16 bit na UUID, unique — 128 bit na UUID.
Gumamit ng UUID v4 — isang random na UUID na binuo ng online tools, terminal command na uuidgen o API ng iyong programming language. Halimbawa: UUID.fromString(UUID.randomUUID().toString()) sa Java o UUID() sa Swift.
Hindi, hindi kinakailangan ang pagpaparehistro. Bluetooth SIG ay nagrerehistro lamang ng 16 bit na UUID. Ang custom na 128 bit na UUID ay binuo nang nakapag-iisa ng developer at ginagarantiyahan ang uniqueness dahil sa malawak na address space (2^128 combinations).
Oo, ang standard na GATT serbisyo ay maaaring maglaman ng walang limitasyong bilang ng mga katangian. Halimbawa, ang Battery Service ay maaaring maglaman ng Battery Level (0x2A19) at Battery Power State (0x2A1A). Bawat katangian ay may sariling UUID at set ng mga property.
Kung magkatugma ang UUID, hindi makikilala ng Central ang isang serbisyo mula sa isa pa nang walang karagdagang impormasyon. Ang posibilidad ng collision ng random na UUID v4 ay napakaliit — humigit-kumulang 5.3 × 10^−37. Gumamit ng random na UUID generator, huwag kopyahin ang UUID mula sa mga halimbawa.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din