11.2. BLE yığını

Ağ iletişimi gibi, Bluetooth Low Energy de her biri tek bir sorunu çözen ve üstündeki katmana temiz bir soyutlama sunan katmanlardan oluşan bir yığın olarak kurulmuştur. Aşağıdaki adlar doğrudan Bluetooth Core spesifikasyonundan gelir ve aioble ile bluetooth API’lerinde görünür.

Beş etiketli kutudan oluşan dikey bir yığın. Alttan üste doğru: Physical (radyo), Link Layer, GAP, GATT, Application. Sağdaki bir ok yığında yukarı doğru işaret eder ve "ne inşa ettiğimiz" olarak etiketlenmiştir. Soldaki bir ok yığında aşağı doğru işaret eder ve "ne sağlandığı" olarak etiketlenmiştir.

Bluetooth Low Energy yığını. Her katman bir sonrakine daha temiz bir soyutlama verir; ağ yığınının kullandığı desenin aynısı.

Fiziksel katman (Physical layer). İki cihaz arasında 2.4 GHz radyo üzerinden bit taşır. Kanal seçimi, modülasyon, iletim gücü. Kameranın işi açık olmaktır; gerisini silikon yapar.

Bağlantı katmanı (Link layer). Birbiriyle konuşmayı kabul eden iki cihaz arasında paket taşır. Her paketin bir komşuya yöneltilebilmesi için cihaz adresleri ekler, bir bağlantıyı oluşturan periyodik radyo olaylarını zamanlar ve alıcının onaylamadığı herhangi bir paketin yeniden iletimini yönetir.

Genel Erişim Profili (Generic Access Profile, GAP). Keşif ve bağlantı katmanı. Dört rol tanımlar – broadcaster, observer, peripheral, central – ve iki cihazın ilk etapta birbirini bulmasını sağlayan advertising / scanning protokolünü, ayrıca aralarında bir bağlantı açma ve kapatma prosedürünü tanımlar. Adresler, yayımlama yükleri, bağlantı parametreleri ve eşleştirme (pairing) burada yaşar.

Genel Öznitelik Profili (Generic Attribute Profile, GATT). Veri katmanı. Açık bir GAP bağlantısının üstünde oturur ve küçük bir anahtar/değer veritabanı açığa çıkarır: bir taraf characteristic adı verilen adlandırılmış değerlerden oluşan bir ağacı barındırır, diğer taraf onları okur, yazar veya onlara abone olur. Gerçek uygulama baytlarının aktığı yer burasıdır.

Uygulama (Application). Kameranın ve eşin baytların ne anlama geldiği konusunda anlaştığı her şey. Bluetooth SIG standart profiller yayımlar – kalp atış hızı, pil seviyesi, çevresel algılama – ve bunlar yaygın olarak kullanılan karakteristikleri tanımlayarak ilgisiz cihazların birlikte çalışabilmesini sağlar, ancak herhangi bir uygulama kendi profilini tanımlamakta serbesttir.

11.2.1. Katmanların çalışma zamanında nasıl yığıldığı

Desen ağ yığınıyla eşleşir:

  • Uygulamanın baytları bir karakteristik değerine girer.

  • GATT bunu, baytların hangi karakteristiğe ait olduğunu belirten bir başlıkla sarar.

  • GAP, GATT’ın gönderecek bir yeri olması için açık bir bağlantıyı çalışır durumda tutar.

  • Bağlantı katmanı, tüm bunları eşin cihaz adresine adreslenmiş bir pakete sarar ve onu iletmek için bir radyo olayını zamanlar.

  • Fiziksel katman paketi kısa bir 2.4 GHz radyo patlamasına dönüştürür.

Fiziksel katman ve bağlantı katmanı Python’dan neredeyse görünmezdir – bunları silikon ve radyo aygıt yazılımı yönetir. GAP’ten yukarısında, kameranın Python kodunun söyleyecek daha çok şeyi vardır.

11.2.2. Kullanıcıya dönük API’nin sessizce atladığı iki katman

Bluetooth spesifikasyonu, bağlantı katmanı ile GAP/GATT arasında oturan iki katman daha adlandırır: Host Controller Interface (HCI) – ana CPU’nun ayrı bir radyo yongasını sürmek için kullandığı protokol – ve L2CAP – tek bir bağlantı katmanı bağlantısını birkaç mantıksal kanala bölen çoğullayıcı (multiplexer).

Hiçbiri aioble API’sinde görünmez, ancak hiçbiri de yok olmaz. HCI, BLE portunun içinde oturur ve MicroPython’ın özel bir derlemesi devrede olmadıkça görünmezdir; L2CAP ise GATT’ın üzerinde çalıştığı taşıyıcıdır. Ham bayt akışları isteyen bir uygulama kendi L2CAP kanalını talep edebilir (L2CAP kanalları).