Characteristic: apa itu, tipe data dan membaca nilai

Penulis: IT Sectr Diterbitkan: 2026-07-15 Waktu membaca: 7 mnt

Characteristic adalah unit data fundamental dalam Bluetooth Low Energy yang digunakan Central untuk menerima atau menulis informasi pada perangkat periferal. Setiap Characteristic dimiliki oleh layanan GATT tertentu, memiliki UUID unik, dan serangkaian properti (read, write, notify, indicate) yang menentukan operasi yang mungkin dilakukan. Menurut Bluetooth Core Specification 5.4 (2023), Bluetooth SIG telah menspesifikasikan lebih dari 500 karakteristik standar untuk perangkat medis, kebugaran, dan industri. Pengembang membuat karakteristik kustom untuk mentransfer data pengguna apa pun — dari pembacaan sensor hingga perintah kontrol perangkat.

Poin Utama

  • Characteristic adalah titik data di dalam layanan GATT BLE, memiliki UUID, properti, dan nilai dari tipe tertentu.
  • Properti menentukan operasi yang tersedia: read (baca), write (tulis), notify (notifikasi), indicate (notifikasi terkonfirmasi).
  • Karakteristik standar (battery level, heart rate) memiliki UUID 16-bit dari registri Bluetooth SIG.
  • Setiap Characteristic dapat berisi deskriptor — metadata yang menjelaskan unit pengukuran atau konfigurasi notifikasi.
  • Ukuran maksimum satu paket data melalui Characteristic adalah 20 byte (MTU 23) atau hingga 244 byte saat MTU ditingkatkan.

Apa itu Characteristic di BLE?

Characteristic adalah atribut protokol GATT yang berisi nilai (value) dan metadata. Dalam arsitektur BLE, data tidak ditransfer secara langsung antar perangkat, melainkan melalui pembacaan dan penulisan nilai karakteristik layanan. Jika layanan adalah folder, maka Characteristic adalah file di dalam folder tersebut.

Setiap Characteristic terdiri dari tiga komponen: deklarasi (declaration), nilai (value), dan deskriptor (descriptors). Deklarasi berisi UUID karakteristik dan propertinya. Nilai adalah data aktual yang ditransfer antara Central dan Peripheral. Deskriptor menyediakan konfigurasi tambahan.

Menurut Bluetooth Core Specification 5.4 (2023), semua pertukaran data di BLE terjadi melalui operasi pada karakteristik. Bahkan profil standar seperti Heart Rate Profile atau Battery Service dibangun di atas serangkaian karakteristik dengan UUID yang telah ditentukan sebelumnya. Ini memastikan kompatibilitas perangkat dari berbagai produsen tanpa konfigurasi awal.

Penting bagi pengembang untuk memahami: setiap Characteristic dapat mendukung kombinasi properti yang berbeda. Satu karakteristik mungkin hanya baca, yang lain hanya tulis, dan yang ketiga untuk notifikasi. Pemilihan properti yang tepat menentukan skenario penggunaan dan konsumsi daya perangkat.

Properti dan Izin Characteristic

Properti (properties) karakteristik menentukan operasi apa yang diizinkan padanya. Ini adalah mask byte, di mana setiap bit mengaktifkan atau menonaktifkan operasi tertentu. Berikut adalah properti utama.

PropertiBitDeskripsiPenggunaan Umum
Read0x02Central dapat membaca nilai saat iniStatus, level baterai, konfigurasi
Write0x08Central dapat menulis nilai baruPerintah kontrol, pengaturan
Notify0x10Peripheral mengirim nilai tanpa konfirmasiData aliran (denyut nadi, suhu)
Indicate0x20Peripheral mengirim nilai dengan konfirmasiData kritis (alarm, status)
Write Without Response0x04Menulis tanpa menunggu konfirmasi dari serverTransmisi perintah kecepatan tinggi

Izin (permissions) adalah tingkat akses pada tingkat server GATT. Tidak seperti properti yang dideklarasikan dalam deklarasi karakteristik, izin diperiksa pada setiap operasi. Izin dapat mencakup persyaratan enkripsi dan autentikasi.

Karakteristik Standar Bluetooth SIG

