Characteristic: шта је то, типови података и читање вредности

Аутор: IT Sectr Објављено: 2026-07-15 Време читања: 7 мин

Characteristic је фундаментална јединица података у Bluetooth Low Energy, преко које Central прима или уписује информације на периферном уређају. Свака Characteristic припада одређеном GATT сервису, има јединствени UUID и скуп својстава (read, write, notify, indicate) који дефинишу могуће операције. Према Bluetooth Core Specification 5.4 (2023), Bluetooth SIG је специфицирао преко 500 стандардних карактеристика за медицинске, фитнес и индустријске уређаје. Програмер креира прилагођене карактеристике за пренос било којих корисничких података — од очитавања сензора до команди за управљање уређајем.

Главно

  • Characteristic — тачка података унутар GATT сервиса BLE, која има UUID, својства и вредност одређеног типа.
  • Својства дефинишу доступне операције: read (читање), write (упис), notify (обавештење), indicate (потврђено обавештење).
  • Стандардне карактеристике (battery level, heart rate) имају 16-битне UUID из регистра Bluetooth SIG.
  • Свака Characteristic може садржати дескрипторе — метаподатке који описују мерне јединице или конфигурацију обавештења.
  • Максимална величина једног пакета података кроз Characteristic износи 20 бајтова (MTU 23) или до 244 бајта при повећању MTU.

Шта је Characteristic у BLE?

Characteristic је атрибут GATT протокола који садржи вредност (value) и метаподатке. У BLE архитектури подаци се не преносе директно између уређаја, већ кроз читање и упис вредности карактеристика сервиса. Ако је сервис фасцикла, онда је Characteristic датотека унутар те фасцикле.

Свака Characteristic се састоји од три компоненте: декларације (declaration), вредности (value) и дескриптора (descriptors). Декларација садржи UUID карактеристике и њена својства. Вредност су сами подаци који се преносе између Central и Peripheral. Дескриптори пружају додатну конфигурацију.

Према Bluetooth Core Specification 5.4 (2023), све размене података у BLE се одвијају кроз операције над карактеристикама. Чак и стандардни профили, као што су Heart Rate Profile или Battery Service, изграђени су на скупу карактеристика са унапред дефинисаним UUID-овима. Ово обезбеђује компатибилност уређаја различитих произвођача без претходне конфигурације.

Програмеру је важно да разуме: свака Characteristic може подржавати различите комбинације својстава. Једна карактеристика може бити само за читање, друга — за упис, трећа — за обавештења. Правилан избор својстава одређује сценарио коришћења и потрошњу енергије уређаја.

Својства и дозволе Characteristic

Својства (properties) карактеристике дефинишу које операције су над њом дозвољене. То је бајтовска маска, где сваки бит укључује или искључује одређену операцију. Испод су наведена главна својства.

СвојствоБитОписТипична примена
Read0x02Central може читати тренутну вредностСтатус, ниво батерије, конфигурација
Write0x08Central може уписати нову вредностКоманде управљања, подешавања
Notify0x10Peripheral шаље вредност без потврдеПодаци у току (пулс, температура)
Indicate0x20Peripheral шаље вредност са потврдомКритични подаци (аларми, статуси)
Write Without Response0x04Упис без чекања потврде од сервераБрзи пренос команди

Дозволе (permissions) су ниво приступа на нивоу GATT сервера. За разлику од својстава која се декларишу у декларацији карактеристике, дозволе се проверавају при свакој операцији. Оне могу укључивати захтеве за шифровање и аутентификацију.

Стандардне карактеристике Bluetooth SIG

Bluetooth SIG је специфицирао преко 500 стандардних карактеристика које покривају већину уобичајених сценарија коришћења BLE. Коришћење стандардних UUID-ова гарантује да ће сваки пријемни уређај правилно интерпретирати податке без претходне конфигурације.

Ево најчешће коришћених стандардних карактеристика:

UUIDНазивТип податакаСервис
0x2A19Battery Leveluint8 (0–100%)Battery Service
0x2A37Heart Rate Measurementuint8 + заставицеHeart Rate
0x2A6ETemperatureint16 (0.01°C)Environmental Sensing
0x2A6FHumidityuint16 (0.01%)Environmental Sensing
0x2A00Device NameUTF-8 stringGeneric Access
0x2A01Appearanceuint16Generic Access

Ако постојећа стандардна карактеристика покрива ваш задатак — користите је. То поједностављује сертификацију Bluetooth и повећава компатибилност са екосистемом. Прилагођене карактеристике креирајте само за јединствене податке који не постоје у SIG регистру.

Како креирати Characteristic у iOS и Android

Креирање карактеристике се обавља на страни Peripheral — уређаја који пружа податке. Размотримо имплементацију на iOS (Swift) и Android (Java).

iOS: CBMutableCharacteristic

Core Bluetooth пружа класу CBMutableCharacteristic за креирање карактеристике са навођењем UUID-а, својстава и почетне вредности.

swift
import CoreBluetooth

let characteristicUUID = CBUUID("2A19") // Карактеристика нивоа батерије

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

