Central, Bluetooth Low Energy mimarisinde taramayı başlatan, bağlantı kuran ve çevresel cihazlarla veri alışverişini yöneten bir cihazdır. Mobil geliştirme bağlamında Central, iOS veya Android'deki BLE sensörlerine, fitness takip cihazlarına ve akıllı aksesuarlara bağlanan bir akıllı telefon veya tablettir. Bluetooth Core Specification 5.4'e (2023) göre Central, aynı anda 7 farklı Peripheral ile eşzamanlı bağlantıyı destekleyebilir, ancak gerçek sınırlama çip üreticisine ve işletim sistemi sürümüne bağlıdır. iOS'ta Core Bluetooth ve Android'de android.bluetooth.le, Central rolünü yönetmek için eksiksiz bir API sağlar.
Önemli noktalar
Central, Bluetooth Low Energy mimarisinde tüm iletişimi başlatan bir GATT istemcisidir. Bağlantıları pasif olarak bekleyen ve hizmetlerini reklam eden Peripheral'ın aksine, Central aktif olarak ortamı tarar, reklam paketlerini keşfeder ve bağlantıları başlatır.
Asimetrik Central-Peripheral modeli, BLE'nin temel bir özelliğidir. Central, etkileşim mantığını yönetir: hangi cihaza bağlanacağına, hangi hizmetleri keşfedeceğine ve hangi özellikleri okuyup yazacağına karar verir. Peripheral bir veri sunucusu olarak çalışır — hizmetleri ve özellikleri depolar ancak bağlantıları başlatmaz.
Bluetooth Core Specification 5.4'e (2023) göre, bir cihaz aynı anda Central ve Peripheral (çift rol) olabilir. Örneğin, bir akıllı telefon fitness bandı için Central ve dosya aktaran başka bir akıllı telefon için Peripheral olabilir. Ancak, her iki rolde aynı anda çalışmak, güç tüketimini ve bağlantı yönetimi karmaşıklığını artırır.
Mobil geliştirme ekosisteminde Central rolü en yaygın senaryodur. Akıllı telefondaki bir uygulama BLE cihazlarını (sensörler, kulaklıklar, bantlar) arar, onlara bağlanır ve veri alır. Geliştirici, Central ile çalışmak için işletim sistemi API'sini kullanır: iOS'ta CBCentralManager, Android'de BluetoothLeScanner ve BluetoothGatt.
Tarama, Central'ın çalışmasının ilk aşamasıdır. Cihaz, Peripheral'ın periyodik olarak gönderdiği reklam paketlerini algılamak için BLE radyo kanallarında (37, 38, 39) dinler. Her reklam paketi, cihaz adını, Service UUID listesini ve özel verileri içerir.
Central iki tarama modunda çalışabilir: pasif tarama (yalnızca reklam paketlerini alma) ve aktif tarama (tarama yanıtı aracılığıyla ek veri almak için tarama isteği gönderme). Pasif tarama enerji tasarrufu sağlar ancak daha az bilgi verir. Aktif tarama, cihaz adı ve eksiksiz hizmet listesi dahil olmak üzere reklam paketinin tam verilerini almayı sağlar.
UUID'ye göre filtreleme önemli bir optimizasyondur. Central, yalnızca belirli bir Service UUID'ye sahip cihazları tarayabilir ve geri kalanını yok sayabilir. Bu yalnızca enerji tasarrufu sağlamakla kalmaz, aynı zamanda uygulama mantığını da basitleştirir: temsilci yalnızca ilgili cihazları alır.
import CoreBluetooth
class BLECentralManager: NSObject, CBCentralManagerDelegate {
private var centralManager: CBCentralManager!
override init() {
super.init()
centralManager = CBCentralManager(
delegate: self,
queue: nil
)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(
withServices: nil,
options: [
CBCentralManagerScanOptionAllowDuplicatesKey: false
]
)
}
}
}
Bağlantı yönetimi, Central'ın temel sorumluluğudur. Uygun bir Peripheral keşfettikten sonra Central bir bağlantı başlatır. BLE bağlantısı, bağlantı aralığı, slave gecikmesi ve denetim zaman aşımı gibi parametre alışverişini içeren bir bağlantı kurma prosedürü aracılığıyla kurulur.
Bağlantı aralığı, bağlantıdan sonra Central ve Peripheral'ın ne sıklıkta veri alışverişi yapacağını belirler. Aralık 7,5 ms ile 4 saniye arasında olabilir. Aralık ne kadar kısa olursa, verim o kadar yüksek olur, ancak güç tüketimi de o kadar yüksek olur. Slave gecikmesi, Peripheral'ın enerji tasarrufu için birden fazla bağlantı olayını atlamasına olanak tanır. Denetim zaman aşımı, yanıt alınamayan maksimum süredir ve bu sürenin sonunda bağlantının kaybolduğu varsayılır.
Central, veri alışverişi tamamlandıktan sonra bağlantıyı sonlandırmaktan sorumludur. BLE cihazları genellikle kalıcı bir bağlantıyı sürdürmez — Central bağlanır, verileri alır ve bağlantıyı keser. Bu, IoT sensörleri için standart bir modeldir: Central tarar, bir sıcaklık sensörü bulur, bağlanır, değeri okur ve bağlantıyı keser.
| Parametre | Aralık | Amaç | Öneri |
|---|---|---|---|
| Bağlantı aralığı | 7,5 ms – 4 s | Veri alışveriş sıklığı | Akış için 30–50 ms, seyrek veri için 1–4 s |
| Slave gecikmesi | 0–499 olay | Peripheral olaylarını atlama | Sensör enerji tasarrufu için 4–10 |
| Denetim zaman aşımı | 100 ms – 32 s | Bağlantı kaybı zaman aşımı | Çoğu senaryo için 6–10 saniye |
| MTU | 23–517 bayt | ATT paket boyutu | Bağlantıda maksimumu isteyin |
Core Bluetooth, iOS ve macOS'ta BLE ile çalışmak için Apple'ın framework'üdür. CBCentralManager sınıfı, Central rolünü uygulamak için eksiksiz API sağlar: tarama, bağlantı, bağlantı yönetimi. iOS'ta Central ile çalışma, bir temsilci modeline dayanır: CBCentralManagerDelegate, durum değişikliği, cihaz keşfi ve bağlantı sonuçları olaylarını alır.
iOS'ta Central için ana adımlar: CBCentralManager'ı başlatma, Bluetooth durumunu kontrol etme, taramayı başlatma, temsilci aracılığıyla keşfedilen cihazları işleme, seçilen Peripheral'a bağlanma, hizmetleri ve özellikleri keşfetme, veri alışverişi yapma.
// Keşfedilen Peripheral'a bağlan
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// Peripheral referansını koru ve bağlan
discoveredPeripheral = peripheral
central.connect(peripheral, options: nil)
}
// Başarılı bağlantı
func centralManager(
_ central: CBCentralManager,
didConnect peripheral: CBPeripheral
) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
iOS, arka plan BLE çalışmasını sınırlar: arka planda, bir uygulama yalnızca Info.plist'teki belirli anahtarlarla tarayabilir ve bağlı cihazlar Central'a veri değişikliklerini bildirebilir. Kritik uygulamalar (tıbbi cihazlar) için bluetooth-central anahtarıyla Arka Plan Modları'nı kullanın.
Android, BLE cihazlarını taramak için BluetoothLeScanner API'sini ve bağlantı yönetimi için BluetoothGatt'ı sağlar. Android 5.0'dan (API 21) itibaren BluetoothLeScanner, kullanımdan kaldırılan startLeScan'ın yerini almıştır. API, BLUETOOTH, BLUETOOTH_ADMIN ve ACCESS_FINE_LOCATION izinlerini (Android 10+ için ACCESS_BACKGROUND_LOCATION) gerektirir.
import android.bluetooth.le.*;
import android.bluetooth.*;
private BluetoothLeScanner scanner;
private BluetoothGatt bluetoothGatt;
// Taramayı yapılandır
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
// Taramayı başlat
scanner.startScan(null, settings, new ScanCallback() {
@Override
public void onScanResult(
int callbackType,
ScanResult result
) {
BluetoothDevice device = result.getDevice();
// Cihaza bağlan
bluetoothGatt = device.connectGatt(
context, false, gattCallback
);
}
});
Android'de tarama kısıtlamalarını dikkate almak önemlidir: Android 7'den (API 24) itibaren, konum kullanmayan uygulamalarda tarama 30 saniyede 5 defadan fazla başlatılamaz. Android 12+, BLUETOOTH_SCAN, BLUETOOTH_CONNECT ve ADVERTISE izinlerinin yanı sıra bu izinlerin çalışma zamanı talebini gerektirir.
Central'ın güç tüketimi, radyo kanallarını sürekli tarama ihtiyacı nedeniyle Peripheral'dan daha yüksektir. Central, BLE paketlerini alır, işler, bağlantıları yönetir ve genellikle uygulama işlemcisinde hesaplamalar yapar. Bluetooth SIG'ye göre, tarama moduna bağlı olarak 30 mA ile 100 mA arasında enerji tüketir.
Central için birkaç enerji tasarrufu stratejisi vardır. Aralıklı tarama en etkili yöntemdir: Central, uzun duraklamalarla (tarama aralığı) kısa pencerelerde (tarama penceresi) tarar. Örneğin, 30 ms'lik bir tarama penceresi ve 1000 ms'lik bir tarama aralığı ile sürekli taramaya kıyasla güç tüketimi %97 oranında azalır.
Ek bir optimizasyon da UUID filtrelemesidir. Central, yalnızca ilgili reklam paketlerini daha hızlı işler ve gerisini yok sayar. Bu, CPU yükünü azaltır ve cihazın pil ömrünü uzatır. Ayrıca, istenen cihaz bulunur bulunmaz taramayı durdurmanız ve bağlantıyı gerekenden daha uzun süre tutmamanız önerilir.
Sıkça sorulan sorular
Evet, BLE çift rolü destekler: bir cihaz aynı anda bazı cihazlar için Central ve diğerleri için Peripheral olabilir. Örneğin, bir akıllı telefon bir sensörden veri okur (Central olarak) ve aynı anda başka bir cihaza veri iletmek için kendi hizmetini reklam eder (Peripheral olarak).
BLE spesifikasyonu, tek bir Central için 7 bağlantı sınırı tanımlar. Pratikte, sınırlama çip üreticisine bağlıdır: Nordic nRF52840 yongaları 20 bağlantıya kadar desteklerken, bazı ucuz Bluetooth adaptörleri 3–4'ten fazlasını desteklemez.
Nedenler farklı olabilir: sensör reklam yapmıyor (reklam modunda değil), UUID filtresi çok katı, akıllı telefonda Bluetooth kapalı, gerekli izinler eksik (Android'de konum) veya sensör menzil dışında (iç mekanda 10 metreye kadar önerilir).
Her zaman gerekli değildir. Birçok senaryo için bağlan-ve-oku modeli kullanılır: Central tarar, bağlanır, gerekli verileri okur ve bağlantıyı keser. Sürekli bağlantı yalnızca akış verileri (nabız, EKG) veya gerçek zamanlı cihaz kontrolü için gereklidir.
30–50 ms'lik tarama penceresi ve 500–1000 ms'lik tarama aralığı ile aralıklı tarama kullanın. Yalnızca ilgili reklam paketlerini işlemek için cihazları UUID'ye göre filtreleyin. İstenen Peripheral'ı bulur bulmaz taramayı durdurun.
Özet
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.
Ayrıca okuyun