web-dev-qa-db-fra.com

Bluetooth Low Energy: écoute des notifications / indications sous Linux

J'essaie de communiquer avec un module BLE via une machine Linux (le module exécute un profil de fréquence cardiaque). Jusqu'à présent, j'ai pu faire tout ce dont j'avais besoin, sauf écouter les notifications et les indications (par exemple, écouter la notification de mesure de la fréquence cardiaque). J'utilise la version du noyau 3.5 et bluez-5.3.

Commandes réussies utilisées jusqu'à présent:

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

Commandes ayant échoué:

gatttool -b <MAC Address> --listen

Toute aide est grandement appréciée.

40
Youssif Saeed

Essaye ça...

Courir gatttool -b <MAC Address> --interactive comme avant. Vous obtiendrez une invite, puis vous tapez connect. Vous devriez voir un CON dans l'invite indiquant que vous vous êtes connecté à l'appareil. Tapez ensuite char-read-uuid 2902. Vous devriez obtenir une liste de tous les attributs CCC (Configuration des caractéristiques du client) sur l'appareil. Vous pouvez essayer de les régler tous sur 0100 pour obtenir des notifications, 0200 pour les indications, 0300 pour les deux ou 0000 pour tout désactiver. Tapez help pour voir toutes les commandes et leurs arguments.

MODIFIER:

L'utilisation du --listen L'argument vous oblige à l'associer à d'autres commandes pour activer les notifications et/ou les indications. Voici donc un exemple qui fonctionne dans Bluez 4.101:

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

Évidemment, vous devez changer la poignée pour la poignée du CCC pour laquelle vous souhaitez activer les notifications. Cependant, je trouve toujours beaucoup plus facile d'utiliser simplement le mode interactif.

44
Tim Tisdall

Il semble que l'ancienne version de Bluez (hcitool & gatttool) ne vous permette pas d'écrire sur des appareils Bluetooth Low Energy. J'ai fini par installer une version plus récente (5.17 au moment d'écrire ces lignes) afin d'activer les notifications, etc.

Pour obtenir une liste de toutes vos poignées, vous pouvez exécuter ce qui suit:

char-desc

Vous pouvez ensuite lire à partir d'une poignée:

char-read-hnd 0x000e

(la poignée ci-dessus est pour mon niveau de batterie nrf51822)

Où la poignée fait partie de la liste que vous avez obtenue de char-desc.

Tout comme Tim l'a dit ci-dessus, vous pouvez écrire dans la poignée relative aux notifications pour obtenir des indications ou des notifications. (dans mon cas, mon appareil n'avait que des notifications)

char-write-req 0x000f 0100

(la poignée ci-dessus est pour ma notification de niveau de batterie nrf51822)

Dans mon cas, la notification de la batterie ne devrait rien envoyer tant que le niveau de la batterie n'a pas changé.

J'ai écrit un article de blog assez long sur la configuration de Bluez. Vous pouvez le trouver ici: Premiers pas avec Bluetooth Low Energy N'hésitez pas à le vérifier!

10
jaredwolff

Réponse finale pour lire la fréquence cardiaque sur 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
Fred.Taiwan

pour conserver la valeur CCC, vous devez coupler les deux appareils. une fois qu'ils sont appariés, vous n'avez pas besoin de régler à nouveau le CCC. lors de la prochaine reconnexion, il trouvera le réglage, qui sera enregistré dans le FLASH du porte-clés. essayez de configurer après l'appairage via SMP.

2
RobinSingh