Characteristic: co to je, typy dat a čtení hodnot

Autor: IT Sectr Publikováno: 2026-07-15 Doba čtení: 7 min

Characteristic je základní jednotka dat v Bluetooth Low Energy, prostřednictvím které Central přijímá nebo zapisuje informace na periferním zařízení. Každá Characteristic patří ke konkrétní službě GATT, má jedinečné UUID a sadu vlastností (read, write, notify, indicate), které určují možné operace. Podle Bluetooth Core Specification 5.4 (2023) Bluetooth SIG specifikoval více než 500 standardních charakteristik pro lékařská, fitness a průmyslová zařízení. Vývojář vytváří vlastní charakteristiky pro přenos jakýchkoli uživatelských dat — od údajů ze senzorů až po příkazy k ovládání zařízení.

Hlavní body

  • Characteristic je datový bod v rámci služby GATT BLE, který má UUID, vlastnosti a hodnotu určitého typu.
  • Vlastnosti určují dostupné operace: read (čtení), write (zápis), notify (oznámení), indicate (potvrzené oznámení).
  • Standardní charakteristiky (battery level, heart rate) mají 16bitové UUID z registru Bluetooth SIG.
  • Každá Characteristic může obsahovat deskriptory — metadata popisující jednotky měření nebo konfiguraci oznámení.
  • Maximální velikost jednoho datového paketu přes Characteristic je 20 bajtů (MTU 23) nebo až 244 bajtů při zvýšení MTU.

Co je Characteristic v BLE?

Characteristic je atribut protokolu GATT, který obsahuje hodnotu (value) a metadata. V architektuře BLE se data nepřenášejí přímo mezi zařízeními, ale prostřednictvím čtení a zápisu hodnot charakteristik služby. Pokud je služba složka, pak Characteristic je soubor v této složce.

Každá Characteristic se skládá ze tří komponent: deklarace (declaration), hodnota (value) a deskriptory (descriptors). Deklarace obsahuje UUID charakteristiky a její vlastnosti. Hodnota jsou vlastní data přenášená mezi Central a Peripheral. Deskriptory poskytují dodatečnou konfiguraci.

Podle Bluetooth Core Specification 5.4 (2023) probíhají všechny výměny dat v BLE prostřednictvím operací nad charakteristikami. Dokonce i standardní profily, jako je Heart Rate Profile nebo Battery Service, jsou postaveny na sadě charakteristik s předdefinovanými UUID. To zajišťuje kompatibilitu zařízení různých výrobců bez předchozí konfigurace.

Pro vývojáře je důležité pochopit: každá Characteristic může podporovat různé kombinace vlastností. Jedna charakteristika může být pouze pro čtení, druhá — pro zápis, třetí — pro oznámení. Správný výběr vlastností určuje scénář použití a spotřebu energie zařízení.

Vlastnosti a oprávnění Characteristic

Vlastnosti (properties) charakteristiky určují, jaké operace jsou na ní povoleny. Jedná se o bajtovou masku, kde každý bit zapíná nebo vypíná určitou operaci. Níže jsou uvedeny hlavní vlastnosti.

VlastnostBitPopisTypické použití
Read0x02Central může číst aktuální hodnotuStav, úroveň baterie, konfigurace
Write0x08Central může zapsat novou hodnotuPříkazy ovládání, nastavení
Notify0x10Peripheral odesílá hodnotu bez potvrzeníDatový proud (puls, teplota)
Indicate0x20Peripheral odesílá hodnotu s potvrzenímKritická data (alarmy, stavy)
Write Without Response0x04Zápis bez čekání na potvrzení od serveruRychlý přenos příkazů

Oprávnění (permissions) jsou úroveň přístupu na úrovni serveru GATT. Na rozdíl od vlastností, které jsou deklarovány v deklaraci charakteristiky, oprávnění se kontrolují při každé operaci. Mohou zahrnovat požadavky na šifrování a autentizaci.

Standardní charakteristiky Bluetooth SIG

Bluetooth SIG specifikoval více než 500 standardních charakteristik, které pokrývají většinu běžných scénářů použití BLE. Použití standardních UUID zaručuje, že jakékoli přijímací zařízení správně interpretuje data bez předchozí konfigurace.

Zde jsou nejčastěji používané standardní charakteristiky:

UUIDNázevTyp datSlužba
0x2A19Battery Leveluint8 (0–100%)Battery Service
0x2A37Heart Rate Measurementuint8 + vlajkyHeart Rate
0x2A6ETemperatureint16 (0.01°C)Environmental Sensing
0x2A6FHumidityuint16 (0.01%)Environmental Sensing
0x2A00Device NameUTF-8 stringGeneric Access
0x2A01Appearanceuint16Generic Access

Pokud existující standardní charakteristika pokrývá váš úkol — použijte ji. To zjednodušuje certifikaci Bluetooth a zvyšuje kompatibilitu s ekosystémem. Vlastní charakteristiky vytvářejte pouze pro jedinečná data, která nejsou v registru SIG.

Jak vytvořit Characteristic v iOS a Android

Vytvoření charakteristiky se provádí na straně Peripheral — zařízení, které poskytuje data. Podívejme se na implementaci na iOS (Swift) a Android (Java).

iOS: CBMutableCharacteristic

Core Bluetooth poskytuje třídu CBMutableCharacteristic pro vytvoření charakteristiky s uvedením UUID, vlastností a počáteční hodnoty.

swift
import CoreBluetooth

let characteristicUUID = CBUUID("2A19") // Charakteristika úrovně baterie

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

// Aktualizovat hodnotu při změně
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
    batteryData,
    for: characteristic,
    onSubscribedCentrals: nil
)