Bluetooth SIG telah menspesifikasikan lebih dari 500 karakteristik standar yang mencakup sebagian besar skenario penggunaan BLE yang umum. Penggunaan UUID standar memastikan bahwa perangkat penerima mana pun akan menginterpretasikan data dengan benar tanpa konfigurasi awal.

Berikut adalah karakteristik standar yang paling sering digunakan:

UUIDNamaTipe DataLayanan
0x2A19Battery Leveluint8 (0–100%)Battery Service
0x2A37Heart Rate Measurementuint8 + benderaHeart Rate
0x2A6ETemperatureint16 (0.01°C)Environmental Sensing
0x2A6FHumidityuint16 (0.01%)Environmental Sensing
0x2A00Device NameUTF-8 stringGeneric Access
0x2A01Appearanceuint16Generic Access

Jika karakteristik standar yang ada mencakup tugas Anda — gunakanlah. Ini menyederhanakan sertifikasi Bluetooth dan meningkatkan kompatibilitas dengan ekosistem. Buat karakteristik kustom hanya untuk data unik yang tidak ada di registri SIG.

Cara Membuat Characteristic di iOS dan Android

Pembuatan karakteristik dilakukan di sisi Peripheral — perangkat yang menyediakan data. Mari kita lihat implementasi di iOS (Swift) dan Android (Java).

iOS: CBMutableCharacteristic

Core Bluetooth menyediakan kelas CBMutableCharacteristic untuk membuat karakteristik dengan menentukan UUID, properti, dan nilai awal.

swift
import CoreBluetooth

let characteristicUUID = CBUUID("2A19") // Karakteristik level baterai

let characteristic = CBMutableCharacteristic(
    type: characteristicUUID,
    properties: [.read, .notify],
    value: nil,
    permissions: [.readable]
)

// Perbarui nilai saat berubah
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
    batteryData,
    for: characteristic,
    onSubscribedCentrals: nil
)

Android: BluetoothGattCharacteristic

Di Android, karakteristik dibuat melalui BluetoothGattCharacteristic dengan menentukan UUID, properti, dan izin.

java
import android.bluetooth.*;

UUID charUuid = UUID.fromString("00002A19-0000-1000-8000-00805F9B34FB");

BluetoothGattCharacteristic characteristic =
    new BluetoothGattCharacteristic(
        charUuid,
        BluetoothGattCharacteristic.PROPERTY_READ
            | BluetoothGattCharacteristic.PROPERTY_NOTIFY,
        BluetoothGattCharacteristic.PERMISSION_READ
    );

// Atur nilai
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Baca, Tulis, dan Notifikasi

Operasi pada Characteristic dibagi menjadi tiga jenis: baca (read), tulis (write), dan notifikasi (notify/indicate). Pemilihan operasi tergantung pada skenario: data berdasarkan permintaan dibaca, perintah ditulis, data aliran berlangganan notifikasi.

Read — Central mengirim permintaan untuk membaca nilai karakteristik. Peripheral merespons dengan nilai saat ini. Operasi bersifat sinkron dan memerlukan permintaan eksplisit dari kedua sisi. Digunakan untuk data yang jarang berubah: versi firmware, nomor seri, pengaturan.

Write — Central mengirim data ke Peripheral. Ada dua mode: Write with Response (konfirmasi dari Peripheral) dan Write Without Response (tanpa konfirmasi). Write with Response menjamin pengiriman — Peripheral mengirim konfirmasi setelah penulisan. Write Without Response lebih cepat, tetapi tidak menjamin pengiriman.

Notify dan Indicate — Peripheral memulai pengiriman data ke Central. Pada Notify, data dikirim tanpa konfirmasi — jika Central tidak sempat menerima paket, data akan hilang. Pada Indicate, Central mengirim konfirmasi (di tingkat PDU), yang menjamin pengiriman. Indicate lebih lambat, tetapi lebih andal. Untuk berlangganan notifikasi, Central menulis nilai 0x0001 ke CCCD (Client Characteristic Configuration Descriptor).

MTU dan Ukuran Data yang Ditransfer

