Characteristic: vad är det, datatyper och att läsa värden

Författare: IT Sectr Publicerad: 2026-07-15 Lästid: 7 min

Characteristic är den grundläggande dataenheten i Bluetooth Low Energy genom vilken Central tar emot eller skriver information på en perifer enhet. Varje Characteristic tillhör en specifik GATT-tjänst, har ett unikt UUID och en uppsättning egenskaper (read, write, notify, indicate) som bestämmer möjliga operationer. Enligt Bluetooth Core Specification 5.4 (2023) har Bluetooth SIG specificerat över 500 standardkarakteristiker för medicinska, fitness- och industriella enheter. Utvecklaren skapar anpassade karakteristiker för att överföra alla användardata — från sensora v läsningar till enhetskontrollkommandon.

Huvudpunkter

  • Characteristic är en datapunkt inom en BLE GATT-tjänst med UUID, egenskaper och ett värde av en specifik typ.
  • Egenskaper bestämmer tillgängliga operationer: read (läsning), write (skrivning), notify (meddelande), indicate (bekräftat meddelande).
  • Standardkarakteristiker (battery level, heart rate) har 16-bitars UUID från Bluetooth SIG-registret.
  • Varje Characteristic kan innehålla deskriptorer — metadata som beskriver måttenheter eller meddelandekonfiguration.
  • Den maximala storleken på ett datapaket via Characteristic är 20 byte (MTU 23) eller upp till 244 byte vid ökad MTU.

Vad är Characteristic i BLE?

Characteristic är ett attribut i GATT-protokollet som innehåller ett värde (value) och metadata. I BLE-arkitekturen överförs data inte direkt mellan enheter utan genom att läsa och skriva värden på tjänstens karakteristiker. Om tjänsten är en mapp, är Characteristic en fil i den mappen.

Varje Characteristic består av tre komponenter: deklaration (declaration), värde (value) och deskriptorer (descriptors). Deklarationen innehåller karakteristikens UUID och dess egenskaper. Värdet är själva data som överförs mellan Central och Peripheral. Deskriptorer tillhandahåller ytterligare konfiguration.

Enligt Bluetooth Core Specification 5.4 (2023) sker all datautbyte i BLE genom operationer på karakteristiker. Även standardprofiler som Heart Rate Profile eller Battery Service är byggda på en uppsättning karakteristiker med fördefinierade UUID. Detta säkerställer kompatibilitet mellan enheter från olika tillverkare utan föregående konfiguration.

Det är viktigt för utvecklaren att förstå: varje Characteristic kan stödja olika kombinationer av egenskaper. En karakteristik kan vara skrivskyddad, en annan — skrivbar, den tredje — för meddelanden. Rätt val av egenskaper bestämmer användningsscenariot och enhetens energiförbrukning.

Egenskaper och behörigheter för Characteristic

Egenskaper (properties) för karakteristiken bestämmer vilka operationer som är tillåtna på den. Det är en bytemask där varje bit aktiverar eller inaktiverar en specifik operation. Nedan listas de viktigaste egenskaperna.

EgenskapBitBeskrivningTypisk användning
Read0x02Central kan läsa aktuellt värdeStatus, batterinivå, konfiguration
Write0x08Central kan skriva ett nytt värdeKontrollkommandon, inställningar
Notify0x10Peripheral skickar värde utan bekräftelseStrömmande data (puls, temperatur)
Indicate0x20Peripheral skickar värde med bekräftelseKritisk data (larm, statusar)
Write Without Response0x04Skrivning utan att vänta på bekräftelse från servernHöghastighetskommandoöverföring

Behörigheter (permissions) är åtkomstnivån på GATT-servernivå. Till skillnad från egenskaper som deklareras i karakteristikens deklaration, kontrolleras behörigheter vid varje operation. De kan inkludera krypterings- och autentiseringskrav.

Standardkarakteristiker för Bluetooth SIG

Bluetooth SIG har specificerat över 500 standardkarakteristiker som täcker de flesta vanliga BLE-användningsscenarier. Användning av standard UUID garanterar att alla mottagande enheter korrekt tolkar data utan föregående konfiguration.

Här är de mest använda standardkarakteristikerna:

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

Om en befintlig standardkarakteristik täcker din uppgift — använd den. Detta förenklar Bluetooth-certifiering och ökar kompatibiliteten med ekosystemet. Skapa anpassade karakteristiker endast för unik data som inte finns i SIG-registret.

Hur man skapar Characteristic i iOS och Android

Skapande av karakteristik sker på Peripheral-sidan — enheten som tillhandahåller data. Låt oss titta på implementeringen på iOS (Swift) och Android (Java).

iOS: CBMutableCharacteristic

Core Bluetooth tillhandahåller klassen CBMutableCharacteristic för att skapa en karakteristik med angivelse av UUID, egenskaper och initialt värde.

swift
import CoreBluetooth

let characteristicUUID = CBUUID("2A19") // Batterinivåkarakteristik

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

// Uppdatera värde vid ändring
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
    batteryData,
    for: characteristic,
    onSubscribedCentrals: nil
)

Android: BluetoothGattCharacteristic

På Android skapas karakteristiken via BluetoothGattCharacteristic med angivelse av UUID, egenskaper och behörigheter.

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

