Establecimiento, parámetros y gestión de enlaces Bluetooth
Comenzar arrow_downwardCómo se establece una conexión BLE entre un central y un periférico.
Transmite en canales 37, 38, 39
Connection request con parámetros
A menos que use accept list filter
Advertising (37-39) → Datos (0-36)
Mecanismos de robustez en la conexión BLE.
Durante la conexión, los dispositivos saltan entre los 37 canales de datos usando un algoritmo pseudoaleatorio para evitar interferencia.
Canales de datos 0-36 (los resaltados son ejemplos de saltos)
BLE utiliza retransmisión infinita hasta recibir ACK o alcanzar el supervision timeout.
Formas en que puede terminar una conexión BLE.
La aplicación decide terminar la conexión enviando un termination packet con el motivo de desconexión.
No se reciben paquetes válidos durante el tiempo de supervisión. Indica pérdida de conexión por distancia o interferencia.
| Código | Nombre | Descripción |
|---|---|---|
0x13 |
Remote User Terminated | El usuario remoto terminó la conexión |
0x08 |
Connection Timeout | Supervision timeout alcanzado |
0x3E |
Connection Failed to Establish | Fallo al establecer conexión |
0x16 |
Local Host Terminated | Host local terminó la conexión |
Configuración que afecta latencia, throughput y consumo energético.
7.5 ms - 4 s
Tiempo entre eventos de conexión. Unidades de 1.25 ms.
100 ms - 32 s
Tiempo maximo sin paquetes validos antes de desconectar. Unidades de 10 ms.
supervision_timeout debe ser mayor que:
(1 + peripheral_latency) × connection_interval × 2
Ahorro de energía para dispositivos que no envían datos continuamente.
0 - 499 eventos
Número de eventos de conexión que el periférico puede ignorar si no tiene datos que enviar. Muy útil para dispositivos HID como teclados o ratones.
El periférico solo necesita responder cada 4 eventos si no tiene datos, ahorrando energía.
| Parámetro | Rango | Unidad | Típico | Efecto |
|---|---|---|---|---|
| Connection Interval | 7.5 ms - 4 s | 1.25 ms | 30-100 ms | Latencia vs consumo |
| Supervision Timeout | 100 ms - 32 s | 10 ms | 4 s | Tolerancia a pérdida |
| Peripheral Latency | 0 - 499 | eventos | 0-4 | Ahorro sin datos |
Ajusta los parámetros y observa cómo afectan al throughput, consumo energético y la línea temporal de eventos de conexión.
100 ms
0 eventos
Si no se recibe ningún paquete válido durante el supervision timeout, la conexión se pierde.
El mínimo permitido por spec es: (1 + slave_latency) × conn_interval × 2
(1 + 0) × 100 ms × 2 = 200 ms
Con estos parámetros, se recomienda un supervision timeout de al menos 200 ms. Un valor típico sería 4000 ms para tolerar interferencias temporales.
BLE 5.0 introdujo nuevos modos de capa física para diferentes casos de uso.
Todos los dispositivos BLE
BLE 5.0+ requerido
500/125 kbps efectivos
Tamaño de paquetes y operaciones GATT.
Bytes de payload por paquete BLE en capa Link Layer.
27 bytes
251 bytes
Data Length Extension (DLE) desde Bluetooth 4.2 permite hasta 251 bytes por paquete.
Bytes de datos ATT por operacion GATT.
23 bytes
20 bytes de payload ATT util
hasta 517 bytes
Requiere MTU exchange
Cómo se negocian y actualizan los parámetros de conexión.
Algunos parámetros se negocian entre ambos dispositivos:
Ambos deben soportar el modo
Se usa el menor soportado
Se usa el menor negociado
Estructura y registro de callbacks para eventos de conexión.
BT_CONN_CB_DEFINE() registra los callbacks en tiempo de compilación, evitando llamadas en runtime.
Ejemplo funcional de gestión de conexiones BLE.
APIs principales para gestionar y modificar conexiones BLE.
bt_conn_get_info()
Obtiene información actual de la conexión (interval, PHY, etc).
bt_conn_le_param_update()
Solicita cambio de parámetros de conexión.
bt_conn_le_phy_update()
Solicita cambio de PHY (1M, 2M, Coded).
bt_conn_le_data_len_update()
Solicita cambio de Data Length (DLE).
bt_gatt_exchange_mtu()
Inicia negociación de MTU con el peer.
bt_conn_disconnect()
Termina la conexión con un código de razón.
bt_conn_ref() y bt_conn_unref() para gestionar correctamente el ciclo de vida de las conexiones y evitar memory leaks.
Opciones de configuración para parámetros preferidos.
PREF_* se envían al central durante la conexión. El central puede aceptarlos o usar sus propios valores. Para forzar un cambio, usa bt_conn_le_param_update().
Conceptos clave de conexiones BLE.
Central envía CONNECT_REQ. Cambio a canales de datos 0-36 con channel hopping.
Connection interval, supervision timeout y peripheral latency controlan consumo y latencia.
1M/2M/Coded PHY y DLE/MTU para optimizar throughput y alcance.
| API | Función | Uso |
|---|---|---|
| bt_conn_cb_register() | Registrar callbacks | connected, disconnected, param_updated |
| bt_conn_get_info() | Leer info de conexión | Interval, PHY, MTU actual |
| bt_conn_le_param_update() | Solicitar cambio | Interval, latency, timeout |
| bt_gatt_exchange_mtu() | Negociar MTU | Tras conexión establecida |
| bt_conn_disconnect() | Terminar conexión | Con código de razón |
Perfil de atributos genéricos, servicios, características y descriptores.