J'ai besoin d'obtenir les distances de plusieurs balises Bluetooth pour la triangulation afin de pouvoir faire du positionnement en intérieur. J'ai essayé de donner autant de détails pertinents que possible. Ce projet est destiné à un RPi, mais j'essaie de le tester d'abord sur mon ordinateur portable. J'ai essayé la plupart de ce que j'ai pu trouver sur internet à ce sujet :
La meilleure façon que j'ai trouvée pour obtenir les valeurs rssi est la suivante hcitool rssi <address of beacon>
A partir d'ici https://stackoverflow.com/questions/24417017/bluetooth-le-signal-strength-linux
Pour le tester, j'ai d'abord essayé de l'obtenir sur mon téléphone portable. Il a affiché " Not Connected
". J'ai pensé que je devais d'abord me connecter, et j'ai donc essayé de nombreuses façons de connecter mon téléphone portable :
a) hcittol cc <address of mobile>
b) gatttool -b <address of mobile> -t random --interactive
c) rfcomm connect 0 <address of mobile> 10
Dans chaque cas, lorsque j'ai cliqué sur "pair" dans mon téléphone portable, la connexion s'est interrompue.
Ensuite, j'ai appairé mon mobile de la manière habituelle à partir du menu bluetooth, puis j'ai essayé hcitool rssi <Address of mobile>
qui a finalement renvoyé une valeur -8
.
Maintenant que je l'avais pour mon mobile, je suis passé aux balises.
Ensuite, j'ai essayé la même chose pour mes balises. Cette fois-ci, j'ai dû d'abord faire hcitool lescan
pour obtenir les adresses des balises disponibles puis se connecter à l'une des balises à l'aide de la commande hcitool lecc <address of beacon>
qui a renvoyé l'erreur Could not create connection: Connection timed out
Ensuite, j'ai de nouveau essayé de me connecter par les deux autres moyens :
rfcomm connect 0 <address of beacon> 10
qui a renvoyé l'erreur Can't connect RFCOMM socket: Host is down
quand je peux être sûr que hci0 était en ligne.
J'ai ensuite essayé avec sudo gatttool -b F1:15:A7:E3:17:63 --interactive
après quoi le mode interactif s'est ouvert et j'ai donné la commande connect
. Cela a donné des erreurs différentes après Attempting to connect to <address of beacon>
, principalement connect error : Connection timed out
y Error: connect error: Connection refused (111)
J'ai ensuite lu que je devais utiliser -t random
de https://stackoverflow.com/questions/22213793/bluetooth-le-on-raspbian , https://ubuntuforums.org/showthread.php?t=2204808 et une autre source que je n'arrive pas à trouver pour l'instant.
J'ai donc saisi sudo gatttool -b F1:15:A7:E3:17:63 -t random --interactive
dans laquelle, lorsque j'ai donné le connect
j'obtiens l'erreur suivante Error: connect error: Device or resource busy (16)
et aussi parfois Error: connect error: Input/Output Error
puis j'ai lu que je devais peut-être redémarrer mon hci0 en hciconfig hci0 down
et ensuite hciconfig hci0 up
ce qui a fait l'affaire, la balise est maintenant connectée.
Mais il s'est rapidement déconnecté après avoir indiqué `GLib-WARNING ** : Invalid file descriptor.
` Je lis ici https://raspberrypi.stackexchange.com/questions/53982/how-to-fix-gatttools-glib-warning-invalid-file-descriptor que cela est dû à de mauvaises connexions. J'ai essayé de rapprocher les balises, mais le résultat est le même.
J'ai donc essayé d'obtenir au moins une valeur rssi pendant la courte durée de connexion. Mais, même lorsqu'il était ainsi connecté, je n'ai pas réussi à obtenir de valeur rssi. hcitool rssi <address of beacon>
l'erreur se présentait comme suit :
hcitool rssi F1:15:A7:E3:17:63
Get connection info failed: No such file or directory
Je n'ai pas encore trouvé de solution adéquate à ce problème.
J'ai essayé une autre méthode de lecture de la valeur rssi, qui a donné le résultat suivant :
hcidump -R
HCI sniffer - Bluetooth packet analyzer ver 5.37
device: hci0 snap_len: 1500 filter: 0xffffffffffffffff
> 04 0E 04 01 0B 20 00
> 04 0E 04 01 0C 20 00
> 04 0E 04 01 0C 20 00
> 04 0F 04 00 01 0D 20
> 04 0F 04 00 01 16 20
> 04 0F 04 00 01 13 20
C'était avant qu'il ne soit déconnecté. J'ai lu ici https://stackoverflow.com/questions/37073114/obtain-rssi-with-hcidump qui disait de lire le 14ème octet. Comme tous ces chiffres semblaient être des nombres hexadécimaux, cela signifiait que chaque nombre était un octet. Mais de cette façon, je n'ai que 7 numéros par ligne, comment puis-je lire le 14ème octet ?
L'obtention de la distance des balises m'a beaucoup préoccupé et m'a fait perdre beaucoup de temps. Merci de m'aider à résoudre ce problème. Si vous pouvez m'aider à trouver une ressource pour m'aider à le faire, j'apprécierais l'aide.