Service UUID — adalah pengenal unik 16 atau 128 bit Bluetooth Low Energy (BLE) yang secara jelas mendefinisikan layanan fungsional pada perangkat. Bluetooth SIG telah mengalokasikan UUID 16 bit standar untuk layanan umum seperti Battery Service (0x180F), Device Information (0x180A), dan Heart Rate (0x180D), yang menyederhanakan kompatibilitas lintas platform. Menurut Bluetooth Core Specification 5.4 (2023), layanan kustom pengembang pihak ketiga wajib menggunakan UUID 128 bit, yang formatnya menjamin keunikan global tanpa registri pusat. Deklarasi Service UUID yang benar adalah langkah pertama menuju pengoperasian server GATT yang benar pada perangkat periferal.
Poin utama
Service UUID — adalah pengenal yang ditetapkan ke layanan GATT Bluetooth Low Energy untuk pengenalan unik oleh perangkat lain. Dalam arsitektur BLE, setiap layanan mewakili kelompok karakteristik logis yang disatukan oleh fungsi umum. Misalnya, layanan Battery Service berisi karakteristik Battery Level, yang mengirimkan tingkat pengisian baterai saat ini.
Bluetooth SIG (Special Interest Group) mengelola registri UUID 16 bit standar yang ditetapkan ke layanan yang paling umum. Ini memungkinkan perangkat dari berbagai produsen untuk mengenali layanan satu sama lain tanpa konfigurasi awal. Pelacak kebugaran merek apa pun dapat mendeklarasikan Heart Rate Service dengan UUID 0x180D, dan ponsel cerdas mana pun akan memahami bahwa itu adalah layanan detak jantung.
Menurut Bluetooth Core Specification 5.4 (2023), rentang UUID 16 bit (0x0000–0xFFFF) dibagi menjadi dua bagian: dari 0x0001 hingga 0xFFFE — layanan standar Bluetooth SIG, dan 0xFFFF dicadangkan. Jika pengembang membutuhkan layanan unik yang tidak ada di registri SIG, ia menggunakan UUID 128 bit.
Perbedaan antara UUID standar dan kustom tidak hanya dalam panjang: UUID 16 bit menghemat waktu transmisi paket iklan, karena ditransmisikan sebagai 2 byte, bukan 16 byte. Untuk perangkat dengan batasan ketat pada ukuran paket advertising (hingga 31 byte), ini sangat penting.
UUID 16 bit standar mencakup kategori utama perangkat BLE: sensor medis, pelacak kebugaran, elektronik yang dapat dikenakan, dan aksesori. Jika perangkat mengimplementasikan fungsi standar — pengembang disarankan untuk menggunakan UUID yang sesuai dari registri Bluetooth SIG untuk kompatibilitas maksimum.
Berikut adalah beberapa contoh UUID layanan standar:
| UUID (hex) | Nama layanan | Tujuan |
|---|---|---|
| 0x1800 | Generic Access | Manajemen akses, nama perangkat, tampilan luar |
| 0x180A | Device Information | Produsen, model, nomor seri, versi perangkat lunak |
| 0x180D | Heart Rate | Pengukuran denyut nadi, lokasi sensor, daya baterai |
| 0x180F | Battery Service | Tingkat pengisian baterai dalam persen |
| 0x181A | Environmental Sensing | Suhu, kelembaban, tekanan, pencahayaan |
| 0x181C | User Data | Usia, berat, tinggi, jenis kelamin, denyut nadi istirahat |
UUID 128 bit kustom diperlukan ketika perangkat menyediakan fungsionalitas unik. Misalnya, produsen kunci pintar membuat layanan Lock Control sendiri dengan UUID berbentuk XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. UUID semacam itu menjamin tidak akan bertentangan dengan layanan lain, karena ruang nilai 128 bit praktis tidak habis.
UUID 128 bit ditulis dalam format UUID standar RFC 4122: delapan karakter heksadesimal, tanda hubung, empat, tanda hubung, empat, tanda hubung, empat, tanda hubung, dua belas karakter. Untuk BLE, digunakan versi di mana bagian dasar UUID Bluetooth SIG memiliki bit tetap.
Bluetooth SIG mendefinisikan UUID dasar: 0000XXXX-0000-1000-8000-00805F9B34FB. Untuk layanan 16 bit standar, nilai UUID dimasukkan ke dalam mask ini: misalnya, 0x180F menjadi 0000180F-0000-1000-8000-00805F9B34FB. Layanan kustom menggunakan UUID yang sepenuhnya independen, dihasilkan oleh pengembang.
Saat membuat UUID kustom, Anda dapat menggunakan generator UUID apa pun (UUID v4). UUID v4 acak menyediakan 122 bit entropi, yang membuat tabrakan praktis tidak mungkin. Jangan gunakan versi modifikasi dari UUID dasar Bluetooth SIG untuk layanan kustom — ini melanggar spesifikasi.
Deklarasi layanan dengan UUID dilakukan di sisi Peripheral saat membuat server GATT. Di iOS, Core Bluetooth digunakan untuk ini, di Android — android.bluetooth.le. Mari kita bahas kedua pendekatan.
Di Swift, layanan dibuat melalui CBMutableService dengan menentukan UUID, setelah itu karakteristik ditambahkan melalui CBMutableCharacteristic.
import CoreBluetooth
// UUID 16 bit standar
let batteryServiceUUID = CBUUID("180F")
// UUID 128 bit kustom
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")
let service = CBMutableService(
type: customServiceUUID,
primary: true
)
// Tambahkan karakteristik
service.characteristics = [characteristic]
// Publikasikan layanan melalui peripheralManager
peripheralManager.add(service)
Di Android, layanan didaftarkan melalui BluetoothGattServer dan BluetoothGattService. UUID diteruskan sebagai string di java.util.UUID.fromString.
import android.bluetooth.*;
// UUID layanan kustom
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
);
// Tambahkan karakteristik
service.addCharacteristic(characteristic);
// Daftarkan di server GATT
gattServer.addService(service);
Pemindaian berdasarkan Service UUID memungkinkan Central menemukan perangkat yang menyediakan layanan yang diperlukan tanpa terhubung ke semua Peripheral yang terdeteksi. Paket iklan BLE dapat berisi daftar UUID layanan, yang memungkinkan Central menyaring perangkat pada tahap pemindaian.
Di iOS, CBCentralManager memindai perangkat dengan filter berdasarkan UUID layanan. Ini mengurangi konsumsi daya dan mempercepat deteksi perangkat yang diperlukan.
import CoreBluetooth
let centralManager = CBCentralManager()
func scanForHeartRateMonitor() {
let services: [CBUUID] = [
CBUUID("180D") // Heart Rate Service
]
centralManager.scanForPeripherals(
withServices: services,
options: nil
)
}
// Delegate hanya menerima perangkat Heart Rate Service
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// peripheral hanya memiliki perangkat dengan UUID 0x180D
}
Di Android, penyaringan berdasarkan UUID juga didukung melalui ScanFilter.Builder. Ini adalah cara efektif untuk mempersempit lingkaran pencarian tanpa terhubung ke setiap perangkat.
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
);
Satu perangkat BLE dapat mendeklarasikan beberapa layanan secara bersamaan. Misalnya, gelang kebugaran dapat berisi Battery Service (0x180F), Heart Rate Service (0x180D), dan layanan kustom untuk sinkronisasi data dengan cloud. Setiap layanan memiliki UUID sendiri dan kumpulan karakteristiknya sendiri.
Dengan banyak layanan, penting untuk mempertimbangkan batasan paket iklan. Paket iklan BLE dapat berisi hingga 31 byte data. Jika UUID layanan memakan terlalu banyak ruang, beberapa di antaranya mungkin tidak muat dalam paket iklan. Dalam hal ini, scan response digunakan — paket kedua yang dikirim atas permintaan Central.
Menurut Bluetooth Core Specification 5.4 (2023), jumlah maksimum layanan primer pada satu server GATT tidak dibatasi oleh spesifikasi, tetapi dalam praktiknya dibatasi oleh memori perangkat dan persyaratan kinerja. Untuk perangkat tertanam dengan memori flash 256 KB, disarankan tidak lebih dari 5–10 layanan.
Pertanyaan yang sering diajukan
UUID 16 bit dicadangkan oleh Bluetooth SIG untuk layanan standar dan memakan 2 byte dalam paket iklan. UUID 128 bit digunakan untuk layanan kustom dan memakan 16 byte. Pilihan tergantung pada jenis layanan: fungsionalitas standar menggunakan UUID 16 bit, yang unik menggunakan UUID 128 bit.
Gunakan UUID v4 — UUID acak yang dihasilkan oleh alat online, perintah terminal uuidgen, atau API bahasa pemrograman Anda. Contoh: UUID.fromString(UUID.randomUUID().toString()) di Java atau UUID() di Swift.
Tidak, pendaftaran tidak diperlukan. Bluetooth SIG hanya mendaftarkan UUID 16 bit. UUID 128 bit kustom dihasilkan secara mandiri oleh pengembang dan menjamin keunikan berkat ruang alamat yang sangat besar (2^128 kombinasi).
Ya, layanan GATT standar dapat berisi jumlah karakteristik yang tidak terbatas. Misalnya, Battery Service dapat berisi Battery Level (0x2A19) dan Battery Power State (0x2A1A). Setiap karakteristik memiliki UUID dan kumpulan propertinya sendiri.
Jika UUID cocok, Central tidak akan dapat membedakan satu layanan dari yang lain tanpa informasi tambahan. Kemungkinan tabrakan UUID v4 acak sangat kecil — sekitar 5,3 × 10^−37. Gunakan generator UUID acak, jangan menyalin UUID dari contoh.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga