11.2. Ngăn xếp BLE

Giống như mạng máy tính, Bluetooth Low Energy được xây dựng như một ngăn xếp các lớp, mỗi lớp giải quyết một vấn đề duy nhất và cung cấp một trừu tượng gọn gàng cho lớp trên. Các tên dưới đây xuất phát trực tiếp từ đặc tả lõi Bluetooth và xuất hiện trong các API aioblebluetooth.

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".

Ngăn xếp Bluetooth Low Energy. Mỗi lớp chuyển một trừu tượng gọn hơn lên lớp tiếp theo, cùng mẫu mà ngăn xếp mạng sử dụng.

Lớp vật lý. Di chuyển bit giữa hai thiết bị qua radio 2.4 GHz. Lựa chọn kênh, điều chế, công suất phát. Nhiệm vụ của camera là được cấp nguồn; silicon xử lý phần còn lại.

Lớp liên kết. Di chuyển gói tin giữa hai thiết bị đồng ý giao tiếp với nhau. Thêm địa chỉ thiết bị để mỗi gói tin có thể được nhắm đến một hàng xóm, lên lịch các sự kiện radio định kỳ tạo nên một kết nối, và xử lý việc truyền lại bất kỳ gói tin nào mà bên nhận không xác nhận.

Generic Access Profile (GAP). Lớp khám phá và kết nối. Định nghĩa bốn vai trò -- broadcaster, observer, peripheral, central -- và giao thức quảng bá / quét cho phép hai thiết bị tìm thấy nhau lần đầu tiên, cộng với thủ tục mở và đóng kết nối giữa chúng. Đây là nơi địa chỉ, tải trọng quảng bá, tham số kết nối và ghép đôi được xử lý.

Generic Attribute Profile (GATT). Lớp dữ liệu. Nằm trên một kết nối GAP đang mở và cung cấp một cơ sở dữ liệu key/value nhỏ: một bên lưu trữ một cây các giá trị có tên gọi là characteristics, bên kia đọc, ghi hoặc đăng ký chúng. Đây là nơi các byte ứng dụng thực sự chảy qua.

Application. Bất kể camera và peer đồng ý các byte có nghĩa là gì. Bluetooth SIG công bố các profile tiêu chuẩn -- nhịp tim, mức pin, cảm biến môi trường -- định nghĩa các đặc trưng thường dùng để các thiết bị không liên quan có thể tương tác, nhưng bất kỳ ứng dụng nào đều có thể tự định nghĩa.

11.2.1. Cách các lớp xếp chồng lúc chạy

Mẫu khớp với ngăn xếp mạng:

  • Các byte của ứng dụng đi vào một characteristic value.

  • GATT bọc chúng với một tiêu đề xác định đặc trưng mà các byte thuộc về.

  • GAP duy trì một kết nối đang mở để GATT có nơi gửi.

  • Lớp liên kết bọc tất cả vào một gói tin, được địa chỉ hóa đến địa chỉ thiết bị của peer, và lên lịch một sự kiện radio để truyền nó.

  • Lớp vật lý biến gói tin thành một đợt tín hiệu radio 2.4 GHz ngắn.

Lớp vật lý và lớp liên kết gần như vô hình từ Python -- silicon và firmware radio xử lý chúng. Từ GAP trở lên, mã Python của camera có nhiều quyền kiểm soát hơn.

11.2.2. Hai lớp mà API hướng người dùng bỏ qua

Đặc tả Bluetooth đặt tên cho hai lớp nằm giữa lớp liên kết và GAP/GATT: Host Controller Interface (HCI) -- giao thức mà CPU host sử dụng để điều khiển chip radio riêng biệt -- và L2CAP -- bộ ghép kênh chia một kết nối lớp liên kết thành nhiều kênh logic.

Cả hai đều không hiển thị trong API aioble, nhưng không cái nào biến mất. HCI nằm bên trong cổng BLE và vô hình trừ khi có bản dựng MicroPython tùy chỉnh được sử dụng, và L2CAP là carrier mà GATT chạy trên đó. Một ứng dụng muốn luồng byte thô có thể yêu cầu kênh L2CAP riêng của mình (Các kênh L2CAP).