Characteristic: mi ez, adattípusok és értékek olvasása

Szerző: IT Sectr Megjelenés: 2026-07-15 Olvasási idő: 7 perc

Characteristic az adatok alapvető egysége a Bluetooth Low Energy-ben, amelyen keresztül a Central információkat kap vagy ír egy perifériás eszközön. Minden Characteristic egy adott GATT-szolgáltatáshoz tartozik, egyedi UUID-vel és a lehetséges műveleteket meghatározó tulajdonságokkal (read, write, notify, indicate) rendelkezik. A Bluetooth Core Specification 5.4 (2023) szerint a Bluetooth SIG több mint 500 szabványos karakterisztikát specifikált orvosi, fitnesz és ipari eszközökhöz. A fejlesztő egyedi karakterisztikákat hoz létre bármilyen felhasználói adat továbbításához — az érzékelő leolvasásoktól az eszközvezérlő parancsokig.

Főbb pontok

  • Characteristic egy adatpont a BLE GATT-szolgáltatáson belül, UUID-vel, tulajdonságokkal és egy meghatározott típusú értékkel.
  • A tulajdonságok határozzák meg az elérhető műveleteket: read (olvasás), write (írás), notify (értesítés), indicate (megerősített értesítés).
  • A szabványos karakterisztikák (battery level, heart rate) 16 bites UUID-vel rendelkeznek a Bluetooth SIG nyilvántartásából.
  • Minden Characteristic tartalmazhat deszkriptorokat — metaadatokat, amelyek leírják a mértékegységeket vagy az értesítések konfigurációját.
  • Egy adatcsomag maximális mérete Characteristic-en keresztül 20 bájt (MTU 23) vagy akár 244 bájt az MTU növelésével.

Mi az a Characteristic a BLE-ben?

Characteristic a GATT protokoll egy attribútuma, amely egy értéket (value) és metaadatokat tartalmaz. A BLE architektúrában az adatok nem közvetlenül az eszközök között kerülnek továbbításra, hanem a szolgáltatás karakterisztikáinak értékeinek olvasásával és írásával. Ha a szolgáltatás egy mappa, akkor a Characteristic egy fájl azon a mappán belül.

Minden Characteristic három komponensből áll: deklaráció (declaration), érték (value) és deszkriptorok (descriptors). A deklaráció tartalmazza a karakterisztika UUID-jét és tulajdonságait. Az érték a tényleges adat, amely a Central és a Peripheral között kerül továbbításra. A deszkriptorok további konfigurációt biztosítanak.

A Bluetooth Core Specification 5.4 (2023) szerint a BLE-ben minden adatcsere a karakterisztikákon végzett műveleteken keresztül történik. Még a szabványos profilok, mint a Heart Rate Profile vagy a Battery Service, előre meghatározott UUID-vel rendelkező karakterisztikák halmazára épülnek. Ez biztosítja a különböző gyártók eszközeinek kompatibilitását előzetes konfiguráció nélkül.

A fejlesztő számára fontos megérteni: minden Characteristic támogathat különböző tulajdonságkombinációkat. Az egyik karakterisztika csak olvasható lehet, a másik csak írható, a harmadik értesítésekhez való. A tulajdonságok helyes megválasztása határozza meg a használati forgatókönyvet és az eszköz energiafogyasztását.

A Characteristic tulajdonságai és engedélyei

A karakterisztika tulajdonságai (properties) határozzák meg, hogy milyen műveletek engedélyezettek rajta. Ez egy bájtonszköz, ahol minden bit egy adott műveletet kapcsol be vagy ki. Az alábbiakban felsoroljuk a fő tulajdonságokat.

TulajdonságBitLeírásJellemző használat
Read0x02A Central olvashatja a jelenlegi értéketStátusz, akkumulátorszint, konfiguráció
Write0x08A Central írhat egy új értéketVezérlőparancsok, beállítások
Notify0x10A Peripheral megerősítés nélkül küld értéketAdatfolyam (pulzus, hőmérséklet)
Indicate0x20A Peripheral megerősítéssel küld értéketKritikus adatok (riasztások, státuszok)
Write Without Response0x04Írás a szerver megerősítésének várása nélkülGyors parancsátvitel

