Bluetooth Low Energy: escuchar notificaciones / indicaciones en linux


Estoy tratando de comunicarme con un módulo BLE a través de una máquina Linux (el módulo está ejecutando un perfil de frecuencia cardíaca). Hasta ahora, he podido hacer todo lo que necesitaba, excepto escuchar las Notificaciones e indicaciones (por ejemplo, escuchar la Notificación de Medición de la Frecuencia Cardíaca). Estoy usando la versión del kernel 3.5 y bluez-5.3.

Satisfactorio comandos utilizados hasta ahora:

hcitool lescan
hcitool lecc
gatttool -b <Mac Address> --primary
gatttool -b <MAC Address> --characteristics
gatttool -b <MAC Address> --char-read
gatttool -b <MAC Address> --char-desc
gatttool -b <MAC Address> --interactive

Comandos fallidos:

gatttool -b <MAC Address> --listen

Cualquier ayuda es muy apreciada.

Author: yousif saeed, 2013-03-27

4 answers

Prueba esto...

Corre gatttool -b <MAC Address> --interactive como lo hiciste antes. Obtendrás un mensaje y luego escribirás connect. Debería ver un CON en el mensaje que indica que se ha conectado al dispositivo. A continuación, escriba char-read-uuid 2902. Debe obtener una lista de todos los atributos CCC (Configuración de características del cliente) en el dispositivo. Puede intentar configurarlos todos a 0100 para obtener notificaciones, 0200 para indicaciones, 0300 para ambos, o 0000 para todo apagado. Escriba help para ver todos los comandos y su argumento.

EDITAR:

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

gatttool -b <MAC Address> --char-write-req --handle=0x0031 --value=0100 --listen

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

 43
Author: Tim Tisdall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-16 13:44:49

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

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

char-desc

Entonces puedes leer desde un identificador:

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 char-desc.

Al igual que Tim dijo anteriormente, puede escribir en el controlador 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 mango 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 entrada de blog bastante larga sobre cómo configurar con Bluez. Puedes encontrarlo aquí: Comienza con Bluetooth Baja energía Siéntase libre de comprobarlo!

 10
Author: jaredwolff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-15 00:01:35

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
 5
Author: Fred.Taiwan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-16 14:42:22

Para conservar el valor CCC, debe emparejar los dos dispositivos. una vez que estén emparejados, no es necesario volver a configurar el CCC. en la próxima reconexión encontrará la configuración,que se guardará en el FLASH del llavero. intente configurar después de emparejar a través de SMP.

 2
Author: RobinSingh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-01 06:20:36