Mobil Geliştirmede Bluetooth Low Energy (BLE): Nedir, Protokoller ve Nasıl Çalışır

Yazar: IT Sectr Yayınlanma: 2026-07-25 Okuma süresi: 11 dk

Bluetooth Low Energy (BLE), minimum güç tüketimiyle küçük miktarlarda veri iletmek için optimize edilmiş kablosuz iletişim standardıdır. Bluetooth SIG, 2025'e göre, teknoloji dünya çapında 5 milyardan fazla cihazda kullanılmaktadır. GATT (Generic Attribute Profile), verileri Service → Characteristic → Descriptor hiyerarşisinde düzenler ve bu, iOS ve Android için tüm BLE uygulamalarının temelini oluşturur.

Önemli Noktalar

  • GATT — Service → Characteristic → Descriptor hiyerarşisine sahip Bluetooth Low Energy veri değişim protokolü
  • Core Bluetooth — iOS'ta BLE ile çalışmak için Apple framework'ü, CBCentralManager ve CBPeripheral tabanlı
  • BluetoothGatt — BluetoothLeScanner aracılığıyla Android'de BLE bağlantıları için ana API
  • iBeacon — iOS'ta CLLocationManager aracılığıyla yerel destekli Apple BLE işaret protokolü
  • Bonding — tekrarlanan tarama ve eşleştirmeyi ortadan kaldıran kalıcı şifreli bağlantı

Bluetooth Low Energy (BLE) Nedir ve Nasıl Çalışır?

Bluetooth Low Energy (BLE), iki rollü (Central (mobil cihaz) ve Peripheral (cihaz)) istemci-sunucu modelinde çalışır. Central havayı tarar ve bağlantıyı başlatırken, Peripheral veri iletir. Klasik Bluetooth'un aksine, BLE ses akışları için tasarlanmamıştır — görevi minimum güç tüketimiyle küçük paketler iletmektir. Bluetooth SIG Core Specification 5.4'e (2025) göre BLE, aktif modda 15 mA'nin altında akımla 2 Mbps'ye kadar hızları destekler.

GATT Hiyerarşisi: Service, Characteristic, Descriptor

GATT (Generic Attribute Profile), Bluetooth Low Energy'nin veri yapısını tanımlar. Service, özelliklerin mantıksal bir grubudur (örneğin, Heart Rate Service 0x180D). Characteristic, belirli bir değere sahip veri noktasıdır. Descriptor, bildirim yönetimi için CCCD dahil olmak üzere özellik meta verileridir. Her öğenin bir UUID'si vardır — standart Bluetooth SIG profilleri için 16 bit veya özel için 128 bit.

Mobil uygulamalarda Bluetooth Low Energy, akıllı telefon ve çevre birimleri arasındaki veri alışverişini düzenlemek için bu hiyerarşiyi kullanır. GATT'ın doğru anlaşılması, her iki platformda da BLE uygulamaları geliştirmenin temelidir. Geliştirici, cihazın hizmet ve özelliklerinin UUID'lerini ve her özelliğin özelliklerini (read, write, notify, indicate) bilmelidir.

Advertising Data ve Scan Response

BLE cihazları, keşif için reklam paketleri (advertising packets) iletir. Advertising Data, cihaz adını, hizmet UUID'lerini, RSSI ve Manufacturer Specific Data'yı içerir. Reklam paketi boyutu 31 bayt ile sınırlıdır. Ek veri iletmek için, merkezi cihazın keşiften sonra talep ettiği ikinci bir paket olan Scan Response kullanılır.

iOS'ta BLE: Core Bluetooth, CBCentralManager, CBPeripheral

iOS'ta Core Bluetooth framework'ü Bluetooth Low Energy'yi yönetir. CBCentralManager tarama ve bağlantıyı yönetir, CBPeripheral uzak bir BLE cihazını temsil eder. Süreç standarttır: CBCentralManager'ı başlatma, poweredOn durumunu kontrol etme, scanForPeripherals'ı başlatma, bağlanma ve hizmetleri keşfetme. Core Bluetooth, radyo modülünün gücünü otomatik olarak yönetir — BLE kullanılmıyorsa kapanır.