MTU (Maximum Transmission Unit) menentukan ukuran maksimum satu paket data BLE. Secara default, MTU adalah 23 byte, di mana 3 byte adalah header — muatan (ATT payload) adalah 20 byte. Ini cukup untuk sebagian besar data sensor, tetapi tidak cukup untuk mentransfer file atau konfigurasi besar.

Bluetooth Core Specification 5.4 mendukung negosiasi MTU (MTU negotiation) — Central dan Peripheral dapat menyetujui ukuran paket yang lebih besar hingga 517 byte. Prosesnya sebagai berikut: Central mengirim permintaan MTU Exchange dengan proposal MTU-nya; Peripheral merespons dengan MTU-nya; nilai terkecil dari keduanya digunakan.

swift
// iOS meminta MTU saat terhubung
// MTU maksimum di iOS adalah 185 byte
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverServices error: Error?
) {
    // Minta MTU untuk periferal tertentu
    peripheral.maximumWriteValueLength(for: .withResponse)
}

Menurut Bluetooth SIG (2023), peningkatan MTU dari 23 menjadi 185 byte mengurangi overhead transmisi data hingga 80% karena berkurangnya jumlah paket. Untuk aplikasi yang mentransmisikan pembacaan dengan frekuensi tinggi (misalnya, EKG atau akselerometer), peningkatan MTU sangat penting untuk stabilitas aliran.

Pertanyaan yang Sering Diajukan

Berapa banyak karakteristik yang dapat dimiliki satu layanan?

Spesifikasi BLE tidak membatasi jumlah karakteristik dalam suatu layanan. Dalam praktiknya, batasan ditentukan oleh memori yang tersedia dari server GATT dan persyaratan kinerja. Untuk perangkat tertanam, disarankan tidak lebih dari 10–15 karakteristik per layanan.

Apa perbedaan antara Notify dan Indicate?

Notify mengirim data tanpa konfirmasi — paket dapat hilang tanpa pemberitahuan kepada pengirim. Indicate memerlukan konfirmasi (ACK) di tingkat protokol, yang menjamin pengiriman. Indicate lebih lambat, tetapi lebih andal. Untuk data kritis (alarm, perintah) gunakan Indicate.

Bisakah karakteristik memiliki Read dan Write secara bersamaan?

Ya, karakteristik dapat memiliki kombinasi properti. Misalnya, karakteristik pengaturan dapat mendukung Read (membaca nilai saat ini) dan Write (mengubah pengaturan). Gabungkan properti sesuai dengan skenario penggunaan Anda.

Bagaimana cara mentransfer data lebih dari 20 byte melalui BLE?

Gunakan negosiasi MTU untuk meningkatkan ukuran paket menjadi 185–517 byte. Jika data masih terlalu besar — terapkan fragmentasi di tingkat aplikasi: bagi data menjadi beberapa permintaan berurutan dengan kontrol integritas.

Apakah perlu menggunakan UUID standar karakteristik?

Jika tugas Anda dicakup oleh karakteristik standar — gunakan UUID dari registri Bluetooth SIG. Ini menyederhanakan sertifikasi dan memastikan kompatibilitas dengan ekosistem. Buat UUID kustom hanya untuk data unik dari produsen pihak ketiga.

Kesimpulan

  • Characteristic adalah mekanisme transfer data utama di BLE, yang mewakili nilai dengan UUID, properti, dan deskriptor.
  • Properti (Read, Write, Notify, Indicate) menentukan operasi apa yang tersedia pada karakteristik.
  • Bluetooth SIG telah menspesifikasikan lebih dari 500 karakteristik standar — gunakan untuk kompatibilitas perangkat.
  • Pembuatan karakteristik dilakukan di sisi Peripheral melalui Core Bluetooth (iOS) atau BluetoothGattCharacteristic (Android).
  • Notifikasi (Notify/Indicate) lebih efisien daripada polling reguler untuk data aliran — tidak memerlukan permintaan konstan dari Central.
  • Ukuran satu paket dibatasi oleh MTU (20 byte default), tetapi dapat ditingkatkan hingga 517 byte melalui MTU Exchange.
  • Pemilihan properti dan UUID karakteristik yang tepat menentukan konsumsi daya, keandalan, dan kinerja koneksi BLE.

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.

Diskusikan proyek

Baca juga