11.2. La pila BLE¶
Al igual que las redes, Bluetooth Low Energy está construido como una pila de capas, cada una resolviendo un único problema y exponiendo una abstracción limpia a la capa superior. Los nombres siguientes provienen directamente de la especificación Bluetooth Core y aparecen en las API de aioble y bluetooth.
La pila de Bluetooth Low Energy. Cada capa entrega una abstracción más limpia a la siguiente, el mismo patrón que utiliza la pila de redes.¶
Capa física. Mover bits entre dos dispositivos a través de la radio de 2.4 GHz. Selección de canal, modulación, potencia de transmisión. La tarea de la cámara es estar encendida; el silicio hace el resto.
Capa de enlace. Mover paquetes entre dos dispositivos que acuerdan comunicarse entre sí. Añade direcciones de dispositivo para que cada paquete pueda dirigirse a un vecino, programa los eventos de radio periódicos que conforman una conexión y gestiona la retransmisión de cualquier paquete que el receptor no haya reconocido.
Generic Access Profile (GAP). La capa de descubrimiento y conexión. Define cuatro roles – broadcaster, observer, peripheral, central – y el protocolo de anuncio / escaneo que permite que dos dispositivos se encuentren entre sí en primer lugar, además del procedimiento para abrir y cerrar una conexión entre ellos. Aquí es donde residen las direcciones, las cargas útiles de anuncio, los parámetros de conexión y el emparejamiento.
Generic Attribute Profile (GATT). La capa de datos. Se sitúa sobre una conexión GAP abierta y expone una pequeña base de datos clave/valor: un lado aloja un árbol de valores con nombre llamados características, el otro lado los lee, escribe o se suscribe a ellos. Aquí es donde fluyen los bytes reales de la aplicación.
Application. Lo que sea que la cámara y el par acuerden que significan los bytes. El Bluetooth SIG publica perfiles estándar – ritmo cardíaco, nivel de batería, detección ambiental – que definen características de uso común para que dispositivos no relacionados puedan interoperar, pero cualquier aplicación es libre de definir las suyas propias.
11.2.1. Cómo se apilan las capas en tiempo de ejecución¶
El patrón coincide con el de la pila de redes:
Los bytes de la aplicación van a un valor de característica.
GATT lo envuelve con una cabecera que identifica a qué característica pertenecen los bytes.
GAP mantiene una conexión abierta en funcionamiento para que GATT tenga a dónde enviar.
La capa de enlace envuelve todo en un paquete, dirigido a la dirección de dispositivo del par, y programa un evento de radio para transmitirlo.
La capa física convierte el paquete en una breve ráfaga de radio de 2.4 GHz.
La capa física y la capa de enlace son casi invisibles desde Python – el silicio y el firmware de la radio se encargan de ellas. De GAP hacia arriba, el código Python de la cámara tiene más que decir.
11.2.2. Dos capas que la API orientada al usuario omite discretamente¶
La especificación de Bluetooth nombra dos capas más que se sitúan entre la capa de enlace y GAP/GATT: la Host Controller Interface (HCI) – el protocolo que la CPU anfitriona usa para controlar un chip de radio separado – y L2CAP – el multiplexor que divide una conexión de capa de enlace en varios canales lógicos.
Ninguna es visible en la API de aioble, pero ninguna desaparece. HCI reside dentro del puerto BLE y es invisible a menos que esté en juego una compilación personalizada de MicroPython, y L2CAP es el portador sobre el que se ejecuta GATT. Una aplicación que quiera flujos de bytes en bruto puede reclamar su propio canal L2CAP (Canales L2CAP).