Characteristic: wat is het, gegevenstypen en waarden lezen

Auteur: IT Sectr Gepubliceerd: 2026-07-15 Leestijd: 7 min

Characteristic is de fundamentele gegevenseenheid in Bluetooth Low Energy waarmee Central informatie op een perifeer apparaat ontvangt of schrijft. Elke Characteristic behoort tot een specifieke GATT-service, heeft een unieke UUID en een set eigenschappen (read, write, notify, indicate) die de mogelijke bewerkingen bepalen. Volgens de Bluetooth Core Specification 5.4 (2023) heeft Bluetooth SIG meer dan 500 standaardkarakteristieken gespecificeerd voor medische, fitness- en industriële apparaten. De ontwikkelaar maakt aangepaste karakteristieken voor het verzenden van alle gebruikersgegevens — van sensoruitlezingen tot apparaatbesturingsopdrachten.

Belangrijkste punten

  • Characteristic is een gegevenspunt binnen een BLE GATT-service met UUID, eigenschappen en een waarde van een specifiek type.
  • Eigenschappen bepalen de beschikbare bewerkingen: read (lezen), write (schrijven), notify (melding), indicate (bevestigde melding).
  • Standaardkarakteristieken (battery level, heart rate) hebben 16-bit UUID's uit het Bluetooth SIG-register.
  • Elke Characteristic kan descriptors bevatten — metadata die meeteenheden of meldingsconfiguratie beschrijven.
  • De maximale grootte van één gegevenspakket via Characteristic is 20 bytes (MTU 23) of tot 244 bytes bij verhoogde MTU.

Wat is Characteristic in BLE?

Characteristic is een attribuut van het GATT-protocol dat een waarde (value) en metadata bevat. In de BLE-architectuur worden gegevens niet direct tussen apparaten verzonden, maar door het lezen en schrijven van waarden van servicekarakteristieken. Als de service een map is, dan is Characteristic een bestand in die map.

Elke Characteristic bestaat uit drie componenten: declaratie (declaration), waarde (value) en descriptors (descriptors). De declaratie bevat de UUID van de karakteristiek en zijn eigenschappen. De waarde zijn de eigenlijke gegevens die worden verzonden tussen Central en Peripheral. Descriptors bieden aanvullende configuratie.

Volgens Bluetooth Core Specification 5.4 (2023) vindt alle gegevensuitwisseling in BLE plaats via bewerkingen op karakteristieken. Zelfs standaardprofielen zoals Heart Rate Profile of Battery Service zijn gebouwd op een set karakteristieken met vooraf gedefinieerde UUID's. Dit zorgt voor compatibiliteit tussen apparaten van verschillende fabrikanten zonder voorafgaande configuratie.

Het is belangrijk voor de ontwikkelaar om te begrijpen: elke Characteristic kan verschillende combinaties van eigenschappen ondersteunen. De ene karakteristiek kan alleen-lezen zijn, de andere alleen-schrijven, de derde voor meldingen. De juiste keuze van eigenschappen bepaalt het gebruiksscenario en het energieverbruik van het apparaat.

Eigenschappen en rechten van Characteristic

Eigenschappen (properties) van de karakteristiek bepalen welke bewerkingen erop zijn toegestaan. Het is een bytemasker waarbij elke bit een specifieke bewerking in- of uitschakelt. Hieronder staan de belangrijkste eigenschappen.

EigenschapBitBeschrijvingTypisch gebruik
Read0x02Central kan de huidige waarde lezenStatus, batterijniveau, configuratie
Write0x08Central kan een nieuwe waarde schrijvenBesturingsopdrachten, instellingen
Notify0x10Peripheral verzendt waarde zonder bevestigingStreamgegevens (pols, temperatuur)
Indicate0x20Peripheral verzendt waarde met bevestigingKritieke gegevens (alarmen, statussen)
Write Without Response0x04Schrijven zonder wachten op bevestiging van serverSnelle opdrachtoverdracht

