对于这里的任何 Linux BlueZ/BT 专家:
我正在寻找一种“ping”已知 BT 设备(已知 BDADDR)的方法,如果它们在范围内,我想知道大致的信号强度。
我知道我可以先运行 l2ping,然后建立与设备的连接,最后检查 rssi 或链接质量,如果连接正常,则无需先配对。
但是,我正在寻找一种无需先连接到设备即可获得信号强度的方法。完美将是来自 l2ping 回复数据包的信号强度测量,但我不知道该信息是否可用并沿堆栈传递。
您可以在查询扫描期间获取 RSSI,无需连接设备。这是一个使用 pybluez 的示例。你也可以在 Linux 上使用 Bluez 直接从 C 中做同样的事情。
我在我的 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
很老的问题,但有人可能仍然感兴趣。
前面的答案在查询扫描期间讨论了 RSSI。这是正确的,但并不总是可行的,即无法发现的设备。对于此类设备,您可以建立连接并最终请求连接 RSSI。可以使用 BlueZ 命令获取连接 RSSI hcitool rssi <MAC:ADDRESS>
。混合l2ping
并hcitool rssi
做到这一点。出于这个原因,我创建了这个存储库:[ https://github.com/edoardesd/myBluez ]
输出:
44 bytes from XX:XX:XX:XX:XX:XX id 8 time 8.23ms with RSSI -9