Midiendo la proximidad con bluetooth en la raspberry Pi

He estado tratando de usar este script https://github.com/karulis/pybluez/blob/master/examples/advanced/inquiry-with-rssi.py pero parece que sock = bluez.hci_open_dev(dev_id) devuelve un Enchufe que no funciona. Cada vez que el calcetín pasa a una función error(9, 'Bad file descriptor') se lanza un error(9, 'Bad file descriptor') .

Este script es bastante antiguo, por lo que existe una posibilidad decente de que ya no funcione. Así que tengo dos preguntas. ¿Alguien sabe cómo usar la biblioteca pybluez (o un equivalente más moderno) para medir la proximidad de un dispositivo bluetooth con una pi raspberry?

¿Y qué hago mal con este script que me está haciendo construir un socket roto?

Gracias.

Prueba esto:

Ejecute hcitool dev para obtener la dirección de su dispositivo Bluetooth.

En la secuencia de comandos a la que has vinculado, cambia la línea 120 desde:

 dev_id = 0 

a:

 dev_id = bluez.hci_get_route(ADDRESS_FOR_YOUR_BLUETOOTH_DEVICE) 

Para medir la proximidad, el script llama a la función.

 device_inquiry_with_with_rssi(sock) 

que debería imprimir una lista de los identificadores de dispositivos Bluetooth y sus valores RSSI correspondientes (vea las líneas 95-102). Por lo general, los dispositivos deben estar en modo de emparejamiento para aparecer en los resultados de la consulta. La función también devuelve la lista de ID / RSSI como una matriz, por lo que puede llamarla desde su propio código y procesar los resultados devueltos. El valor de RSSI indica la intensidad de la señal de un dispositivo, por lo que es una medida indirecta de la proximidad (consulte Cómo encontrar la distancia desde el valor de RSSI del dispositivo habilitado con Bluetooth de baja energía ).

Dependiendo del dispositivo que quieras usar, Bluepy en Python podría ser un método mejor. Usé un Pi3 para medir el RSSI de los módulos Bluetooth (HM-10, dispositivos basados ​​en CC254x) y pude obtener estimaciones razonables de la distancia. Hay un montón de ruido en el RSSI, por lo que puede esperar inexactitudes de no menos de 1 m con algún procesamiento de señal. Escribí una publicación de blog sobre RSSI de HM-10 y Rpi, verifiqué si hay un método más profundo de cómo lo hago. Incluso incluí un código Python:

https://engineersportal.com/blog/2017/12/31/using-raspberry-pi-hm-10-and-bluepy-to-develop-an-ibeacon-mesh-network-part-1