// Ажурирај вредност при промени
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
    batteryData,
    for: characteristic,
    onSubscribedCentrals: nil
)

Android: BluetoothGattCharacteristic

На Android-у, карактеристика се креира кроз BluetoothGattCharacteristic са навођењем UUID-а, својстава и дозвола.

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

// Постави вредност
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Читање, упис и обавештења

Операције над Characteristic се деле на три типа: читање (read), упис (write) и обавештења (notify/indicate). Избор операције зависи од сценарија: подаци на захтев се читају, команде се уписују, подаци у току се претплаћују на обавештења.

Read — Central шаље захтев за читање вредности карактеристике. Peripheral одговара тренутном вредношћу. Операција је синхрона и захтева експлицитан захтев са обе стране. Користи се за податке који се ретко мењају: верзија фирмвера, серијски број, подешавања.

Write — Central шаље податке на Peripheral. Постоје два режима: Write with Response (потврда од Peripheral) и Write Without Response (без потврде). Write with Response гарантује доставу — Peripheral шаље потврду након уписа. Write Without Response је бржи, али не гарантује доставу.

Notify и Indicate — Peripheral покреће слање података ка Central. Код Notify подаци се шаљу без потврде — ако Central није стигао да прими пакет, он се губи. Код Indicate Central шаље потврду (на PDU нивоу), што гарантује доставу. Indicate је спорији, али поузданији. За претплату на обавештења, Central уписује вредност 0x0001 у CCCD (Client Characteristic Configuration Descriptor).

MTU и величина пренетих података

MTU (Maximum Transmission Unit) одређује максималну величину једног BLE пакета података. Подразумевано, MTU износи 23 бајта, од којих 3 бајта заузима заглавље — корисни терет (ATT payload) је 20 бајтова. Ово је довољно за већину сензорских података, али није довољно за пренос датотека или великих конфигурација.

Bluetooth Core Specification 5.4 подржава MTU преговарање (MTU negotiation) — Central и Peripheral могу договорити већу величину пакета до 517 бајтова. Процес изгледа овако: Central шаље захтев MTU Exchange са предлогом свог MTU; Peripheral одговара својим MTU; користи се мања од две вредности.

swift
// iOS захтева MTU при повезивању
// Максимални MTU у iOS-у је 185 бајтова
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverServices error: Error?
) {
    // Захтевај MTU за одређени периферни уређај
    peripheral.maximumWriteValueLength(for: .withResponse)
}

Према Bluetooth SIG (2023), повећање MTU са 23 на 185 бајтова смањује трошкове преноса података до 80% захваљујући смањењу броја пакета. За апликације које преносе очитавања високом фреквенцијом (нпр. ЕКГ или акцелерометар), повећање MTU је критично за стабилност тока.

Често постављана питања

Колико карактеристика може садржати један сервис?

BLE спецификација не ограничава број карактеристика у сервису. У пракси, ограничење је одређено доступном меморијом GATT сервера и захтевима за перформансе. За уграђене уређаје препоручује се не више од 10–15 карактеристика по сервису.

Која је разлика између Notify и Indicate?

Notify шаље податке без потврде — пакет може бити изгубљен без обавештења пошиљаоца. Indicate захтева потврду (ACK) на нивоу протокола, што гарантује доставу. Indicate је спорији, али поузданији. За критичне податке (аларми, команде) користите Indicate.

Може ли карактеристика имати истовремено Read и Write?

Да, карактеристика може имати комбинацију својстава. На пример, карактеристика подешавања може подржавати Read (читање тренутне вредности) и Write (промена подешавања). Комбинујте својства у складу са вашим сценаријом коришћења.

Како пренети податке веће од 20 бајтова кроз BLE?

Користите MTU преговарање за повећање величине пакета на 185–517 бајтова. Ако су подаци и даље превелики — имплементирајте фрагментацију на нивоу апликације: поделите податке на неколико узастопних захтева са контролом интегритета.

Да ли је потребно користити стандардне UUID карактеристика?

Ако је ваш задатак покривен стандардном карактеристиком — користите UUID из регистра Bluetooth SIG. Ово поједностављује сертификацију и обезбеђује компатибилност са екосистемом. Прилагођене UUID-ове креирајте само за јединствене податке произвођача трећих страна.

Закључак

  • Characteristic — основни механизам преноса података у BLE, који представља вредност са UUID-ом, својствима и дескрипторима.
  • Својства (Read, Write, Notify, Indicate) дефинишу које операције су доступне над карактеристиком.
  • Bluetooth SIG је специфицирао преко 500 стандардних карактеристика — користите их за компатибилност уређаја.
  • Креирање карактеристике се обавља на страни Peripheral кроз Core Bluetooth (iOS) или BluetoothGattCharacteristic (Android).
  • Обавештења (Notify/Indicate) су ефикаснија од редовног испитивања за податке у току — не захтевају сталне захтеве од Central.
  • Величина једног пакета је ограничена MTU (20 бајтова подразумевано), али се може повећати до 517 бајтова кроз MTU Exchange.
  • Правилан избор својстава и UUID карактеристике одређује потрошњу енергије, поузданост и перформансе BLE везе.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође