Descubrimiento de dispositivos en Bluetooth Low Energy
Comenzar arrow_downwardPaquetes enviados periódicamente para anunciar la presencia de un dispositivo BLE.
BLE utiliza 40 canales de 2 MHz en la banda ISM de 2.4 GHz.
Visualiza como el advertiser transmite en los 3 canales y como el scanner debe coincidir para descubrir el dispositivo.
El proceso de escaneo permite a un dispositivo central descubrir periféricos cercanos.
10 ms - 10.24 s
Período entre inicios de scan windows consecutivos.
10 ms - 10.24 s
Tiempo activo escaneando (siempre ≤ interval).
window / interval
100% = escaneo continuo, mayor consumo.
El scanner puede solicitar información adicional al advertiser:
BLE define varios tipos de paquetes de advertising según el caso de uso.
Más común. Permite conexiones de cualquier dispositivo. Usado por sensores, wearables, periféricos generales.
Reconexión rápida. Dirigido a un dispositivo específico (por dirección). Sin payload adicional.
No permite conexiones, pero responde a scan requests. Útil para broadcast con datos extendidos.
Beacons. Solo broadcast unidireccional. iBeacon, Eddystone, sensores de temperatura ambiente.
Comparativa de características entre los diferentes tipos de paquetes.
| Tipo | Connectable | Scannable | Dirigido | Caso de uso |
|---|---|---|---|---|
| ADV_IND | check_circle | check_circle | cancel | Periférico general |
| ADV_DIRECT_IND | check_circle | cancel | check_circle | Reconexión rápida |
| ADV_SCAN_IND | cancel | check_circle | cancel | Broadcast extendido |
| ADV_NONCONN_IND | cancel | cancel | cancel | Beacons |
ADV_IND. Para beacons de solo lectura usa ADV_NONCONN_IND.
BLE soporta varios tipos de direcciones de 48 bits para identificar dispositivos.
Tipos de direcciones que protegen la privacidad del dispositivo.
Formato del PDU (Protocol Data Unit) de advertising en BLE.
Constantes Zephyr para los tipos de datos AD más utilizados.
| Constante Zephyr | Valor | Descripción |
|---|---|---|
BT_DATA_FLAGS |
0x01 |
Flags de capacidades (LE General, sin BR/EDR) |
BT_DATA_NAME_COMPLETE |
0x09 |
Nombre completo del dispositivo |
BT_DATA_NAME_SHORTENED |
0x08 |
Nombre abreviado |
BT_DATA_UUID16_ALL |
0x03 |
Lista completa de UUIDs de 16 bits |
BT_DATA_UUID128_ALL |
0x07 |
Lista completa de UUIDs de 128 bits |
BT_DATA_MANUFACTURER_DATA |
0xFF |
Datos específicos del fabricante |
BT_DATA_FLAGS es obligatorio y siempre debe ser el primer AD structure. Usa BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR para periféricos BLE estándar.
Configuración y estructuras de datos para advertising.
CONFIG_BT_PERIPHERAL habilita el rol de periférico permitiendo iniciar advertising.
CONFIG_BT_CENTRAL habilita el rol de central para scanning y conexiones.
Código para inicializar el stack BT e iniciar el advertising.
BT_LE_ADV_CONN
Connectable y scannable. Para periféricos que aceptan conexiones.
BT_LE_ADV_NCONN
No connectable. Para beacons y broadcast puro.
bt_le_adv_update_data()
Actualizar datos de advertising dinamicamente.
Definición de datos de fabricante para transmitir temperatura.
Formato: 2 bytes Company ID + datos custom. El Company ID 0x0059 pertenece a Nordic.
Codificada como int16 en centesimas de grado (2350 = 23.50 C).
Función de actualización y bucle principal del beacon.
bt_le_adv_update_data() para actualizar datos de advertising sin detener y reiniciar el proceso. Esto es más eficiente y mantiene la continuidad del advertising.
Lo esencial de advertising y scanning en BLE.
Broadcast periódico en canales 37, 38, 39. Intervalo configurable de 20 ms a 10.24 s.
Scan interval y window definen el duty cycle. Puede solicitar scan response.
Public, Random Static, y Random Private para diferentes niveles de privacidad.
| API | Funcion | Uso |
|---|---|---|
| bt_enable() | Inicializar stack BT | Llamar antes de cualquier operación BT |
| bt_le_adv_start() | Iniciar advertising | BT_LE_ADV_CONN o BT_LE_ADV_NCONN |
| bt_le_adv_stop() | Detener advertising | Antes de cambiar parámetros |
| bt_le_adv_update_data() | Actualizar datos | Sin detener advertising |
En el siguiente módulo aprenderemos sobre conexiones BLE.
Establecimiento de conexiones, parámetros de conexión y gestión de enlaces.