Az engedélyek (permissions) a GATT szerver szintjén lévő hozzáférési szint. Ellentétben a tulajdonságokkal, amelyeket a karakterisztika deklarációjában deklarálnak, az engedélyeket minden műveletnél ellenőrzik. Tartalmazhatnak titkosítási és hitelesítési követelményeket.

Bluetooth SIG szabványos karakterisztikák

Bluetooth SIG több mint 500 szabványos karakterisztikát specifikált, amelyek a BLE használatának legtöbb gyakori forgatókönyvét lefedik. A szabványos UUID-k használata garantálja, hogy bármely fogadó eszköz helyesen értelmezi az adatokat előzetes konfiguráció nélkül.

Íme a leggyakrabban használt szabványos karakterisztikák:

UUIDNévAdattípusSzolgáltatás
0x2A19Battery Leveluint8 (0–100%)Battery Service
0x2A37Heart Rate Measurementuint8 + zászlókHeart Rate
0x2A6ETemperatureint16 (0.01°C)Environmental Sensing
0x2A6FHumidityuint16 (0.01%)Environmental Sensing
0x2A00Device NameUTF-8 stringGeneric Access
0x2A01Appearanceuint16Generic Access

Ha egy meglévő szabványos karakterisztika lefedi a feladatát — használja azt. Ez egyszerűsíti a Bluetooth tanúsítást és növeli a kompatibilitást az ökoszisztémával. Csak olyan egyedi adatokhoz hozzon létre egyedi karakterisztikákat, amelyek nem szerepelnek a SIG nyilvántartásában.

Characteristic létrehozása iOS-ben és Android-ban

A karakterisztika létrehozása a Peripheral oldalán történik — az eszközön, amely az adatokat szolgáltatja. Vizsgáljuk meg az implementációt iOS (Swift) és Android (Java) rendszereken.

iOS: CBMutableCharacteristic

A Core Bluetooth biztosítja a CBMutableCharacteristic osztályt a karakterisztika létrehozásához az UUID, tulajdonságok és kezdeti érték megadásával.

swift
import CoreBluetooth

let characteristicUUID = CBUUID("2A19") // Akkumulátorszint karakterisztika

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

// Érték frissítése változáskor
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
    batteryData,
    for: characteristic,
    onSubscribedCentrals: nil
)

Android: BluetoothGattCharacteristic

Androidon a karakterisztika a BluetoothGattCharacteristic segítségével jön létre az UUID, tulajdonságok és engedélyek megadásával.

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

// Állítsa be az értéket
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Olvasás, írás és értesítések

A Characteristic-en végzett műveletek három típusra oszthatók: olvasás (read), írás (write) és értesítések (notify/indicate). A művelet kiválasztása a forgatókönyvtől függ: a kérésre szolgáló adatokat olvassák, a parancsokat írják, az adatfolyamokat értesítésekre iratkoznak fel.

Read — A Central olvasási kérelmet küld a karakterisztika értékére. A Peripheral a jelenlegi értékkel válaszol. A művelet szinkron, és mindkét oldalról explicit kérelmet igényel. Ritkán változó adatokhoz használatos: firmware verzió, sorozatszám, beállítások.

Write — A Central adatokat küld a Peripheralnek. Két mód létezik: Write with Response (megerősítés a Peripheral-től) és Write Without Response (megerősítés nélkül). A Write with Response garantálja a kézbesítést — a Peripheral megerősítést küld az írás után. A Write Without Response gyorsabb, de nem garantálja a kézbesítést.

Notify és Indicate — A Peripheral kezdeményezi az adatok küldését a Central felé. A Notify esetén az adatok megerősítés nélkül kerülnek elküldésre — ha a Central nem tudta fogadni a csomagot, az elveszik. Az Indicate esetén a Central megerősítést küld (PDU szinten), ami garantálja a kézbesítést. Az Indicate lassabb, de megbízhatóbb. Az értesítésekre való feliratkozáshoz a Central a 0x0001 értéket írja a CCCD-be (Client Characteristic Configuration Descriptor).

MTU és a továbbított adatok mérete

MTU (Maximum Transmission Unit) meghatározza egyetlen BLE adatcsomag maximális méretét. Alapértelmezés szerint az MTU 23 bájt, ebből 3 bájt a fejléc — a hasznos teher (ATT payload) 20 bájt. Ez a legtöbb érzékelőadat számára elegendő, de nem elegendő fájlok vagy nagy konfigurációk továbbításához.

