在覆盆子Pi上测量与蓝牙的接近程度

时间:2014-03-16 22:25:25

标签: python sockets bluetooth raspberry-pi

我一直在尝试使用此脚本https://github.com/karulis/pybluez/blob/master/examples/advanced/inquiry-with-rssi.py但似乎sock = bluez.hci_open_dev(dev_id)会返回一个不工作的套接字。每次将sock传递给函数error(9, 'Bad file descriptor')时都会抛出。

这个脚本已经很老了,所以它不再适用。所以我有两个问题。有谁知道如何使用pybluez库(或更现代的等价物)来测量蓝莓设备与覆盆子pi的接近度?

这个脚本导致我构建一个损坏的套接字,我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

试试这个:

运行hcitool dev以获取蓝牙设备的地址。

在您关联的脚本中,从以下位置更改第120行:

dev_id = 0

为:

dev_id = bluez.hci_get_route(ADDRESS_FOR_YOUR_BLUETOOTH_DEVICE)

要测量接近度,脚本会调用函数

device_inquiry_with_with_rssi(sock)

应打印蓝牙设备ID列表及其对应的RSSI值(参见第95-102行)。通常,设备必须处于配对模式才能显示在查询结果中。该函数还将ID / RSSI列表作为数组返回,因此您可以从自己的代码中调用它并处理返回的结果。 RSSI值表示设备的信号强度,因此是接近度的间接度量(参见Finding distance from RSSI value of Bluetooth Low Energy enabled device)。

答案 1 :(得分:1)

根据您要使用的设备,Python中的Bluepy可能是更好的方法。我使用Pi3测量来自蓝牙模块(基于HM-10,CC254x的设备)的RSSI,并且能够获得合理的距离估计。 RSSI中存在大量噪声,因此对于某些信号处理,预计会出现不小于1米的误差。我在HM-10和Rpi上写了一篇关于RSSI的博客文章,请查看一下我如何深入研究它的方法。我甚至包括了一些Python代码:

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