5

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

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

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

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

4

3 回答 3

6

您可以在查询扫描期间获取 RSSI,无需连接设备。这是一个使用 pybluez 的示例。你也可以在 Linux 上使用 Bluez 直接从 C 中做同样的事情。

使用 rssi.py 进行查询

于 2011-10-03T15:48:11.393 回答
5

我在我的 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
于 2017-05-11T16:30:36.230 回答
1

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

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

于 2019-09-18T13:18:30.940 回答