除了blueZ(Pybluez)之外,还有其他方法可获取RSSI值

时间:2019-04-24 19:01:01

标签: python bluetooth rssi pybluez

我在这一方面非常努力,因此任何帮助/指针将不胜感激。

我一直在尝试使用 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找到想要的东西这一事实,我似乎陷入了困境。

所以我的问题是:

  1. 是否有必要深入研究blueZ提供的蓝牙API?我似乎在任何地方都找不到!而且不要开始与我谈论他们的文档,这几乎是不存在的!

  2. 有什么办法可以使 HCI_Inquiry_Result_with_RSSI 与单个mac地址一起工作?

  3. 还有其他方法可以获取RSSI值吗?我尝试了hcitool(出现了同样的问题?),l2ping(在4/5成功后,我得到了100%的ping丢失,我没有对此进行深入研究)

  4. 可能是我的加密狗被操纵了吗?

  5. 如果我尝试从BLE设备检测RSSI会有所不同吗?

(我现在想坚持使用蓝牙,但是如果您想到我可以使用的任何其他RF信号,只需提及它,我将牢记在心,以便以后使用。)

感谢那些到那里阅读我的问题的人。

对我的英语感到抱歉,这已经是漫长的一天了。

和平

编辑:使用Bluez,我可以发现BT classic,或者向RSSI询问特定的地址(但可以得到超出黄金范围的值)。 我同样可以发现BLE,但找不到任何可用于RSSI的特定地址(适用于BLE)...

1 个答案:

答案 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()