【问题标题】:Measuring proximity with bluetooth on raspberry Pi在树莓派上测量蓝牙的接近度
【发布时间】:2014-04-22 00:57:57
【问题描述】:

我一直在尝试使用这个脚本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 库(或更现代的等效库)来测量蓝牙设备与树莓派的距离?

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

谢谢。

【问题讨论】:

标签: python sockets bluetooth raspberry-pi


【解决方案1】:

根据您要使用的设备,Python 中的 Bluepy 可能是更好的方法。我使用 Pi3 测量蓝牙模块(基于 HM-10、CC254x 的设备)的 RSSI,并能够得到合理的距离估计。 RSSI 中存在大量噪声,因此通过一些信号处理,预计误差不少于 1m。我从 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

【讨论】:

    【解决方案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)。

    【讨论】:

    • 这在我看来是正确的,但 NULL 不是 python 中的空单例,并且 None 不起作用。 hci_get_route 函数需要接收蓝牙设备的字符串化地址。这可以通过在终端中运行 hcitool dev 来获得
    • 很抱歉;我已经修改了答案。而不是 NULL,-1
    • 我认为 dev_id = bluez.hci_get_route() 也可以。
    猜你喜欢
    • 2013-04-09
    • 2017-03-30
    • 2016-01-18
    • 2015-08-09
    • 2021-01-03
    • 2016-12-07
    • 2021-06-20
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多