Perfil de Atributos Genéricos para comunicación BLE
Comenzar arrow_downwardGATT define cómo se intercambian datos entre dispositivos BLE conectados.
El cliente solicita el valor actual de una característica. El servidor responde con los datos.
El cliente envía datos al servidor. Requiere confirmación (ACK) del servidor.
El cliente envía datos sin esperar confirmación. Más rápido pero sin garantía de entrega.
El servidor envía datos al cliente sin esperar confirmación. Ideal para datos de sensor en tiempo real.
El servidor envía datos y espera confirmación del cliente. Garantiza entrega pero más lento.
Cómo el servidor envía datos de forma proactiva al cliente.
El CCCD es un descriptor de la característica
0x0001 para notificaciones, 0x0002 para indicaciones
El servidor ahora puede enviar datos cuando cambian
0x0001
0x0002
Todo en GATT son atributos con una estructura común.
Los UUIDs identifican servicios, características y descriptores.
Definidos por Bluetooth SIG para servicios y características estándar.
Los 16 bits se insertan en la base UUID de Bluetooth
0x2800
Primary Service
0x2803
Characteristic Declaration
0x2902
CCCD
0x180F
Battery Service
UUIDs personalizados para servicios propietarios. Generados aleatoriamente.
128 bits completos - garantiza unicidad
00001523-1212-EFDE-1523-785FEABCD123
Usa un generador de UUIDs online para crear los tuyos. Asegúrate de que la base sea única para tu empresa/proyecto.
Los servicios agrupan características relacionadas funcionalmente.
0x2800
Primary Service Declaration
El valor contiene el UUID del servicio (16 o 128 bits).
UUID del servicio
0x2801
Secondary Service
Servicio auxiliar incluido por otro servicio. Raramente usado.
0x180F
Nivel de batería del dispositivo
0x180D
Datos de frecuencia cardíaca
0x180A
Información del fabricante, modelo, etc.
128-bit
LED Button Service - ejemplo de Nordic
Las características contienen los valores de datos reales.
UUID: 0x2800 | Value: Service UUID
UUID: 0x2803 | Value: Properties + Handle + Char UUID
UUID: Char UUID | Value: Datos reales
UUID: 0x2902 | Value: 0x0000/0x0001/0x0002
UUID: 0x2901 | Value: "Temperature"
Definen qué operaciones soporta la característica.
0x02
Read
Cliente puede leer
0x08
Write
Cliente puede escribir
0x04
Write w/o
Sin respuesta
0x10
Notify
Servidor puede notificar
0x20
Indicate
Servidor puede indicar
0x2902
Client Characteristic Configuration Descriptor. Habilita notificaciones/indicaciones.
0x2901
Descripción legible de la característica. Útil para debugging.
0x2904
Formato del valor (uint8, float, etc.), unidades y exponente.
El descriptor más importante para comunicación bidireccional.
El CCCD es un valor de 16 bits que el cliente escribe para controlar si el servidor puede enviar notificaciones o indicaciones.
0x0000
El servidor no puede enviar datos
0x0001
Habilita notificaciones (bit 0)
0x0002
Habilita indicaciones (bit 1)
Cada cliente conectado tiene su propio valor de CCCD. El servidor mantiene un valor separado para cada conexión.
0x0001
0x0000
0x0002
CONFIG_BT_SETTINGS=y.
Ejemplo completo del servicio LED Button Service de Nordic.
| Handle | UUID | Tipo | Permisos | Valor |
|---|---|---|---|---|
0x0010 |
0x2800 | Service Declaration | R | LBS UUID (128-bit) |
0x0011 |
0x2803 | Char Declaration (Button) | R | Props: Read+Notify |
0x0012 |
Button UUID | Char Value (Button) | R N | 0x00 / 0x01 |
0x0013 |
0x2902 | CCCD | R W | 0x0000 |
0x0014 |
0x2803 | Char Declaration (LED) | R | Props: Write |
0x0015 |
LED UUID | Char Value (LED) | W | 0x00 / 0x01 |
Macros y funciones para definir servicios GATT.
Cómo enviar datos de forma proactiva desde el servidor.
BT_GATT_SERVICE_DEFINE()
Macro para definir un servicio GATT completo en tiempo de compilación.
bt_gatt_notify()
Envía una notificación a uno o todos los clientes conectados.
bt_gatt_indicate()
Envía una indicación con callback de confirmación.
bt_gatt_attr_read()
Helper para implementar callbacks de lectura.
BT_GATT_CCC()
Macro para añadir un CCCD a una característica.
bt_gatt_exchange_mtu()
Negocia el MTU con el peer para datos más grandes.
Pairing, bonding, encriptación y niveles de seguridad.