Characteristic: ano ito, mga uri ng data at pagbasa ng mga halaga

May-akda: IT Sectr Nai-publish: 2026-07-15 Oras ng pagbabasa: 7 min

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 punto ng data sa loob ng serbisyo ng GATT BLE, na may UUID, mga katangian at halaga ng isang tiyak na uri.
  • Ang mga katangian ay tumutukoy sa mga operasyon na available: read (pagbasa), write (pagsulat), notify (notipikasyon), indicate (kumpirmadong notipikasyon).
  • Ang karaniwang mga karakteristika (battery level, heart rate) ay may 16-bit na UUID mula sa rehistro ng Bluetooth SIG.
  • Ang bawat Characteristic ay maaaring maglaman ng mga descriptor — metadata na naglalarawan ng mga yunit ng pagsukat o konpigurasyon ng notipikasyon.
  • Ang maximum na laki ng isang packet ng data sa pamamagitan ng Characteristic ay 20 byte (MTU 23) o hanggang 244 byte kapag dinagdagan ang MTU.

Ano ang Characteristic sa BLE?

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 at Pahintulot ng Characteristic

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.

KatangianBitPaglalarawanKaraniwang Gamit
Read0x02Maaaring basahin ng Central ang kasalukuyang halagaStatus, antas ng baterya, konpigurasyon
Write0x08Maaaring magsulat ang Central ng bagong halagaMga utos ng kontrol, mga setting
Notify0x10Nagpapadala ang Peripheral ng halaga nang walang kumpirmasyonData ng stream (pulso, temperatura)
Indicate0x20Nagpapadala ang Peripheral ng halaga na may kumpirmasyonKritikal na data (alarma, mga status)
Write Without Response0x04Pagsulat nang hindi naghihintay ng kumpirmasyon mula sa serverMabilis 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.

Karaniwang mga Karakteristika ng Bluetooth SIG

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:

UUIDPangalanUri ng DataSerbisyo
0x2A19Battery Leveluint8 (0–100%)Battery Service
0x2A37Heart Rate Measurementuint8 + mga flagHeart Rate
0x2A6ETemperatureint16 (0.01°C)Environmental Sensing
0x2A6FHumidityuint16 (0.01%)Environmental Sensing
0x2A00Device NameUTF-8 stringGeneric Access
0x2A01Appearanceuint16Generic 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.

Paano Gumawa ng Characteristic sa iOS at Android

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).

iOS: CBMutableCharacteristic

Ang Core Bluetooth ay nagbibigay ng klase na CBMutableCharacteristic para sa paggawa ng karakteristika na may pagtukoy ng UUID, mga katangian at paunang halaga.

swift
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
)

Android: BluetoothGattCharacteristic

Sa Android, ang karakteristika ay ginagawa sa pamamagitan ng BluetoothGattCharacteristic na may pagtukoy ng UUID, mga katangian at pahintulot.

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
    );

// Itakda ang halaga
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Pagbasa, Pagsulat at mga Notipikasyon

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 at Laki ng Inilipat na Data

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.

swift
// 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

Ilang karakteristika ang maaaring maglaman ng isang serbisyo?

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.

Ano ang pagkakaiba ng Notify at Indicate?

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.

Maaari bang magkaroon ng sabay na Read at Write ang isang karakteristika?

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.

Paano maglipat ng data na mas malaki sa 20 byte sa pamamagitan ng BLE?

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.

Kailangan bang gumamit ng karaniwang mga UUID ng karakteristika?

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

  • Characteristic ay ang pangunahing mekanismo ng paglipat ng data sa BLE, na kumakatawan sa isang halaga na may UUID, mga katangian at mga descriptor.
  • Ang mga katangian (Read, Write, Notify, Indicate) ay tumutukoy kung anong mga operasyon ang available sa karakteristika.
  • Ang Bluetooth SIG ay nag-espesipika ng higit sa 500 karaniwang mga karakteristika — gamitin ang mga ito para sa kompatibilidad ng aparato.
  • Ang paggawa ng karakteristika ay ginagawa sa panig ng Peripheral sa pamamagitan ng Core Bluetooth (iOS) o BluetoothGattCharacteristic (Android).
  • Ang mga notipikasyon (Notify/Indicate) ay mas mahusay kaysa sa regular na polling para sa data ng stream — hindi sila nangangailangan ng patuloy na mga kahilingan mula sa Central.
  • Ang laki ng isang packet ay limitado ng MTU (20 byte bilang default), ngunit maaaring itaas hanggang 517 byte sa pamamagitan ng MTU Exchange.
  • Ang tamang pagpili ng mga katangian at UUID ng karakteristika ay tumutukoy sa konsumo ng enerhiya, pagiging maaasahan at pagganap ng koneksyon ng BLE.

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.

Pag-usapan ang proyekto

Basahin din