Rechten (permissions) zijn het toegangsniveau op GATT-serverniveau. In tegenstelling tot eigenschappen, die in de declaratie van de karakteristiek worden vermeld, worden rechten bij elke bewerking gecontroleerd. Ze kunnen versleutelings- en authenticatievereisten omvatten.

Standaard Bluetooth SIG-karakteristieken

Bluetooth SIG heeft meer dan 500 standaardkarakteristieken gespecificeerd die de meeste gangbare BLE-gebruiksscenario's dekken. Het gebruik van standaard UUID's garandeert dat elk ontvangend apparaat de gegevens correct interpreteert zonder voorafgaande configuratie.

Hier zijn de meest gebruikte standaardkarakteristieken:

UUIDNaamGegevenstypeService
0x2A19Battery Leveluint8 (0–100%)Battery Service
0x2A37Heart Rate Measurementuint8 + vlaggenHeart Rate
0x2A6ETemperatureint16 (0.01°C)Environmental Sensing
0x2A6FHumidityuint16 (0.01%)Environmental Sensing
0x2A00Device NameUTF-8 stringGeneric Access
0x2A01Appearanceuint16Generic Access

Als een bestaande standaardkarakteristiek uw taak dekt — gebruik deze dan. Dit vereenvoudigt Bluetooth-certificering en verhoogt de compatibiliteit met het ecosysteem. Maak alleen aangepaste karakteristieken voor unieke gegevens die niet in het SIG-register staan.

Characteristic maken in iOS en Android

Het maken van een karakteristiek gebeurt aan de kant van Peripheral — het apparaat dat gegevens levert. Laten we de implementatie op iOS (Swift) en Android (Java) bekijken.

iOS: CBMutableCharacteristic

Core Bluetooth biedt de klasse CBMutableCharacteristic voor het maken van een karakteristiek met specificatie van UUID, eigenschappen en beginwaarde.

swift
import CoreBluetooth

let characteristicUUID = CBUUID("2A19") // Batterijniveau-karakteristiek

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

// Waarde bijwerken bij wijziging
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
    batteryData,
    for: characteristic,
    onSubscribedCentrals: nil
)

Android: BluetoothGattCharacteristic

Op Android wordt de karakteristiek gemaakt via BluetoothGattCharacteristic met specificatie van UUID, eigenschappen en rechten.

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

// Stel de waarde in
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Lezen, schrijven en meldingen

Bewerkingen op Characteristic zijn onderverdeeld in drie typen: lezen (read), schrijven (write) en meldingen (notify/indicate). De keuze van bewerking hangt af van het scenario: gegevens op aanvraag worden gelezen, opdrachten worden geschreven, streamgegevens worden geabonneerd op meldingen.

Read — Central stuurt een leesverzoek voor de karakteristiekwaarde. Peripheral antwoordt met de huidige waarde. De bewerking is synchroon en vereist een expliciet verzoek van beide kanten. Wordt gebruikt voor gegevens die zelden veranderen: firmwareversie, serienummer, instellingen.

Write — Central stuurt gegevens naar Peripheral. Er zijn twee modi: Write with Response (bevestiging van Peripheral) en Write Without Response (zonder bevestiging). Write with Response garandeert levering — Peripheral stuurt een bevestiging na het schrijven. Write Without Response is sneller, maar garandeert geen levering.

Notify en Indicate — Peripheral initieert het verzenden van gegevens naar Central. Bij Notify worden gegevens zonder bevestiging verzonden — als Central het pakket niet heeft kunnen ontvangen, gaat het verloren. Bij Indicate stuurt Central een bevestiging (op PDU-niveau), wat levering garandeert. Indicate is langzamer, maar betrouwbaarder. Om zich te abonneren op meldingen schrijft Central de waarde 0x0001 in de CCCD (Client Characteristic Configuration Descriptor).

MTU en grootte van verzonden gegevens

MTU (Maximum Transmission Unit) bepaalt de maximale grootte van één BLE-gegevenspakket. Standaard is de MTU 23 bytes, waarvan 3 bytes header — de nuttige lading (ATT payload) is 20 bytes. Dit is voldoende voor de meeste sensorgegevens, maar onvoldoende voor het verzenden van bestanden of grote configuraties.