iOS'ta mobil geliştirmede BLE, arka plan modlarının dikkate alınmasını gerektirir. Core Bluetooth arka plan modu, projenin Capabilities (Uses Bluetooth LE accessories) aracılığıyla etkinleştirilir. Arka planda, uygulama özelliklerden bildirim alabilir ancak tarama sınırlıdır — sistem yalnızca cihaz hareket ettiğinde taramayı yeniden başlatır. iBeacon için, CLLocationManager aracılığıyla arka plan taraması daha aktif çalışır.

Swift'te BLE Tarama Örneği

swift
import CoreBluetooth

class DeviceScanner: NSObject, CBCentralManagerDelegate {
    var centralManager: CBCentralManager!

    func start() {
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        guard central.state == .poweredOn else { return }
        central.scanForPeripherals(withServices: nil, options: nil)
    }

    func centralManager(_ central: CBCentralManager,
                        didDiscover peripheral: CBPeripheral,
                        advertisementData: [String: Any],
                        rssi RSSI: NSNumber) {
        print("Bulundu: \(peripheral.name ?? "unknown")")
    }
}

Bu örnekte, CBCentralManagerDelegate tüm BLE bağlantı olaylarını işler. centralManagerDidUpdateState yöntemi, mobil cihazda Bluetooth'un etkin olup olmadığını kontrol eder. Başarılı başlatmadan sonra tarama başlar. Bulunan her cihaz için didDiscover geri çağrısı tetiklenir.

Core Bluetooth'ta Bağlanma ve Özellik Okuma

Bir cihazı keşfettikten sonra connect ve discoverServices'ı çağırmak gerekir. CBPeripheralDelegate, her adımı işlemek için yöntemler sağlar: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Her yöntem asenkrondur — veriler temsilci geri çağrıları aracılığıyla gelir. RSSI (Received Signal Strength Indicator) sinyal seviyesini gösterir: değer 0'a ne kadar yakınsa, sinyal o kadar güçlüdür.

Android'de BLE: BluetoothAdapter, BluetoothGatt, BluetoothLeScanner

Android'de Bluetooth Low Energy, android.bluetooth paketi aracılığıyla uygulanır. BluetoothAdapter, tüm BLE işlemleri için giriş noktasıdır. BluetoothLeScanner, ScanCallback geri çağrılarıyla taramayı başlatır. Bir cihaz keşfedildikten sonra BluetoothGatt oluşturulur — çevre birimine bir bağlantı. BluetoothGattCallback olayları işler: bağlantı, hizmet keşfi, özellik okuma, RSSI değişiklikleri.

Android'de mobil uygulamalarda Bluetooth Low Energy, açık BLUETOOTH_SCAN, BLUETOOTH_CONNECT ve ACCESS_FINE_LOCATION izinleri gerektirir. Android 12'den itibaren izinler ayrılmıştır: tarama için BLUETOOTH_SCAN, bağlanmak için BLUETOOTH_CONNECT. ACCESS_FINE_LOCATION yalnızca belirli cihaz türlerini taramak için gereklidir. Bu izinler olmadan uygulama BLE ile çalışamaz.

Kotlin'de BLE Tarama Örneği

kotlin
class BLEScanner(private val bluetoothAdapter: BluetoothAdapter) {

    fun startScan() {
        val scanner = bluetoothAdapter.bluetoothLeScanner
        val settings = ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
            .build()
        scanner.startScan(null, settings, scanCallback)
    }

    private val scanCallback = object : ScanCallback() {
        override fun onScanResult(callbackType: Int, result: ScanResult) {
            val device = result.device
            val rssi = result.rssi
            Log.d("BLE", "Cihaz: ${device.name}, RSSI: $rssi")
        }
    }
}

ScanSettings, tarama modunu yapılandırmanıza olanak tanır: pil tasarrufu için LOW_POWER, standart görevler için BALANCED, maksimum keşif hızı için LOW_LATENCY. ScanFilter, hizmet UUID'si, cihaz adı veya MAC adresine göre aramayı daraltır. Filtreleme, güç tüketimini azaltır ve istenen cihazın keşfini hızlandırır.

BluetoothGatt: Android'de Okuma ve Bildirimler

connectGatt aracılığıyla BluetoothGatt oluşturduktan sonra uygulama discoverServices'ı çağırır. BluetoothGattCallback, onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged içerir. Özellik değişiklikleri hakkında bildirim almak için setCharacteristicNotification çağrılmalıdır. Süreç dikkat gerektirir: her GATT işlemi asenkrondur ve sonuç ayrı bir geri çağrıda gelir.

BLE Ekosisteminde iBeacon, Bonding ve Advertising Data

iBeacon, UUID, Major ve Minor ileten BLE işaretleri için Apple teknolojisidir. İşaret cihazı bir reklam paketi yayınlar ve mobil uygulama bu verilere dayanarak konum ve mesafeyi belirler. iOS'ta iBeacon, CLLocationManager aracılığıyla yerel olarak desteklenir. Android'de üçüncü taraf bir kütüphane gerekir (örneğin, AltBeacon veya Android iBeacon Library).

Bonding, BLE cihazları arasında kalıcı güvenli bağlantı oluşturma prosedürüdür. Bonding'den sonra şifreleme anahtarları kaydedilir ve cihazlar tekrar yaklaştıklarında otomatik olarak bağlanır. iOS'ta bonding sistem tarafından otomatik olarak yönetilir. Android'de — BluetoothDevice.createBond() aracılığıyla. Bonding, hızlı yeniden bağlantı gerektiren giyilebilir cihazlar ve fitness takipçileri için önemlidir.

Reklam Paketleri ve Manufacturer Specific Data

Advertising Data, Bluetooth Low Energy'de anahtar bir keşif mekanizmasıdır. Cihaz üreticileri, özel verileri iletmek için reklam paketine Manufacturer Specific Data ekleyebilir. Paket formatı, Company Identifier (2 bayt) ve isteğe bağlı veri içerir. iOS'ta CBCentralManager, filtreleme için hizmet UUID'leri dizisini kabul eder — bu pil tasarrufu sağlar. Android'de ScanFilter aynı prensipte çalışır.

BLE Geliştirme için iOS ve Android Karşılaştırması

ParametreiOS (Core Bluetooth)Android (BluetoothGatt)
YöneticiCBCentralManagerBluetoothLeScanner
Bağlantıconnect(to:)connectGatt()
HizmetlerdiscoverServices()discoverServices()
OkumareadValue(for:)readCharacteristic()
BildirimlersetNotifyValue(_:for:)setCharacteristicNotification()
İzinlerOtomatikBLUETOOTH_SCAN, BLUETOOTH_CONNECT
iBeaconCLLocationManager (yerel)AltBeacon / kütüphaneler

BLE Optimizasyonu: MTU, Connection Interval ve Arka Plan Modu

MTU (Maximum Transmission Unit), tek bir Bluetooth Low Energy veri paketinin maksimum boyutudur. Varsayılan olarak MTU 23 bayttır (3 bayt başlık + 20 bayt veri). MTU'yu 512 bayta çıkarmak, yapılandırma veya günlük alışverişinde iletimi önemli ölçüde hızlandırır. iOS'ta maximumWriteValueLength, kullanılabilir MTU'yu gösterir. Android'de MTU'yu artırmak için requestMtu() kullanılır.

Connection Interval, merkezi cihazın çevre birimini yoklama sıklığıdır. Aralık ne kadar kısaysa, iletim hızı o kadar yüksek, ancak güç tüketimi de o kadar fazladır. Tipik değerler 7,5 ms'den 4 saniyeye kadar değişir. Fitness takipçileri için 100 ms yeterlidir; ses için — 7,5 ms. Mobil geliştirmede BLE, iletim hızı ve cihaz pil ömrü arasında denge gerektirir.

iOS ve Android'de Arka Plan Modu

iOS, Background Modes aracılığıyla BLE'yi arka planda destekler, ancak sınırlamalarla. Arka plandaki uygulama özelliklerden bildirim alır ancak aktif olarak tarayamaz. Sistem, cihazın konumu değiştiğinde taramayı yeniden başlatır. Android'de arka plan taraması, kalıcı bir bildirimle Foreground Service gerektirir. Aksi takdirde, mobil sistem uygulama simge durumuna küçültüldüğünde işlemi sonlandırır.

Pratik Optimizasyon Önerileri

Mobil uygulamalarda güvenilir BLE çalışması için şu kuralları izleyin. Polling yerine notify kullanın — bildirimli bir özellik değiştiğinde veri gönderir, pil tasarrufu sağlar. Bağlantının başında optimum MTU'yu ayarlayın. Tarama sırasında hizmet UUID'sine göre cihazları filtreleyin. Farklı modellerde BLE yığını uyumluluğunu kontrol edin — üreticiler (Xiaomi, Huawei, Samsung) Bluetooth davranışını etkileyen değişiklikler yapar.

Sıkça Sorulan Sorular

BLE, klasik Bluetooth'tan nasıl farklıdır?

Bluetooth Low Energy (BLE), düşük güç tüketimiyle küçük paketlerin periyodik iletimi için optimize edilmiştir. Klasik Bluetooth, ses akışları ve büyük hacimli verilerin sürekli iletimi için tasarlanmıştır.

Bluetooth Low Energy'de GATT nedir?

GATT (Generic Attribute Profile), Service → Characteristic → Descriptor hiyerarşisini tanımlayan BLE'de bir veri değişim protokolüdür. GATT, BLE cihazlarından veri okumak, yazmak ve bildirim almak için kullanılır.

Android neden BLE için ACCESS_FINE_LOCATION izni gerektiriyor?

Android 12'den önce BLE taraması konum belirlemek için kullanılabiliyordu, bu nedenle Google bu izinleri birleştirdi. Android 12'den itibaren, konumla bağlantısı olmayan ayrı bir BLUETOOTH_SCAN izni getirilmiştir.

BLE veri aktarım hızı nasıl artırılır?

Android'de requestMtu() ve iOS'ta maximumWriteValueLength ile MTU'yu artırın. Connection Interval da hızı etkiler — ne kadar küçükse, aktarım o kadar hızlıdır. Optimum kombinasyon 10 kata kadar iyileştirme sağlar.

BLE'de Bonding nedir?

Bonding, BLE cihazları arasında kalıcı güvenli bağlantı oluşturma prosedürüdür. Bonding'den sonra şifreleme anahtarları kaydedilir ve cihazlar tekrarlanan arama olmadan otomatik olarak bağlanır.

Özet

  • Bluetooth Low Energy — minimum güç tüketimi ve 2 Mbps'ye kadar hız ile IoT için kablosuz iletişim standardı
  • GATT, verileri her öğe için UUID'lerle Service → Characteristic → Descriptor hiyerarşisinde düzenler
  • Core Bluetooth — CBCentralManager, CBPeripheral ve arka plan modlarıyla iOS'ta BLE için Apple framework'ü
  • BluetoothGatt — BluetoothAdapter, BluetoothLeScanner ve açık BLUETOOTH_SCAN izinleriyle ana Android API
  • iBeacon — CLLocationManager aracılığıyla iOS'ta yerel destekli BLE işaret teknolojisi
  • Bonding, şifreleme anahtarlarını kaydettikten sonra otomatik yeniden bağlanmayı sağlar
  • Mobil uygulamalarda Bluetooth Low Energy, MTU, Connection Interval ve platform arka plan sınırlamalarının dikkate alınmasını gerektirir

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ış