// Ställ in värdet
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Läsning, skrivning och meddelanden

Operationer på Characteristic delas in i tre typer: läsning (read), skrivning (write) och meddelanden (notify/indicate). Valet av operation beror på scenariot: data på begäran läses, kommandon skrivs, strömmande data prenumereras via meddelanden.

Read — Central skickar en begäran om att läsa karakteristikens värde. Peripheral svarar med det aktuella värdet. Operationen är synkron och kräver en explicit begäran från båda sidor. Används för data som sällan ändras: firmwareversion, serienummer, inställningar.

Write — Central skickar data till Peripheral. Det finns två lägen: Write with Response (bekräftelse från Peripheral) och Write Without Response (utan bekräftelse). Write with Response garanterar leverans — Peripheral skickar en bekräftelse efter skrivning. Write Without Response är snabbare men garanterar inte leverans.

Notify och Indicate — Peripheral initierar sändning av data till Central. Vid Notify skickas data utan bekräftelse — om Central inte hann ta emot paketet går det förlorat. Vid Indicate skickar Central en bekräftelse (på PDU-nivå), vilket garanterar leverans. Indicate är långsammare men mer tillförlitlig. För att prenumerera på meddelanden skriver Central värdet 0x0001 i CCCD (Client Characteristic Configuration Descriptor).

MTU och storlek på överförda data

MTU (Maximum Transmission Unit) bestämmer den maximala storleken på ett enda BLE-datapaket. Som standard är MTU 23 byte, varav 3 byte är header — nyttolasten (ATT payload) är 20 byte. Detta är tillräckligt för de flesta sensordata men otillräckligt för att överföra filer eller stora konfigurationer.

Bluetooth Core Specification 5.4 stöder MTU-förhandling (MTU negotiation) — Central och Peripheral kan komma överens om en större paketstorlek upp till 517 byte. Processen ser ut så här: Central skickar en MTU Exchange-begäran med sitt MTU-förslag; Peripheral svarar med sitt MTU; det minsta av de två värdena används.

swift
// iOS begär MTU vid anslutning
// Maximal MTU i iOS är 185 byte
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverServices error: Error?
) {
    // Begär MTU för specifik perifer enhet
    peripheral.maximumWriteValueLength(for: .withResponse)
}

Enligt Bluetooth SIG (2023) minskar en ökning av MTU från 23 till 185 byte dataöverföringskostnaderna med upp till 80% på grund av minskat antal paket. För applikationer som överför avläsningar med hög frekvens (t.ex. EKG eller accelerometer) är MTU-ökning avgörande för strömmens stabilitet.

Vanliga frågor

Hur många karakteristiker kan en tjänst innehålla?

BLE-specifikationen begränsar inte antalet karakteristiker i en tjänst. I praktiken bestäms begränsningen av GATT-serverns tillgängliga minne och prestandakrav. För inbyggda enheter rekommenderas högst 10–15 karakteristiker per tjänst.

Vad är skillnaden mellan Notify och Indicate?

Notify skickar data utan bekräftelse — paketet kan gå förlorat utan att avsändaren meddelas. Indicate kräver bekräftelse (ACK) på protokollnivå, vilket garanterar leverans. Indicate är långsammare men mer tillförlitlig. För kritisk data (larm, kommandon) använd Indicate.

Kan en karakteristik ha både Read och Write samtidigt?

Ja, en karakteristik kan ha en kombination av egenskaper. Till exempel kan en inställningskarakteristik stödja Read (läsning av aktuellt värde) och Write (ändring av inställning). Kombinera egenskaper enligt ditt användningsscenario.

Hur överför man data större än 20 byte via BLE?

Använd MTU-förhandling för att öka paketstorleken till 185–517 byte. Om data fortfarande är för stor — implementera fragmentering på applikationsnivå: dela upp data i flera sekventiella begäranden med integritetskontroll.

Måste jag använda standard UUID för karakteristiker?

Om din uppgift täcks av en standardkarakteristik — använd UUID från Bluetooth SIG-registret. Detta förenklar certifiering och säkerställer kompatibilitet med ekosystemet. Skapa anpassade UUID endast för unik data från tredjepartstillverkare.

Sammanfattning

  • Characteristic är den primära dataöverföringsmekanismen i BLE, som representerar ett värde med UUID, egenskaper och deskriptorer.
  • Egenskaper (Read, Write, Notify, Indicate) bestämmer vilka operationer som är tillgängliga på karakteristiken.
  • Bluetooth SIG har specificerat över 500 standardkarakteristiker — använd dem för enhetskompatibilitet.
  • Skapande av karakteristik sker på Peripheral-sidan via Core Bluetooth (iOS) eller BluetoothGattCharacteristic (Android).
  • Meddelanden (Notify/Indicate) är effektivare än regelbunden polling för strömmande data — de kräver inte konstanta förfrågningar från Central.
  • Storleken på ett paket begränsas av MTU (standard 20 byte), men kan ökas till 517 byte via MTU Exchange.
  • Rätt val av egenskaper och UUID för karakteristiken bestämmer energiförbrukningen, tillförlitligheten och prestandan för BLE-anslutningen.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också