我在这一方面非常努力,因此任何帮助/指针将不胜感激。
我一直在尝试使用 pyblueZ
从RSSI获取精确值我得到了一些不错的结果,但这是我不想要的(来自blueZ doc):
对于BR / EDR控制器,将Connection_Handle用作手柄 命令参数和返回参数。 RSSI参数返回 测得的接收信号强度指示之间的差异 (RSSI)和黄金接收功率范围的限制 与另一个BR / EDR控制器的Connection_Handle。 Connection_Handle 应为ACL连接的Connection_Handle。任何积极的RSSI 控制器返回的值指示RSSI高于多少dB 上限,任何负值表示RSSI是多少dB 低于下限。零值表示RSSI位于内部 黄金接收功率范围。
换句话说,当接收器在发生器附近时,RSSI值仍将为0(可能是2/3米范围) 真的让我感到困扰。
我使用的方法是BlueZ的命令 HCI_Read_RSSI ,这里有一个示例:https://github.com/ewenchou/bluetooth-proximity
获取RSSI值的另一种方法是通过事件获取它: HCI_Inquiry_Result_with_RSSI ,在这里,我得到RSSI的真实值,但是,它是发现模式,有点慢,并且将所有设备退还给我。 mac地址。 而且我也不想。
以我的知识和我无法让Google找到想要的东西这一事实,我似乎陷入了困境。
所以我的问题是:
是否有必要深入研究blueZ提供的蓝牙API?我似乎在任何地方都找不到!而且不要开始与我谈论他们的文档,这几乎是不存在的!
有什么办法可以使 HCI_Inquiry_Result_with_RSSI 与单个mac地址一起工作?
还有其他方法可以获取RSSI值吗?我尝试了hcitool(出现了同样的问题?),l2ping(在4/5成功后,我得到了100%的ping丢失,我没有对此进行深入研究)
可能是我的加密狗被操纵了吗?
如果我尝试从BLE设备检测RSSI会有所不同吗?
(我现在想坚持使用蓝牙,但是如果您想到我可以使用的任何其他RF信号,只需提及它,我将牢记在心,以便以后使用。)
感谢那些到那里阅读我的问题的人。
对我的英语感到抱歉,这已经是漫长的一天了。
和平
编辑:使用Bluez,我可以发现BT classic,或者向RSSI询问特定的地址(但可以得到超出黄金范围的值)。 我同样可以发现BLE,但找不到任何可用于RSSI的特定地址(适用于BLE)...
答案 0 :(得分:0)
对于BLE,您可以使用hcitool和btmon,您应该在输出中看到RSSI值,例如:
sudo btmon
并在另一个外壳中:
sudo hcitool lescan
为了更方便的访问,我将btmon修改为仅输出时间戳,地址和RSSI。也可以在每个收到的事件上定义自定义回调:https://github.com/kbobrowski/btlemon
import pybtlemon
def callback(addr, rssi):
print(f"addr: {addr}, distance: {10**((-60-rssi)/20):.2f}")
pybtlemon.set_callback(callback)
pybtlemon.run()