Characteristic ay ang pangunahing yunit ng data sa Bluetooth Low Energy kung saan ang Central ay tumatanggap o nagsusulat ng impormasyon sa isang peripheral na aparato. Ang bawat Characteristic ay kabilang sa isang tiyak na serbisyo ng GATT, may natatanging UUID at set ng mga katangian (read, write, notify, indicate) na tumutukoy sa mga posibleng operasyon. Ayon sa Bluetooth Core Specification 5.4 (2023), ang Bluetooth SIG ay nag-espesipika ng higit sa 500 karaniwang mga karakteristika para sa medikal, fitness, at industrial na mga aparato. Ang developer ay gumagawa ng custom na mga karakteristika para sa paglilipat ng anumang data ng user — mula sa pagbasa ng sensor hanggang sa mga utos ng kontrol ng aparato.
Mga Pangunahing Punto
Characteristic ay isang katangian ng GATT protocol na naglalaman ng halaga (value) at metadata. Sa arkitektura ng BLE, ang data ay hindi direktang inililipat sa pagitan ng mga aparato, kundi sa pamamagitan ng pagbasa at pagsulat ng mga halaga ng mga karakteristika ng serbisyo. Kung ang serbisyo ay isang folder, ang Characteristic ay isang file sa loob ng folder na iyon.
Ang bawat Characteristic ay binubuo ng tatlong bahagi: deklarasyon (declaration), halaga (value) at mga descriptor (descriptors). Ang deklarasyon ay naglalaman ng UUID ng karakteristika at mga katangian nito. Ang halaga ay ang aktwal na data na inililipat sa pagitan ng Central at Peripheral. Ang mga descriptor ay nagbibigay ng karagdagang konpigurasyon.
Ayon sa Bluetooth Core Specification 5.4 (2023), lahat ng palitan ng data sa BLE ay nagaganap sa pamamagitan ng mga operasyon sa mga karakteristika. Kahit ang karaniwang mga profile tulad ng Heart Rate Profile o Battery Service ay binuo sa isang set ng mga karakteristika na may paunang natukoy na mga UUID. Tinitiyak nito ang kompatibilidad ng mga aparato mula sa iba't ibang mga tagagawa nang walang paunang konpigurasyon.
Mahalaga para sa developer na maunawaan: ang bawat Characteristic ay maaaring sumuporta ng iba't ibang kombinasyon ng mga katangian. Ang isang karakteristika ay maaaring para sa pagbasa lamang, ang isa pa — para sa pagsulat, ang pangatlo — para sa mga notipikasyon. Ang tamang pagpili ng mga katangian ay tumutukoy sa senaryo ng paggamit at konsumo ng enerhiya ng aparato.
Mga katangian (properties) ng karakteristika ay tumutukoy kung anong mga operasyon ang pinapayagan dito. Ito ay isang byte mask, kung saan ang bawat bit ay nag-a-activate o nag-de-deactivate ng isang tiyak na operasyon. Nasa ibaba ang mga pangunahing katangian.
| Katangian | Bit | Paglalarawan | Karaniwang Gamit |
|---|---|---|---|
| Read | 0x02 | Maaaring basahin ng Central ang kasalukuyang halaga | Status, antas ng baterya, konpigurasyon |
| Write | 0x08 | Maaaring magsulat ang Central ng bagong halaga | Mga utos ng kontrol, mga setting |
| Notify | 0x10 | Nagpapadala ang Peripheral ng halaga nang walang kumpirmasyon | Data ng stream (pulso, temperatura) |
| Indicate | 0x20 | Nagpapadala ang Peripheral ng halaga na may kumpirmasyon | Kritikal na data (alarma, mga status) |
| Write Without Response | 0x04 | Pagsulat nang hindi naghihintay ng kumpirmasyon mula sa server | Mabilis na paglipat ng utos |
Mga pahintulot (permissions) ay antas ng access sa antas ng GATT server. Hindi tulad ng mga katangian na idinedeklara sa deklarasyon ng karakteristika, ang mga pahintulot ay sinusuri sa bawat operasyon. Maaari silang magsama ng mga kinakailangan sa encryption at autentikasyon.
Bluetooth SIG ay nag-espesipika ng higit sa 500 karaniwang mga karakteristika na sumasaklaw sa karamihan ng mga karaniwang senaryo ng paggamit ng BLE. Ang paggamit ng karaniwang mga UUID ay tinitiyak na ang anumang tumatanggap na aparato ay wastong mag-i-interpret ng data nang walang paunang konpigurasyon.
Narito ang mga pinakamadalas gamitin na karaniwang mga karakteristika:
| UUID | Pangalan | Uri ng Data | Serbisyo |
|---|---|---|---|
| 0x2A19 | Battery Level | uint8 (0–100%) | Battery Service |
| 0x2A37 | Heart Rate Measurement | uint8 + mga flag | Heart Rate |
| 0x2A6E | Temperature | int16 (0.01°C) | Environmental Sensing |
| 0x2A6F | Humidity | uint16 (0.01%) | Environmental Sensing |
| 0x2A00 | Device Name | UTF-8 string | Generic Access |
| 0x2A01 | Appearance | uint16 | Generic Access |
Kung ang isang umiiral na karaniwang karakteristika ay sumasaklaw sa iyong gawain — gamitin ito. Ito ay nagpapadali sa sertipikasyon ng Bluetooth at nagpapataas ng kompatibilidad sa ecosystem. Gumawa ng custom na mga karakteristika lamang para sa natatanging data na wala sa rehistro ng SIG.
Ang paggawa ng karakteristika ay ginagawa sa panig ng Peripheral — ang aparato na nagbibigay ng data. Tingnan natin ang implementasyon sa iOS (Swift) at Android (Java).
Ang Core Bluetooth ay nagbibigay ng klase na CBMutableCharacteristic para sa paggawa ng karakteristika na may pagtukoy ng UUID, mga katangian at paunang halaga.
import CoreBluetooth
let characteristicUUID = CBUUID("2A19") // Karakteristika ng antas ng baterya
let characteristic = CBMutableCharacteristic(
type: characteristicUUID,
properties: [.read, .notify],
value: nil,
permissions: [.readable]
)
// I-update ang halaga kapag nagbago
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
batteryData,
for: characteristic,
onSubscribedCentrals: nil
)
Sa Android, ang karakteristika ay ginagawa sa pamamagitan ng BluetoothGattCharacteristic na may pagtukoy ng UUID, mga katangian at pahintulot.
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
);
// Itakda ang halaga
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);
Mga operasyon sa Characteristic ay nahahati sa tatlong uri: pagbasa (read), pagsulat (write) at mga notipikasyon (notify/indicate). Ang pagpili ng operasyon ay depende sa senaryo: ang data kapag hiniling ay binabasa, ang mga utos ay isinusulat, ang data ng stream ay nagsu-subscribe sa mga notipikasyon.
Read — Nagpapadala ang Central ng kahilingan na basahin ang halaga ng karakteristika. Ang Peripheral ay tumutugon sa kasalukuyang halaga. Ang operasyon ay sabay-sabay at nangangailangan ng malinaw na kahilingan mula sa magkabilang panig. Ginagamit para sa data na bihirang magbago: bersyon ng firmware, serial number, mga setting.
Write — Nagpapadala ang Central ng data sa Peripheral. May dalawang mode: Write with Response (kumpirmasyon mula sa Peripheral) at Write Without Response (walang kumpirmasyon). Write with Response ay ginagarantiyahan ang paghahatid — nagpapadala ang Peripheral ng kumpirmasyon pagkatapos ng pagsulat. Ang Write Without Response ay mas mabilis, ngunit hindi ginagarantiyahan ang paghahatid.
Notify at Indicate — Sinisimulan ng Peripheral ang pagpapadala ng data sa Central. Sa Notify, ang data ay ipinapadala nang walang kumpirmasyon — kung hindi nakuha ng Central ang packet, ito ay nawawala. Sa Indicate, ang Central ay nagpapadala ng kumpirmasyon (sa antas PDU), na ginagarantiyahan ang paghahatid. Ang Indicate ay mas mabagal, ngunit mas maaasahan. Para mag-subscribe sa mga notipikasyon, ang Central ay nagsusulat ng halaga na 0x0001 sa CCCD (Client Characteristic Configuration Descriptor).
MTU (Maximum Transmission Unit) ay tumutukoy sa maximum na laki ng isang BLE data packet. Bilang default, ang MTU ay 23 byte, kung saan 3 byte ang header — ang kapaki-pakinabang na karga (ATT payload) ay 20 byte. Ito ay sapat para sa karamihan ng data ng sensor, ngunit hindi sapat para sa paglilipat ng mga file o malalaking konpigurasyon.
Ang Bluetooth Core Specification 5.4 ay sumusuporta sa negosasyon ng MTU (MTU negotiation) — ang Central at Peripheral ay maaaring magkasundo sa mas malaking laki ng packet hanggang 517 byte. Ang proseso ay ganito: ang Central ay nagpapadala ng kahilingan sa MTU Exchange na may proposal ng kanyang MTU; ang Peripheral ay tumutugon sa kanyang MTU; ang mas maliit na halaga sa dalawa ang ginagamit.
// Humihingi ang iOS ng MTU kapag kumokonekta
// Ang maximum na MTU sa iOS ay 185 byte
func peripheral(
_ peripheral: CBPeripheral,
didDiscoverServices error: Error?
) {
// Humiling ng MTU para sa tiyak na peripheral
peripheral.maximumWriteValueLength(for: .withResponse)
}
Ayon sa Bluetooth SIG (2023), ang pagtaas ng MTU mula 23 hanggang 185 byte ay nagbabawas ng overhead ng paglipat ng data hanggang 80% dahil sa pagbawas ng bilang ng mga packet. Para sa mga application na nagpapadala ng mga pagbasa na may mataas na frequency (hal. ECG o accelerometer), ang pagtaas ng MTU ay kritikal para sa katatagan ng stream.
Mga Madalas Itanong
Ang BLE specification ay hindi naglilimita sa bilang ng mga karakteristika sa isang serbisyo. Sa praktika, ang limitasyon ay tinutukoy ng available na memorya ng GATT server at mga kinakailangan sa pagganap. Para sa mga naka-embed na aparato, inirerekomenda ang hindi hihigit sa 10–15 karakteristika bawat serbisyo.
Notify ay nagpapadala ng data nang walang kumpirmasyon — ang packet ay maaaring mawala nang walang abiso sa nagpadala. Ang Indicate ay nangangailangan ng kumpirmasyon (ACK) sa antas ng protocol, na ginagarantiyahan ang paghahatid. Ang Indicate ay mas mabagal, ngunit mas maaasahan. Para sa kritikal na data (alarma, mga utos) gamitin ang Indicate.
Oo, ang isang karakteristika ay maaaring magkaroon ng kombinasyon ng mga katangian. Halimbawa, ang isang karakteristika ng mga setting ay maaaring sumuporta sa Read (pagbasa ng kasalukuyang halaga) at Write (pagbabago ng setting). Pagsamahin ang mga katangian ayon sa iyong senaryo ng paggamit.
Gamitin ang negosasyon ng MTU para taasan ang laki ng packet sa 185–517 byte. Kung ang data ay masyadong malaki pa rin — magpatupad ng fragmentation sa antas ng application: hatiin ang data sa ilang sunod-sunod na mga kahilingan na may kontrol ng integridad.
Kung ang iyong gawain ay sakop ng isang karaniwang karakteristika — gamitin ang UUID mula sa rehistro ng Bluetooth SIG. Ito ay nagpapadali sa sertipikasyon at tinitiyak ang kompatibilidad sa ecosystem. Gumawa ng custom na mga UUID lamang para sa natatanging data ng mga third-party na tagagawa.
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