Advertising Data, bir BLE cihazının kendisini ve hizmetlerini tanımlamak için reklam paketlerinde ilettiği yapılandırılmış verilerdir. Bluetooth Core Specification 5.4 (2023), AD Structure formatını tanımlar: her öğe bir uzunluk (1 bayt), tür (1 bayt) ve değer (29 bayta kadar) içerir. Spesifikasyon, Flags ve Local Name'den Service UUID ve Manufacturer Specific Data'ya kadar 30'dan fazla AD türünü açıklar. advertising data'nın doğru paketlenmesi, cihazın iOS, Android ve diğer platformlarla uyumluluğu için kritiktir ve ayrıca keşif hızını ve reklam enerji verimliliğini belirler.
Önemli Noktalar
Advertising Data, bir BLE cihazının kendisini tanımlamak ve yeteneklerini açıklamak için reklam paketlerinde ilettiği yapılandırılmış bir alan kümesidir. Central, havayı tarayarak bu verileri okur ve cihaza bağlanmaya, onu yoksaymaya veya Scan Response aracılığıyla ek bilgi istemeye karar verir.
Veriler TLV (Type-Length-Value) ilkesine göre düzenlenir: her AD öğesi üç alandan oluşur. Length (1 bayt), Value + Type'ın uzunluğudur (yani öğenin toplam uzunluğu eksi Length için 1 bayt). Type (1 bayt), Bluetooth Assigned Numbers'dan veri türü tanımlayıcısıdır. Value (N bayt), türe bağlı olarak içeriktir.
Standart bir reklam paketi, 31 bayta kadar AD verisi içerebilir. Bu yeterli değilse, Scan Response (ek 31 bayt) veya Extended Advertising (BLE 5.0, 251 bayta kadar) kullanılır. Reklam paketinin ilk baytları PDU başlığı ve cihaz adresi için ayrılmıştır — AD yükü bir ofsetten başlar.
Her AD öğesi reklam paketinde Length alanıyla (1 bayt) başlar. Length değeri, Length'den sonra gelen bayt sayısını belirtir — yani Type + Value. Örneğin, Length=3 olan bir öğe, Length'den sonra 1 bayt Type ve 2 bayt Value olduğu anlamına gelir. Tüm öğelerin uzunluklarının toplamı reklam verisi boyutuna ulaştığında paket sona erer.
| Alan | Boyut | Açıklama |
|---|---|---|
| Length | 1 bayt | Type + Value uzunluğu (Length hariç) |
| Type (AD Type) | 1 bayt | Bluetooth SIG'den veri türü tanımlayıcısı |
| Value | 0–29 bayt | Belirtilen türdeki veri |
Central ayrıştırıcısı, başlıktan sonraki ilk bayttan başlayarak AD öğelerinin sırasını okur. Length=0 ise öğe yoksayılır ve ayrıştırıcı sonraki bayta geçer. Yinelenen AD türleri (bir pakette aynı Type'a sahip birden çok öğe) izin verilir, ancak Central yığın uygulamasına bağlı olarak yalnızca ilk veya son öğeyi işleyebilir.
Önemli bir kural: paketteki tüm Length(+1) toplamı, reklam verisi boyutunu (advertising PDU için 31 bayt) aşmamalıdır. Veri sığmazsa, öncelikler belirlenmelidir — hangi AD türlerinin ilk keşif için kritik olduğu ve hangilerinin Scan Response'a taşınabileceği.
Flags (AD Type 0x01), herhangi bir BLE cihazının reklam paketinde zorunlu bir öğedir. 3 bayt yer kaplar: Length (0x02), Type (0x01), Value (1 bayt bit bayrakları). Bayraklar, keşif modlarını ve cihaz yeteneklerini tanımlar. Core Specification, her reklam paketine Flags eklenmesini önerir.
Ana bayraklar: LE Limited Discoverable Mode (bit 0) — cihaz sınırlı süreyle keşfedilebilir, LE General Discoverable Mode (bit 1) — cihaz her zaman keşfedilebilir, BR/EDR Not Supported (bit 2) — cihaz yalnızca LE'yi destekler, Simultaneous LE and BR/EDR (bit 3) — her iki modu da destekler. Tamamen BLE cihazları için LE General Discoverable + BR/EDR Not Supported kombinasyonu zorunludur.
Yanlış Flags değeri, bir cihazın iOS veya Android'de algılanmamasının yaygın nedenlerinden biridir. Örneğin, BR/EDR Not Supported bayrağı ayarlanmazsa, iOS BLE yerine klasik Bluetooth üzerinden bağlanmayı deneyebilir. Bir Bluetooth analizörü (nRF Connect, Wireshark) ile reklam paketinde hata ayıklarken Flags değerini kontrol edin.
Local Name (AD Type 0x08 veya 0x09), BLE cihazının görünen adıdır. Type 0x08 (Shortened Local Name) kısaltılmış addır ve tam ad reklam paketine sığmadığında kullanılır. Type 0x09 (Complete Local Name) cihazın tam adıdır. Maksimum ad uzunluğu 248 bayttır, ancak standart bir reklam paketinde en fazla 28 bayt kullanılabilir.
Cihaz adı, reklam paketindeki kullanılabilir alanı aşarsa, kısaltılmış adın advertising PDU'ya (tür 0x08) ve tam adın Scan Response'a (tür 0x09) yerleştirilmesi önerilir. iOS tarama sırasında reklam paketindeki adı görüntülerken, tam ad bağlantı veya Scan Response'dan sonra kullanılabilir hale gelir.
Bir cihaz adı seçerken, çok uzun bir adın Service UUID veya diğer önemli veriler için kullanılabilecek alanı kapladığını unutmayın. Önerilen ad uzunluğu 8–16 karakterdir. Standart olmayan karakterlerden ve boşluklardan kaçının — bazı BLE yığınları bunları yanlış işleyebilir.
Service UUID (AD Type 0x02–0x07), Central'ın cihaza bağlanmadan hangi hizmetleri sağladığını belirlemesine izin veren en önemli AD türlerinden biridir. Bluetooth SIG, boyuta bağlı olarak birden çok UUID iletim formatı tanımlar: 0x02 (Incomplete 16-bit), 0x03 (Complete 16-bit), 0x04 (Incomplete 32-bit), 0x05 (Complete 32-bit), 0x06 (Incomplete 128-bit), 0x07 (Complete 128-bit).
16-bit UUID (2 bayt) standart Bluetooth SIG hizmetleri içindir, örneğin 0x180F (Battery Service), 0x180A (Device Information). 128-bit UUID (16 bayt) geliştirici tarafından tanımlanan özel hizmetler içindir. 16-bit UUID, AD'de yalnızca 4 bayt (Length + Type + 2 bayt UUID) yer kaplarken, 128-bit UUID 18 bayt yer kaplar. Bir pakette birden çok özel UUID iletilmesi gerekiyorsa, 31 bayta sığmayabilirler.
Cihazın tüm UUID'leri değil, yalnızca filtreleme için en önemli olanlar iletilirse Incomplete (0x02/0x04/0x06) türünün kullanılması önerilir. UUID'lerin tam listesi, bağlantıdan sonra Scan Response veya GATT Discovery aracılığıyla iletilir. Bu, diğer AD türleri için reklam paketinde yer tasarrufu sağlar.
Manufacturer Specific Data (AD Type 0xFF), üreticinin özel verilerini iletmek için tasarlanmış en esnek AD türüdür. Value'nun ilk 2 baytı, Bluetooth SIG tarafından atanan Company Identifier Code'dur (örneğin, Apple için 0x004C, Samsung için 0x0075). Kalan baytlar, üretici tarafından tanımlanan formatta isteğe bağlı verilerdir.
Apple, iBeacon için Manufacturer Data kullanır: Company ID (0x004C), Beacon türü (0x0215), UUID (16 bayt), Major (2 bayt), Minor (2 bayt), TX Power (1 bayt). Google, Eddystone için benzer bir format kullanır. IoT cihaz üreticileri genellikle sensör okumalarını veya cihaz durumunu Manufacturer Data'ya yerleştirir.
// Parse Manufacturer Specific Data on Central
function parseManufacturerData(data) {
const view = new DataView(data.buffer);
// Company Identifier Code (first 2 bytes)
const companyId = view.getUint16(0, true);
// Check for Apple iBeacon
if (companyId === 0x004C) {
return parseIBeacon(view);
}
return null;
}
Manufacturer Data kullanırken boyut sınırlamasına uymak önemlidir: zorunlu AD türleri hariç tüm reklam paketi için 31 bayt. Apple iBeacon için tüm paket 30 bayt yer kaplar ve yalnızca Flags (3 bayt) için alan bırakır. Eddystone için — 31 bayta kadar. Kompakt özel formatlar, 4–8 baytta sıcaklık, nem veya basınç içerebilir.
Advertising data'nın doğru paketlenmesi, 31 baytlık sınırlı alana maksimum faydalı bilgiyi yerleştirme sanatıdır. Strateji, cihazın amacına bağlıdır: bir işaretçinin bir tanımlayıcıya, bir IoT sensörünün okumalara, bir fitness takipçisinin bir ada ve hizmet UUID'lerine ihtiyacı vardır. Genel ilke: Central ne kadar hızlı karar vermeliyse, advertising PDU'daki veriler o kadar kritik olmalıdır.
Önerilen strateji: advertising PDU (ilk 31 bayt) — Flags (3 bayt) + bir 16-bit Service UUID (4 bayt) + kısaltılmış ad (12 karaktere kadar = 14 bayt) + Manufacturer Data (10 bayta kadar). Scan Response (ikinci 31 bayt) — tam ad (kalan) + ek Service UUID'ler + TX Power Level (3 bayt). Bu dağılım, Central'ın cihazları UUID'ye göre hızla filtrelemesini sağlar.
| Öncelik | AD Türü | Boyut | Yerleştir |
|---|---|---|---|
| 1 (zorunlu) | Flags (0x01) | 3 bayt | Advertising PDU |
| 2 (filtreleme) | Service UUID (0x02–0x03) | 4+ bayt | Advertising PDU |
| 3 (tanımlama) | Local Name (0x08–0x09) | 2+ bayt | Advertising PDU (kısaltılmış) |
| 4 (ek) | TX Power Level (0x0A) | 3 bayt | Scan Response |
| 5 (özel) | Manufacturer Data (0xFF) | 4+ bayt | Advertising PDU / Scan Response |
| 6 (tam veri) | Kalan UUID'ler | Boyuta göre | Scan Response |
Advertising data'da hata ayıklama, BLE cihaz geliştirmenin zorunlu bir aşamasıdır. Paketin ham verilerini görüntülemek için nRF Connect (Nordic Semiconductor) veya bir Bluetooth analizörüyle Wireshark kullanın. Tüm AD türlerinin doğru Length'e sahip olduğunu, uzunlukların toplamının 31 baytı aşmadığını ve Flags'ın kullanım senaryonuz için doğru ayarlandığını kontrol edin.
Sıkça Sorulan Sorular
Bluetooth Controller yığını, sınırı aşan verileri atar veya paketi göndermez. Reklam paketini oluştururken AD öğelerinin toplam uzunluğunu kontrol edin. Veri sığmazsa, bir kısmını Scan Response'a taşıyın veya 251 bayt sınırıyla Extended Advertising (BLE 5.0) kullanın.
Evet, Manufacturer Specific Data (0xFF) aracılığıyla. Okumaları 4–8 bayta paketleyin: örneğin, sıcaklık (sabit nokta formatında 2 bayt), nem (2 bayt), pil voltajı (2 bayt). Bu yaklaşım, Central'ın bağlanmadan veri okumasını sağlayarak enerji tasarrufu yapar.
Özel hizmetler için 128-bit UUID (AD Type 0x06–0x07) kullanın. UUID, advertising PDU'ya (UUID başına 16 bayt) sığmazsa, Scan Response'a taşıyın veya yalnızca ilk bir veya iki UUID'yi belirtmek için Incomplete kısaltılmış formatını (0x06) kullanın.
Complete — pakette cihazın tüm hizmet UUID'leri listelenir. Incomplete — UUID'lerin yalnızca bir kısmı (genellikle en önemlileri). Central, Incomplete'i tam bir liste olarak güvenemez, ancak hızlı filtreleme için kullanır. Tam liste, GATT Discovery'den sonra kullanılabilir.
Yaygın bir neden, yanlış Flags (0x01) değeridir. BR/EDR Not Supported bitinin ayarlandığından emin olun. İkinci neden, reklam paketinde Service UUID'nin olmamasıdır (iOS UUID'ye göre filtreler). Üçüncü neden, cihazın çok seyrek reklam yapmasıdır (iOS, 1000 ms'den fazla olmayan bir aralık bekler).
Ö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