Bluetooth Core Specification 5.4 ondersteunt MTU-onderhandeling (MTU negotiation) — Central en Peripheral kunnen een grotere pakketgrootte tot 517 bytes overeenkomen. Het proces ziet er als volgt uit: Central stuurt een MTU Exchange-verzoek met zijn MTU-voorstel; Peripheral antwoordt met zijn MTU; de kleinste van de twee waarden wordt gebruikt.

swift
// iOS vraagt MTU bij verbinding
// Maximale MTU in iOS is 185 bytes
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverServices error: Error?
) {
    // Vraag MTU aan voor specifiek perifeer apparaat
    peripheral.maximumWriteValueLength(for: .withResponse)
}

Volgens Bluetooth SIG (2023) vermindert het verhogen van de MTU van 23 naar 185 bytes de overhead van gegevensoverdracht met tot 80% door het verminderen van het aantal pakketten. Voor toepassingen die metingen met hoge frequentie verzenden (bijv. ECG of accelerometer), is MTU-verhoging cruciaal voor de stabiliteit van de stroom.

Veelgestelde vragen

Hoeveel karakteristieken kan één service bevatten?

De BLE-specificatie beperkt het aantal karakteristieken in een service niet. In de praktijk wordt de beperking bepaald door het beschikbare geheugen van de GATT-server en prestatie-eisen. Voor ingebedde apparaten wordt niet meer dan 10–15 karakteristieken per service aanbevolen.

Wat is het verschil tussen Notify en Indicate?

Notify verzendt gegevens zonder bevestiging — het pakket kan verloren gaan zonder melding aan de afzender. Indicate vereist bevestiging (ACK) op protocolniveau, wat levering garandeert. Indicate is langzamer, maar betrouwbaarder. Gebruik Indicate voor kritieke gegevens (alarmen, opdrachten).

Kan een karakteristiek tegelijkertijd Read en Write hebben?

Ja, een karakteristiek kan een combinatie van eigenschappen hebben. Een instellingskarakteristiek kan bijvoorbeeld Read (lezen van huidige waarde) en Write (wijzigen van instelling) ondersteunen. Combineer eigenschappen volgens uw gebruiksscenario.

Hoe verzend ik gegevens groter dan 20 bytes via BLE?

Gebruik MTU-onderhandeling om de pakketgrootte te verhogen tot 185–517 bytes. Als de gegevens nog steeds te groot zijn — implementeer fragmentatie op applicatieniveau: verdeel de gegevens in meerdere opeenvolgende verzoeken met integriteitscontrole.

Moet ik standaard UUID's van karakteristieken gebruiken?

Als uw taak wordt gedekt door een standaardkarakteristiek — gebruik dan UUID uit het Bluetooth SIG-register. Dit vereenvoudigt certificering en garandeert compatibiliteit met het ecosysteem. Maak aangepaste UUID's alleen voor unieke gegevens van derden.

Samenvatting

  • Characteristic is het primaire gegevensoverdrachtmechanisme in BLE, dat een waarde vertegenwoordigt met UUID, eigenschappen en descriptors.
  • Eigenschappen (Read, Write, Notify, Indicate) bepalen welke bewerkingen beschikbaar zijn op de karakteristiek.
  • Bluetooth SIG heeft meer dan 500 standaardkarakteristieken gespecificeerd — gebruik ze voor apparaatcompatibiliteit.
  • Het maken van een karakteristiek gebeurt aan de kant van Peripheral via Core Bluetooth (iOS) of BluetoothGattCharacteristic (Android).
  • Meldingen (Notify/Indicate) zijn efficiënter dan regelmatige polling voor streamgegevens — ze vereisen geen constante verzoeken van Central.
  • De grootte van één pakket is beperkt door MTU (standaard 20 bytes), maar kan worden verhoogd tot 517 bytes via MTU Exchange.
  • De juiste keuze van eigenschappen en UUID van de karakteristiek bepaalt het energieverbruik, de betrouwbaarheid en de prestaties van de BLE-verbinding.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook