Characteristic: nedir, veri türleri ve değer okuma

Yazar: IT Sectr Yayınlanma: 2026-07-15 Okuma süresi: 7 dk

Characteristic Bluetooth Low Energy’de, Central’in bir çevre biriminde bilgi okuduğu veya yazdığı temel bir veri birimidir. Her Characteristic belirli bir GATT hizmetine aittir, benzersiz bir UUID’ye ve olası işlemleri tanımlayan bir dizi özelliğe (read, write, notify, indicate) sahiptir. Bluetooth Core Specification 5.4 (2023)’e göre Bluetooth SIG, tıbbi, fitness ve endüstriyel cihazlar için 500’den fazla standart karakteristik belirlemiştir. Geliştiriciler, sensör okumalarından cihaz kontrol komutlarına kadar her tür kullanıcı verisini iletmek için özel karakteristikler oluşturur.

Ana Noktalar

  • Characteristic, UUID’si, özellikleri ve belirli bir türde değeri olan bir BLE GATT hizmeti içindeki veri noktasıdır.
  • Özellikler mevcut işlemleri tanımlar: read (okuma), write (yazma), notify (bildirim), indicate (onaylı bildirim).
  • Standart karakteristikler (pil seviyesi, kalp atış hızı) Bluetooth SIG kaydından 16 bit UUID’lere sahiptir.
  • Her Characteristic tanımlayıcılar (descriptor) içerebilir — ölçüm birimlerini veya bildirim yapılandırmasını tanımlayan meta veriler.
  • Bir Characteristic üzerinden tek bir veri paketinin maksimum boyutu 20 bayt (MTU 23) veya MTU artışıyla 244 bayta kadardır.

BLE’de Characteristic Nedir?

Characteristic, bir değer ve meta veri içeren GATT protokolünün bir özniteliğidir. BLE mimarisinde veriler doğrudan cihazlar arasında aktarılmaz, hizmetin karakteristik değerlerinin okunması ve yazılması yoluyla aktarılır. Bir hizmet bir klasörse, Characteristic o klasör içindeki bir dosyadır.

Her Characteristic üç bileşenden oluşur: beyan (declaration), değer (value) ve tanımlayıcılar (descriptors). Beyan, karakteristiğin UUID’sini ve özelliklerini içerir. Değer, Central ve Peripheral arasında aktarılan gerçek verilerdir. Tanımlayıcılar ek yapılandırma sağlar.

Bluetooth Core Specification 5.4 (2023)’e göre, BLE’deki tüm veri alışverişleri karakteristikler üzerindeki işlemler yoluyla gerçekleşir. Heart Rate Profile veya Battery Service gibi standart profiller bile önceden tanımlanmış UUID’lere sahip bir dizi karakteristik üzerine inşa edilmiştir. Bu, farklı üreticilerin cihazlarının ön yapılandırma olmadan uyumluluğunu sağlar.

Geliştiricinin şunu anlaması önemlidir: her Characteristic farklı özellik kombinasyonlarını destekleyebilir. Bir karakteristik yalnızca okuma için, diğeri yazma için, üçüncüsü bildirimler için olabilir. Özelliklerin doğru seçimi, kullanım senaryosunu ve cihazın güç tüketimini belirler.

Characteristic Özellikleri ve İzinleri

Bir karakteristiğin özellikleri (properties), üzerinde hangi işlemlerin izin verildiğini tanımlar. Her bir bitin belirli bir işlemi etkinleştirdiği veya devre dışı bıraktığı bir bayt maskesidir. Aşağıda temel özellikler listelenmiştir.

ÖzellikBitAçıklamaTipik Kullanım
Read0x02Central mevcut değeri okuyabilirDurum, pil seviyesi, yapılandırma
Write0x08Central yeni bir değer yazabilirKontrol komutları, ayarlar
Notify0x10Peripheral değeri onaysız gönderirAkış verileri (nabız, sıcaklık)
Indicate0x20Peripheral değeri onaylı gönderirKritik veriler (uyarılar, durumlar)
Write Without Response0x04Sunucudan onay beklemeden yazmaYüksek hızlı komut iletimi

İzinler (permissions), GATT sunucu düzeyindeki erişim seviyesidir. Karakteristik beyanında bildirilen özelliklerin aksine, izinler her işlemde kontrol edilir. Şifreleme ve kimlik doğrulama gereksinimlerini içerebilirler.

Bluetooth SIG Standart Karakteristikleri

Bluetooth SIG, en yaygın BLE kullanım durumlarının çoğunu kapsayan 500’den fazla standart karakteristik belirlemiştir. Standart UUID’lerin kullanımı, herhangi bir alıcı cihazın ön yapılandırma olmadan verileri doğru şekilde yorumlamasını sağlar.

En sık kullanılan standart karakteristikler şunlardır:

UUIDAdVeri TürüHizmet
0x2A19Battery Leveluint8 (0–100%)Battery Service
0x2A37Heart Rate Measurementuint8 + bayraklarHeart Rate
0x2A6ETemperatureint16 (0.01°C)Environmental Sensing
0x2A6FHumidityuint16 (0.01%)Environmental Sensing
0x2A00Device NameUTF-8 dizesiGeneric Access
0x2A01Appearanceuint16Generic Access

Mevcut bir standart karakteristik görevinizi kapsıyorsa, onu kullanın. Bu, Bluetooth sertifikasyonunu basitleştirir ve ekosistem uyumluluğunu artırır. Yalnızca SIG kaydında bulunmayan benzersiz veriler için özel karakteristikler oluşturun.

iOS ve Android’de Characteristic Oluşturma

Bir karakteristik oluşturma, verileri sağlayan cihaz olan Peripheral tarafında yapılır. iOS (Swift) ve Android (Java)’daki uygulamalara bakalım.

iOS: CBMutableCharacteristic

Core Bluetooth, bir UUID, özellikler ve başlangıç değeri ile bir karakteristik oluşturmak için CBMutableCharacteristic sınıfını sağlar.

swift
import CoreBluetooth

let characteristicUUID = CBUUID("2A19") // Pil seviyesi özelliği

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

// Değişiklikte değeri güncelle
let batteryData = Data([batteryLevel]) // uint8
peripheralManager.updateValue(
    batteryData,
    for: characteristic,
    onSubscribedCentrals: nil
)

Android: BluetoothGattCharacteristic

Android’de, bir karakteristik UUID, özellikler ve izinler ile BluetoothGattCharacteristic kullanılarak oluşturulur.

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

