【问题标题】:Linux Bluetooth l2ping with signal strength (without connecting?)具有信号强度的 Linux 蓝牙 l2ping(不连接?)
【发布时间】:2011-11-29 12:51:14
【问题描述】:

这里的任何 Linux BlueZ/BT 专家:

我正在寻找一种“ping”已知 BT 设备(已知 BDADDR)的方法,如果它们在范围内,我想知道大概的信号强度。

我知道我可以先运行 l2ping,然后建立与设备的连接,最后检查 rssi 或链接质量,如果连接正常,则无需先配对。

但是,我正在寻找一种无需先连接到设备即可获得信号强度的方法。完美将是来自 l2ping 回复数据包的信号强度测量,但我不知道该信息是否可用并沿堆栈传递。

【问题讨论】:

    标签: c linux bluetooth rssi


    【解决方案1】:

    您可以在查询扫描期间获取 RSSI,而无需连接到设备。这是一个使用 pybluez 的示例。您也可以在 Linux 上使用 Bluez 直接从 C 中执行相同的操作。

    inquiry-with-rssi.py

    【讨论】:

    • 感谢您的链接和想法,但这需要设备处于可发现模式,但不一定如此。我知道我想要 ping/测量的所有设备的 bd_addr,这就是我开始使用 l2ping 的原因,其中不需要目标处于可发现模式。
    • 在这种情况下,您可以使用 hcitool(BlueZ 堆栈的一部分)。 hcitool。如果您执行“hcitool cc”创建没有加密/身份验证的连接,那么您可以使用“hcitool rssi”监控 rssi。唯一的问题是,如果您不进行身份验证(配对),某些设备可能不会让连接保持活动状态。
    • 是的,这行得通。到目前为止,我尝试的两个设备都允许(未配对)连接存在,以便我可以检查 rssi/lq。所以这是一个可行的解决方案,但以防万一有人知道一种无需连接且无法发现目标的方法,我仍然希望看到它。
    • 源链接似乎已失效。
    【解决方案2】:

    我在 iPhone 7 和 Raspberry Pi 上使用此代码,效果很好。

    #!/bin/bash
    
    sudo hcitool cc AA:BB:CC:DD:EE:FF 2> /dev/null
    
    while true
    do
        bt=$(hcitool rssi AA:BB:CC:DD:EE:FF 2> /dev/null)
        if [ "$bt" == "" ]; then
            sudo hcitool cc AA:BB:CC:DD:EE:FF  2> /dev/null
            bt=$(hcitool rssi AA:BB:CC:DD:EE:FF 2> /dev/null)
        fi
    
        echo "$bt"
    done
    

    【讨论】:

      【解决方案3】:

      非常老的问题,但有人可能仍然感兴趣。

      前面的答案讨论了查询扫描期间的 RSSI。这是正确的,但并不总是可行的,即无法发现的设备。 对于此类设备,您可以建立连接并最终请求连接 RSSI。可以使用 BlueZ 命令hcitool rssi <MAC:ADDRESS> 获取连接 RSSI。 混合 l2pinghcitool rssi 就可以了。 出于这个原因,我创建了这个存储库:[https://github.com/edoardesd/myBluez] 输出: 44 bytes from XX:XX:XX:XX:XX:XX id 8 time 8.23ms with RSSI -9

      【讨论】:

        猜你喜欢
        • 2014-08-16
        • 1970-01-01
        • 2015-04-11
        • 1970-01-01
        • 2012-03-09
        • 2011-03-02
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多