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 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 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ág | Bit | Leírás | Jellemző használat |
|---|---|---|---|
| Read | 0x02 | A Central olvashatja a jelenlegi értéket | Státusz, akkumulátorszint, konfiguráció |
| Write | 0x08 | A Central írhat egy új értéket | Vezérlőparancsok, beállítások |
| Notify | 0x10 | A Peripheral megerősítés nélkül küld értéket | Adatfolyam (pulzus, hőmérséklet) |
| Indicate | 0x20 | A Peripheral megerősítéssel küld értéket | Kritikus adatok (riasztások, státuszok) |
| Write Without Response | 0x04 | Írás a szerver megerősítésének várása nélkül | Gyors 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 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:
| UUID | Név | Adattípus | Szolgáltatás |
|---|---|---|---|
| 0x2A19 | Battery Level | uint8 (0–100%) | Battery Service |
| 0x2A37 | Heart Rate Measurement | uint8 + zászlók | 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 |
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.
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.
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.
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
)
Androidon a karakterisztika a BluetoothGattCharacteristic segítségével jön létre az UUID, tulajdonságok és engedélyek megadásával.
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);
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 (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.
// 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
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.
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.
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.
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.
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
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.
Olvassa el is