// Değeri ayarla
characteristic.setValue(batteryLevel, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
gattServer.notifyCharacteristicChanged(device, characteristic, false);

Okuma, Yazma ve Bildirimler

Bir Characteristic üzerindeki işlemler üç türe ayrılır: okuma (read), yazma (write) ve bildirimler (notify/indicate). Seçim senaryoya bağlıdır: talep üzerine veriler okunur, komutlar yazılır, akış verileri bildirimlere abone olur.

Read: Central, karakteristik değerini okumak için bir istek gönderir. Peripheral mevcut değerle yanıt verir. İşlem eş zamanlıdır ve her iki taraftan açık bir istek gerektirir. Nadiren değişen veriler için kullanılır: ürün yazılımı sürümü, seri numarası, ayarlar.

Write: Central, Peripheral’e veri gönderir. İki mod vardır: Write with Response (Peripheral’den onay) ve Write Without Response (onaysız). Write with Response teslimatı garanti eder — Peripheral yazmadan sonra onay gönderir. Write Without Response daha hızlıdır ancak teslimatı garanti etmez.

Notify ve Indicate: Peripheral, Central’e veri iletimini başlatır. Notify’da veriler onaysız gönderilir — Central paketi alamazsa kaybolur. Indicate’te Central onay (PDU düzeyi) gönderir, teslimatı garanti eder. Indicate daha yavaş ancak daha güvenilirdir. Bildirimlere abone olmak için Central, CCCD’ye (Client Characteristic Configuration Descriptor) 0x0001 değerini yazar.

MTU ve Aktarılan Veri Boyutu

MTU (Maximum Transmission Unit), tek bir BLE veri paketinin maksimum boyutunu tanımlar. Varsayılan olarak MTU 23 bayttır ve bunun 3 baytı başlıktır — yük (ATT payload) 20 bayttır. Bu, çoğu sensör verisi için yeterlidir ancak dosya aktarımı veya büyük yapılandırmalar için yeterli değildir.

Bluetooth Core Specification 5.4, MTU pazarlığını (MTU negotiation) destekler — Central ve Peripheral, 517 bayta kadar daha büyük bir paket boyutu üzerinde anlaşabilir. Süreç şöyle çalışır: Central, önerilen MTU’su ile bir MTU Exchange isteği gönderir; Peripheral kendi MTU’su ile yanıt verir; iki değerden küçük olanı kullanılır.

swift
// iOS bağlantıda MTU ister
// iOS’te maksimum MTU 185 bayttır
func peripheral(
    _ peripheral: CBPeripheral,
    didDiscoverServices error: Error?
) {
    // Belirli bir çevre birimi için MTU iste
    peripheral.maximumWriteValueLength(for: .withResponse)
}

Bluetooth SIG (2023)’e göre, MTU’yu 23’ten 185 bayta çıkarmak, daha az paket sayesinde veri iletim yükünü %80’e kadar azaltır. Yüksek frekanslı okumalar ileten uygulamalar için (örn. EKG veya ivmeölçer), MTU artışı akış kararlılığı için kritiktir.

Sıkça Sorulan Sorular

Bir hizmet kaç karakteristik içerebilir?

BLE Şartnamesi, bir hizmetteki karakteristik sayısını sınırlamaz. Pratikte sınırlama, GATT sunucusunun kullanılabilir belleği ve performans gereksinimleri tarafından belirlenir. Gömülü cihazlar için hizmet başına 10–15’ten fazla karakteristik önerilmez.

Notify ve Indicate arasındaki fark nedir?

Notify verileri onaysız gönderir — paket göndericiye haber verilmeden kaybolabilir. Indicate, protokol düzeyinde onay (ACK) gerektirir ve teslimatı garanti eder. Indicate daha yavaş ancak daha güvenilirdir. Kritik veriler (uyarılar, komutlar) için Indicate kullanın.

Bir karakteristik aynı anda Read ve Write’a sahip olabilir mi?

Evet, bir karakteristik özellik kombinasyonuna sahip olabilir. Örneğin, bir ayarlar karakteristiği Read (mevcut değeri okuma) ve Write (ayarı değiştirme) destekleyebilir. Özellikleri kullanım senaryonuza göre birleştirin.

BLE üzerinden 20 bayttan büyük veri nasıl aktarılır?

Paket boyutunu 185–517 bayta çıkarmak için MTU pazarlığını kullanın. Veriler hala daha büyükse, uygulama düzeyinde parçalamayı uygulayın: verileri bütünlük kontrolü ile birkaç sıralı isteğe bölün.

Standart karakteristik UUID’leri kullanmalı mıyım?

Göreviniz standart bir karakteristik tarafından kapsanıyorsa, Bluetooth SIG kaydından UUID’ler kullanın. Bu, sertifikasyonu basitleştirir ve ekosistem uyumluluğunu sağlar. Yalnızca benzersiz üçüncü taraf verileri için özel UUID’ler oluşturun.

Özet

  • Characteristic BLE’deki birincil veri aktarım mekanizmasıdır ve UUID, özellikler ve tanımlayıcılarla bir değeri temsil eder.
  • Özellikler (Read, Write, Notify, Indicate), karakteristik üzerinde hangi işlemlerin bulunduğunu tanımlar.
  • Bluetooth SIG, 500’den fazla standart karakteristik belirlemiştir — cihaz uyumluluğu için bunları kullanın.
  • Karakteristik oluşturma, Core Bluetooth (iOS) veya BluetoothGattCharacteristic (Android) aracılığıyla Peripheral tarafında yapılır.
  • Bildirimler (Notify/Indicate), akış verileri için düzenli yoklamadan daha verimlidir — Central’den sürekli istek gerektirmezler.
  • Tek bir paketin boyutu MTU (varsayılan 20 bayt) ile sınırlıdır ancak MTU Exchange ile 517 bayta çıkarılabilir.
  • Özelliklerin ve UUID’nin doğru seçimi, BLE bağlantısının güç tüketimini, güvenilirliğini ve performansını belirler.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun