Bluetooth Low Energy: escuchar notificaciones / indicaciones en Linux

Intento comunicarme con un módulo BLE a través de una máquina Linux (el módulo ejecuta un perfil de frecuencia cardíaca). Hasta ahora, he podido hacer todo lo que necesito excepto escuchar notificaciones e indicaciones (por ejemplo, escuchar la Notificación de medición de la frecuencia cardíaca). Estoy usando kernel versión 3.5 y bluez-5.3.

Mandatos exitosos utilizados hasta ahora:

hcitool lescan hcitool lecc gatttool -b  --primary gatttool -b  --characteristics gatttool -b  --char-read gatttool -b  --char-desc gatttool -b  --interactive 

Comandos fallidos:

 gatttool -b  --listen 

Cualquier ayuda es muy apreciada.

Prueba esto…

Ejecute gatttool -b --interactive como lo hizo antes. Recibirás un mensaje y luego escribirás connect . Debería ver una CON en el indicador que indique que se ha conectado al dispositivo. Luego escribe char-read-uuid 2902 . Debería obtener una lista de todos los atributos CCC (configuración de características del cliente) en el dispositivo. Puede intentar configurarlas todas en 0100 para recibir notificaciones, 0200 para las indicaciones, 0300 para ambas, o 0000 para todo desactivado. Escriba help para ver todos los comandos y sus argumentos.

EDITAR:

El uso del argumento --listen requiere que lo --listen con otros comandos para activar las notificaciones y / o indicaciones. Así que aquí hay un ejemplo que funciona en Bluez 4.101:

 gatttool -b  --char-write-req --handle=0x0031 --value=0100 --listen 

Obviamente, debe cambiar el controlador al identificador del CCC para el que desea activar las notificaciones. Sin embargo, todavía me resulta mucho más fácil usar el modo interactivo.

Parece que la versión anterior de Bluez (hcitool y gatttool) no le permite escribir en dispositivos Bluetooth de baja energía. Terminé instalando una versión más nueva (5.17 al momento de escribir esto) para habilitar las notificaciones, etc.

Para obtener una lista de todos sus identificadores, puede ejecutar lo siguiente:

 char-desc 

Luego puede leer desde un mango:

 char-read-hnd 0x000e 

(el mango anterior es para mi nivel de batería nrf51822)

Donde el identificador es uno de la lista que obtuvo de char-desc.

Al igual que Tim dijo anteriormente, puede escribir en el identificador relacionado con la notificación para obtener indicaciones o notificaciones. (en mi caso, mi dispositivo solo tenía notificaciones)

 char-write-req 0x000f 0100 

(el controlador anterior es para mi notificación de nivel de batería nrf51822)

En mi caso, la notificación de la batería no debería enviar nada hasta que el nivel de la batería haya cambiado.

Escribí una publicación de blog bastante larga sobre cómo configurarlo con Bluez. Puede encontrarlo aquí: Comience con Bluetooth Low Energy ¡ Siéntase libre de echarle un vistazo!

Respuesta final para leer la frecuencia cardíaca en Mio Alpha:

 gatttool -b xx:xx:xx:xx:xx:xx -t random --char-write-req -a 0x0025 -n 0100 --listen Characteristic value was written successfully Notification handle = 0x0024 value: 10 4b 33 03 Notification handle = 0x0024 value: 10 4b 33 03 Notification handle = 0x0024 value: 10 4b 33 03 Notification handle = 0x0024 value: 10 4a 3e 03 Notification handle = 0x0024 value: 10 4c 28 03 28 03 Notification handle = 0x0024 value: 10 4c 28 03 Notification handle = 0x0024 value: 10 4b 33 03 Notification handle = 0x0024 value: 10 4a 3e 03 3e 03 

para retener el valor CCC, necesita emparejar los dos dispositivos. una vez que están emparejados, no es necesario configurar el CCC nuevamente. en la próxima reconexión encontrará la configuración, que se guardará en el flash FLASH de la llave. intente configurar después del emparejamiento a través de SMP.