A Bluetooth Core Specification 5.4 támogatja az MTU egyeztetést (MTU negotiation) — a Central és a Peripheral megállapodhat nagyobb csomagméretben, akár 517 bájtig. A folyamat a következő: a Central elküld egy MTU Exchange kérelmet a saját MTU javaslatával; a Peripheral a saját MTU-jával válaszol; a két érték közül a kisebbet használják.

swift
// iOS MTU-t kér csatlakozáskor
// Maximális MTU iOS-ben 185 bájt
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverServices error: Error?
) {
    // MTU kérése adott perifériához
    peripheral.maximumWriteValueLength(for: .withResponse)
}

A Bluetooth SIG (2023) szerint az MTU 23-ról 185 bájtra történő növelése akár 80%-kal csökkenti az adatátviteli többletköltséget a csomagok számának csökkentésével. A magas frekvenciájú leolvasásokat továbbító alkalmazásoknál (pl. EKG vagy gyorsulásmérő) az MTU növelése kritikus a folyam stabilitása szempontjából.

Gyakran Ismételt Kérdések

Hány karakterisztikát tartalmazhat egy szolgáltatás?

A BLE specifikáció nem korlátozza a karakterisztikák számát egy szolgáltatásban. A gyakorlatban a korlátot a GATT szerver rendelkezésre álló memóriája és a teljesítménykövetelmények határozzák meg. Beágyazott eszközök esetében szolgáltatásonként legfeljebb 10–15 karakterisztika ajánlott.

Mi a különbség a Notify és az Indicate között?

A Notify adatokat küld megerősítés nélkül — a csomag elveszhet a feladó értesítése nélkül. Az Indicate megerősítést (ACK) igényel protokoll szinten, ami garantálja a kézbesítést. Az Indicate lassabb, de megbízhatóbb. Kritikus adatoknál (riasztások, parancsok) használja az Indicate-t.

Lehet egy karakterisztikának egyszerre Read és Write tulajdonsága?

Igen, egy karakterisztikának lehet tulajdonságkombinációja. Például egy beállítási karakterisztika támogathatja a Read (aktuális érték olvasása) és a Write (beállítás módosítása) műveleteket. Kombinálja a tulajdonságokat a használati forgatókönyvének megfelelően.

Hogyan lehet 20 bájtnál nagyobb adatokat továbbítani BLE-n keresztül?

Használja az MTU egyeztetést a csomagméret 185–517 bájtra növeléséhez. Ha az adatok még mindig túl nagyok — valósítson meg fragmentációt alkalmazási szinten: ossza fel az adatokat több egymást követő kérelemre integritásellenőrzéssel.

Szükséges a karakterisztikák szabványos UUID-jét használni?

Ha a feladatát lefedi egy szabványos karakterisztika — használja a Bluetooth SIG nyilvántartásából származó UUID-t. Ez egyszerűsíti a tanúsítást és biztosítja a kompatibilitást az ökoszisztémával. Egyedi UUID-ket csak harmadik féltől származó gyártók egyedi adataihoz hozzon létre.

Összegzés

  • A Characteristic a BLE elsődleges adatátviteli mechanizmusa, amely egy értéket képvisel UUID-vel, tulajdonságokkal és deszkriptorokkal.
  • A tulajdonságok (Read, Write, Notify, Indicate) határozzák meg, hogy milyen műveletek érhetők el a karakterisztikán.
  • A Bluetooth SIG több mint 500 szabványos karakterisztikát specifikált — használja őket az eszközök kompatibilitásához.
  • A karakterisztika létrehozása a Peripheral oldalán történik a Core Bluetooth (iOS) vagy a BluetoothGattCharacteristic (Android) segítségével.
  • Az értesítések (Notify/Indicate) hatékonyabbak, mint a rendszeres lekérdezés az adatfolyamok esetében — nem igényelnek folyamatos kérelmeket a Central-tól.
  • Egy csomag méretét az MTU korlátozza (alapértelmezetten 20 bájt), de MTU Exchange segítségével akár 517 bájtra növelhető.
  • A tulajdonságok és a karakterisztika UUID-jének helyes megválasztása határozza meg a BLE-kapcsolat energiafogyasztását, megbízhatóságát és teljesítményét.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is