Android: BluetoothGattCharacteristic

Na Androidu se charakteristika vytváří pomocí BluetoothGattCharacteristic s uvedením UUID, vlastností a oprávnění.

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

// Nastavit hodnotu
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Čtení, zápis a oznámení

Operace nad Characteristic se dělí na tři typy: čtení (read), zápis (write) a oznámení (notify/indicate). Výběr operace závisí na scénáři: data na vyžádání se čtou, příkazy se zapisují, datové toky se odebírají prostřednictvím oznámení.

Read — Central odešle požadavek na čtení hodnoty charakteristiky. Peripheral odpoví aktuální hodnotou. Operace je synchronní a vyžaduje explicitní požadavek z obou stran. Používá se pro data, která se mění zřídka: verze firmwaru, sériové číslo, nastavení.

Write — Central odešle data na Peripheral. Existují dva režimy: Write with Response (potvrzení od Peripheral) a Write Without Response (bez potvrzení). Write with Response zaručuje doručení — Peripheral pošle potvrzení po zápisu. Write Without Response je rychlejší, ale nezaručuje doručení.

Notify a Indicate — Peripheral iniciuje odesílání dat Central. Při Notify jsou data odeslána bez potvrzení — pokud Central nestihl paket přijmout, je ztracen. Při Indicate Central odešle potvrzení (na úrovni PDU), což zaručuje doručení. Indicate je pomalejší, ale spolehlivější. Pro odběr oznámení zapíše Central hodnotu 0x0001 do CCCD (Client Characteristic Configuration Descriptor).

MTU a velikost přenášených dat

MTU (Maximum Transmission Unit) určuje maximální velikost jednoho datového paketu BLE. Ve výchozím nastavení je MTU 23 bajtů, z nichž 3 bajty tvoří hlavička — užitečné zatížení (ATT payload) je 20 bajtů. To je dostatečné pro většinu senzorových dat, ale nedostatečné pro přenos souborů nebo velkých konfigurací.

Bluetooth Core Specification 5.4 podporuje vyjednávání MTU (MTU negotiation) — Central a Peripheral se mohou dohodnout na větší velikosti paketu až do 517 bajtů. Proces vypadá takto: Central odešle požadavek MTU Exchange s návrhem svého MTU; Peripheral odpoví svým MTU; použije se menší z obou hodnot.

swift
// iOS požaduje MTU při připojení
// Maximální MTU v iOS je 185 bajtů
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverServices error: Error?
) {
    // Požadovat MTU pro konkrétní periferní zařízení
    peripheral.maximumWriteValueLength(for: .withResponse)
}

Podle Bluetooth SIG (2023) snižuje zvýšení MTU z 23 na 185 bajtů režii přenosu dat až o 80 % díky snížení počtu paketů. Pro aplikace přenášející údaje s vysokou frekvencí (např. EKG nebo akcelerometr) je zvýšení MTU kritické pro stabilitu datového toku.

Často kladené otázky

Kolik charakteristik může obsahovat jedna služba?

Specifikace BLE neomezuje počet charakteristik ve službě. V praxi je omezení určeno dostupnou pamětí serveru GATT a požadavky na výkon. Pro vestavěná zařízení se doporučuje nejvýše 10–15 charakteristik na službu.

Jaký je rozdíl mezi Notify a Indicate?

Notify odesílá data bez potvrzení — paket může být ztracen bez upozornění odesílatele. Indicate vyžaduje potvrzení (ACK) na úrovni protokolu, což zaručuje doručení. Indicate je pomalejší, ale spolehlivější. Pro kritická data (alarmy, příkazy) používejte Indicate.

Může mít charakteristika současně Read a Write?

Ano, charakteristika může mít kombinaci vlastností. Například charakteristika nastavení může podporovat Read (čtení aktuální hodnoty) a Write (změna nastavení). Kombinujte vlastnosti podle vašeho scénáře použití.

Jak přenést data větší než 20 bajtů přes BLE?

Použijte vyjednávání MTU pro zvýšení velikosti paketu na 185–517 bajtů. Pokud jsou data stále příliš velká — implementujte fragmentaci na úrovni aplikace: rozdělte data do několika sekvenčních požadavků s kontrolou integrity.

Je nutné používat standardní UUID charakteristik?

Pokud váš úkol pokrývá standardní charakteristika — použijte UUID z registru Bluetooth SIG. To zjednodušuje certifikaci a zajišťuje kompatibilitu s ekosystémem. Vlastní UUID vytvářejte pouze pro jedinečná data výrobců třetích stran.

Shrnutí

  • Characteristic je hlavní mechanismus přenosu dat v BLE, který představuje hodnotu s UUID, vlastnostmi a deskriptory.
  • Vlastnosti (Read, Write, Notify, Indicate) určují, jaké operace jsou na charakteristice dostupné.
  • Bluetooth SIG specifikoval více než 500 standardních charakteristik — používejte je pro kompatibilitu zařízení.
  • Vytvoření charakteristiky se provádí na straně Peripheral prostřednictvím Core Bluetooth (iOS) nebo BluetoothGattCharacteristic (Android).
  • Oznámení (Notify/Indicate) jsou efektivnější než pravidelné dotazování pro datové toky — nevyžadují neustálé požadavky od Central.
  • Velikost jednoho paketu je omezena MTU (výchozích 20 bajtů), ale lze ji zvýšit až na 517 bajtů pomocí MTU Exchange.
  • Správný výběr vlastností a UUID charakteristiky určuje spotřebu energie, spolehlivost a výkon připojení BLE.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také