11.2. Stack BLE

Seperti jaringan, Bluetooth Low Energy dibangun sebagai tumpukan lapisan, masing-masing memecahkan satu masalah dan mengekspos abstraksi yang bersih ke lapisan di atasnya. Nama-nama di bawah ini berasal langsung dari spesifikasi Bluetooth Core dan muncul di API aioble dan bluetooth.

A vertical stack of five labelled boxes. From bottom to top: Physical (radio), Link Layer, GAP, GATT, Application. An arrow on the right points up the stack labelled "what we build". An arrow on the left points down the stack labelled "what is provided".

Stack Bluetooth Low Energy. Setiap lapisan menyerahkan abstraksi yang lebih bersih ke lapisan berikutnya, pola yang sama yang digunakan oleh stack jaringan.

Lapisan fisik. Memindahkan bit antara dua perangkat melalui radio 2,4 GHz. Pemilihan kanal, modulasi, daya transmisi. Tugas kamera adalah dalam keadaan menyala; silikon mengurus sisanya.

Lapisan tautan. Memindahkan paket antara dua perangkat yang sepakat untuk berkomunikasi satu sama lain. Menambahkan alamat perangkat agar setiap paket dapat ditujukan ke satu tetangga, menjadwalkan peristiwa radio berkala yang membentuk koneksi, dan menangani transmisi ulang paket yang tidak diakui oleh penerima.

Generic Access Profile (GAP). Lapisan penemuan dan koneksi. Mendefinisikan empat peran -- broadcaster, observer, peripheral, central -- serta protokol advertising / scanning yang memungkinkan dua perangkat saling menemukan satu sama lain, ditambah prosedur untuk membuka dan menutup koneksi di antara keduanya. Di sinilah alamat, payload advertising, parameter koneksi, dan penyandingan berada.

Generic Attribute Profile (GATT). Lapisan data. Berada di atas koneksi GAP yang terbuka dan mengekspos database kunci/nilai kecil: satu sisi menghosting pohon nilai bernama yang disebut karakteristik, sisi lain membaca, menulis, atau berlangganan ke nilai tersebut. Di sinilah byte aplikasi aktual mengalir.

Aplikasi. Apa pun yang disepakati kamera dan rekan tentang arti byte tersebut. Bluetooth SIG menerbitkan profil standar -- detak jantung, tingkat baterai, penginderaan lingkungan -- yang mendefinisikan karakteristik yang umum digunakan agar perangkat yang tidak terkait dapat beroperasi bersama, tetapi setiap aplikasi bebas mendefinisikan karakteristiknya sendiri.

11.2.1. Bagaimana lapisan-lapisan tersusun saat runtime

Polanya cocok dengan stack jaringan:

  • Byte aplikasi masuk ke dalam nilai karakteristik.

  • GATT membungkusnya dengan header yang mengidentifikasi karakteristik mana byte tersebut milik.

  • GAP menjaga koneksi terbuka berjalan sehingga GATT memiliki tempat untuk mengirim.

  • Lapisan tautan membungkus semuanya dalam paket, ditujukan ke alamat perangkat rekan, dan menjadwalkan peristiwa radio untuk mentransmisikannya.

  • Lapisan fisik mengubah paket menjadi ledakan singkat radio 2,4 GHz.

Lapisan fisik dan lapisan tautan hampir tidak terlihat dari Python -- silikon dan firmware radio menanganinya. Dari GAP ke atas, kode Python kamera mendapatkan lebih banyak peran.

11.2.2. Dua lapisan yang dilewati secara diam-diam oleh API yang menghadap pengguna

Spesifikasi Bluetooth menyebutkan dua lapisan lagi yang berada di antara lapisan tautan dan GAP/GATT: Host Controller Interface (HCI) -- protokol yang digunakan CPU host untuk mengendalikan chip radio terpisah -- dan L2CAP -- multiplekser yang membagi satu koneksi lapisan tautan menjadi beberapa saluran logis.

Keduanya tidak terlihat dalam API aioble, tetapi keduanya tidak menghilang. HCI berada di dalam port BLE dan tidak terlihat kecuali build kustom MicroPython sedang digunakan, dan L2CAP adalah pembawa tempat GATT berjalan. Aplikasi yang menginginkan aliran byte mentah dapat mengklaim saluran L2CAP-nya sendiri (Saluran L2CAP).