在树莓派上使用蓝牙测量距离
我一直在尝试使用这个脚本 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 库(或者更现代的替代品)来测量蓝牙设备与树莓派之间的距离?
还有,我在这个脚本中做错了什么,导致我创建了一个坏的连接?
谢谢。
2 个回答
根据你想使用的设备,Python中的Bluepy可能是更好的选择。我用树莓派3来测量蓝牙模块(HM-10,基于CC254x的设备)的RSSI,并且能够得到比较合理的距离估算。RSSI中有很多噪声,所以你要准备好接受至少1米的误差,尽管经过一些信号处理后会有所改善。我写了一篇关于HM-10和树莓派的RSSI的博客文章,里面详细介绍了我如何进行测量。甚至还包括了一些Python代码:
试试这个:
运行 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值表示设备的信号强度,因此可以间接反映距离(详细信息可以查看从蓝牙低能耗设备的RSSI值找距离)。