Peripheral, Bluetooth Low Energy mimarisinde hizmetlerini advertising paketleri aracılığıyla duyuran ve bir Central’dan bağlantı bekleyen bir cihazdır. IoT ekosisteminde Peripheral genellikle sınırlı güç tüketimine sahip bir cihazdır: sıcaklık sensörü, akıllı lamba, fitness bilekliği, beacon (işaret). Bluetooth Core Specification 5.4 (2023) reklam protokolünü tanımlar: Peripheral, cihaz adı, hizmet listesi ve özel verileri içeren advertising paketlerini periyodik olarak gönderirken, Central bu paketleri tarar ve bağlanıp bağlanmayacağına karar verir. Bağlantı kurulduktan sonra Peripheral, okuma ve yazma için hizmetler ve özellikler sağlayarak bir GATT sunucusu görevi görür.
Önemli Noktalar
Peripheral, bir GATT sunucusu uygulayan ve yeteneklerini advertising kanalları aracılığıyla duyuran bir BLE cihazıdır. Aktif olarak cihaz arayan Central’ın aksine, Peripheral pasif olarak bağlantıları bekler. Bu, pil ile çalışan cihazların enerji verimliliği için optimize edilmiş asimetrik bir modeldir.
Peripheral birkaç modda olabilir: advertising (reklam), connected (bir Central’a bağlı), sleeping (reklam kapalı uyku). Advertising modunda Peripheral, minimum enerji tüketerek periyodik olarak kısa veri paketleri gönderir. Bağlantıdan sonra Peripheral, üzerinde anlaşılan bağlantı aralığına göre Central ile veri alışverişi yaptığı connected moduna geçer.
Bluetooth Core Specification 5.4 (2023)’e göre, bir cihaz Peripheral ve Central rolleri arasında dinamik olarak geçiş yapabilir, ancak herhangi bir anda tek bir bağlantı için rol sabittir. Tipik bir senaryo: Bir IoT sensörü sürekli olarak Peripheral olarak çalışırken, bir akıllı telefon Central olarak bağlantıyı yönetir.
Geliştiricilerin anlaması önemlidir: Peripheral, hangi hizmetlerin ve özelliklerin kullanılabilir olduğunu belirler ve bunlara erişimi yönetir. Peripheral üzerindeki GATT sunucu yapısı, Central’ın hangi verileri okuyabileceğini ve hangi komutları yazabileceğini belirler.
Advertising, Peripheral’ın varlığını duyurduğu mekanizmadır. Peripheral, üç özel kanalda (37, 38, 39) 20 ms ile 10,24 saniye arasında bir aralıkla advertising paketleri gönderir. Her advertising paketi sabit bilgiler içerir ve isteğe bağlı veriler içerebilir.
İki tür advertising paketi vardır: advertising PDU (ana paket) ve scan response PDU (Central talebine yanıt). Ana paket zorunlu alanları içerir: paket türü, gönderici adresi, veriler. Bir Central tarama talebi gönderirse, Peripheral daha eksiksiz bilgi içeren ek bir paketle yanıt verir — örneğin, tam cihaz adı.
Advertising parametreleri keşif hızını ve güç tüketimini etkiler. Advertising interval, paket iletimleri arasındaki süredir. Aralık ne kadar kısa olursa, Central cihazı o kadar hızlı keşfeder, ancak Peripheral o kadar fazla güç tüketir. Önerilen aralık: çoğu cihaz için 100–1000 ms.
| Parametre | Aralık | Etki | Öneri |
|---|---|---|---|
| Advertising Interval | 20 ms – 10,24 s | Keşif hızı, güç | Denge için 100–1000 ms |
| Advertising Channels | 37, 38, 39 | Keşif güvenilirliği | 3 kanalın tümü zorunlu |
| Tx Gücü | -20 – +10 dBm | Menzil, parazit | 0 dBm iç mekan, +4 dBm dış mekan |
| Advertising Timeout | 0 – 180 saniye | Reklam süresi | Beacon’lar için 0 (sonsuz) |
BLE advertising paketi, advertising PDU için 31 bayt ve scan response için ek 31 bayt sınırına sahiptir. Paket içinde veriler AD Structure (Advertising Data Structure) formatında düzenlenir: her alan bir tür (1 bayt), uzunluk (1 bayt) ve değer içerir.
En yaygın kullanılan AD türleri: Flags (0x01) — bağlantı ve keşif modları, Local Name (0x08 veya 0x09) — cihaz adı, Service UUID List (0x02–0x07) — hizmet UUID’leri listesi, Manufacturer Specific Data (0xFF) — üretici verileri. 31 baytlık bir pakete verileri doğru şekilde paketlemek, gömülü cihaz geliştiricileri için önemli bir görevdir.
Daha fazla veri iletmesi gereken cihazlar için extended advertising (BLE 5.0+), advertising paketi boyutunu 251 bayta çıkarır ve yeni paket türleri ekler. Extended advertising ayrıca açık alanlarda 1 km’ye kadar artırılmış menzil için kodlanmış PHY kanallarını da destekler.
Bir advertising paketi tasarlarken şunu unutmayın: advertising paketinde ne kadar çok veri varsa, diğer cihazlarla çarpışma olasılığı o kadar yüksektir. Hızlı keşif için, advertising PDU’suna yalnızca kritik verileri (Service UUID) ve ek verileri scan response’a koymanız önerilir.
GATT sunucusu Peripheral üzerinde, Central’ın keşfedebileceği ve etkileşim kurabileceği tüm hizmetleri ve özellikleri içerir. Bağlantıdan sonra Central, hizmetleri, ardından özellikleri keşfeder ve GATT protokolü aracılığıyla bunlarla etkileşime girer.
Peripheral bir GATT sunucusu olarak Central’ın taleplerini doğru şekilde işlemelidir: okuma talepleri, yazma talepleri, bildirimler ve göstergeler. Her talep GATT tablosundan geçer; burada her öznitelik (hizmet, özellik, tanımlayıcı) bir Handle — 16 bitlik bir adres — ile eşleşir.
Peripheral geliştiricisi, her öznitelik için erişim izinlerini tanımlar: yalnızca okuma, yalnızca yazma, okuma ve yazma, şifrelemeli veya şifrelemesiz. Hassas veriler (kişisel bilgiler, tıbbi göstergeler) için MITM Protection aracılığıyla şifreleme gereksinimlerinin etkinleştirilmesi önerilir.
CBPeripheralManager, iOS’ta Peripheral rolünü uygulamak için bir Core Bluetooth sınıfıdır. GATT sunucusunu yönetir, hizmetleri ve özellikleri yayınlar ve Central’lardan gelen talepleri işler. CBCentralManager’ın aksine, CBPeripheralManager tarama yapmaz — yalnızca reklam yapar ve bağlantıları yönetir.
iOS’ta Peripheral uygulamanın ana adımları: CBPeripheralManager’ı başlatma, add ile hizmet ekleme, startAdvertising ile reklam başlatma, CBPeripheralManagerDelegate aracılığıyla Central’lardan gelen talepleri işleme.
import CoreBluetooth
class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startAdvertising() {
let advertisementData: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Sensor",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
]
]
peripheralManager.startAdvertising(advertisementData)
}
func peripheralManagerDidUpdateState(
_ peripheral: CBPeripheralManager
) {
if peripheral.state == .poweredOn {
startAdvertising()
}
}
}
iOS, Peripheral’ın Background Modes’da bluetooth-peripheral anahtarıyla arka planda çalışmasına izin verir. Arka planda iOS, sınırlı bir veri setiyle reklam yapabilir ve bağlantıları yönetebilir. Uzun süreli reklam için (180 saniyeden fazla), güç tasarrufu için CBAdvertisementDataWaitForResponseFromCentral seçeneğini kullanın.
Android, Peripheral rolünde çalışmak için BluetoothLeAdvertiser sağlar (API 21’den itibaren). API, yapılandırılabilir parametrelerle reklam başlatmaya izin verir: verici gücü, reklam aralığı, paket verileri. Android ayrıca uyumlu cihazlarda extended advertising’i (BLE 5.0) destekler.
import android.bluetooth.le.*;
private BluetoothLeAdvertiser advertiser;
public void startPeripheral() {
BluetoothAdapter adapter =
BluetoothAdapter.getDefaultAdapter();
advertiser = adapter.getBluetoothLeAdvertiser();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(
new ParcelUuid(
UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB")
)
)
.build();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
}
Android’de Peripheral desteği üreticiye ve işletim sistemi sürümüne bağlıdır. Tüm cihazlar BluetoothLeAdvertiser’ı desteklemez — adapter.isMultipleAdvertisementSupported() ile kontrol edin. Android 10’dan itibaren, Peripheral rolü için BLUETOOTH_ADVERTISE izni gerekir ve target SDK 31+ olan uygulamalar için çalışma zamanı talebi de gerekir.
Enerji verimliliği BLE’nin önemli bir avantajıdır ve Peripheral bunda önemli bir rol oynar. Bir cihaz, optimize edilmiş güç tüketimi sayesinde bir CR2032 pil (220 mAh) ile bir yıldan fazla çalışabilir. Peripheral zamanın çoğunu reklamı kapalı uyku modunda geçirir ve yalnızca bir advertising paketi göndermek veya bir Central’dan gelen talebi işlemek için uyanır.
Peripheral’ın farklı modlarda güç tüketimi: uyku modu (derin uyku) — 1–5 µA, zamanlayıcı etkinken boşta — 10–50 µA, advertising — 5–15 mA (paket iletimi sırasında), connected — 5–10 mA (bağlantı olayı sırasında). 1000 ms advertising aralığı ve 4 ms paket süresi ile ortalama akım yaklaşık 50–100 µA’dır.
Texas Instruments Application Report (SWRA478, 2024)’e göre, advertising aralığını 100 ms’den 1000 ms’ye optimize etmek, ortalama güç tüketimini %90 oranında azaltır. Ek tasarruflar, slave latency (bağlantı olaylarını atlama), kısa mesafelerde Tx gücünü azaltma ve bağlantıdan sonra reklamı devre dışı bırakma (connectable advertising) yoluyla elde edilir.
Sıkça Sorulan Sorular
Evet, bildirim/gösterge mekanizması aracılığıyla. Bağlantıyı başlatan her zaman Central olsa da, bağlantıdan sonra Peripheral, Central’ın açık talebi olmadan GATT bildirimleri aracılığıyla veri gönderebilir. Bunun için Central’ın önce CCCD aracılığıyla abone olması gerekir.
Reklam süresi teknik özelliklerle sınırlı değildir, ancak pratikte pil gücüyle sınırlıdır. iOS’ta, bir Peripheral ek ayarlar olmadan oturum başına en fazla 180 saniye arka planda reklam yapabilir. Android’de reklam sınırsız çalışabilir, ancak pil ömrünü önemli ölçüde azaltır.
Advertising aralığını artırın (önerilen 500–1000 ms), bağlantı olaylarını atlamak için slave latency kullanın, bağlantıdan sonra reklamı devre dışı bırakın ve gerekli mesafede istikrarlı iletişim için yeterli minimum Tx gücünü seçin.
Non-connectable advertising, Peripheral’ın reklam yaptığı ancak bağlantı taleplerini kabul etmediği bir moddur. Çift yönlü bağlantı kurmadan yalnızca veri ileten beacon’lar için kullanılır (örneğin, bir mağaza tanımlayıcısı). Connectable advertising’e göre enerji tasarrufu sağlar.
31 bayta şunlar dahil edilebilir: flags (3 bayt), cihaz adı (kısaltılmış biçimde 28 bayta kadar), bir hizmet UUID’leri listesi (UUID başına 2–16 bayt), üretici verileri (26 bayta kadar). En uygun strateji, filtreleme için advertising PDU’suna hizmet UUID’lerini ve tarama yanıtına tam adı koymaktır.
Ö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