8

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

我一直在尝试使用pyblueZ从 RSSI 获取精确值

我得到了一些好的结果,但下面是我不想要的东西(来自 blueZ doc):

对于 BR/EDR 控制器,Connection_Handle 用作 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地址。我也不想要。

以我的知识和我无法让谷歌找到我想要的事实,我到了一个我似乎被困住的地步。

所以我的问题是:

  1. 无论如何要深入研究 blueZ 提供的蓝牙 API 吗?我似乎在任何地方都找不到它!并且不要开始和我谈论他们的文档,它几乎不存在!

  2. 有没有办法让HCI_Inquiry_Result_with_RSSI与单个 mac 地址一起工作?

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

  4. 会不会是我的加密狗有点被操纵了?

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

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

感谢任何到达那里并阅读我的问题的人。

对不起我的英语,这是……漫长的一天。

和平

编辑:使用 Bluez,我可以发现 BT 经典,或要求特定地址的 RSSI(但获取超出黄金范围的值)。我也可以发现 BLE,但我找不到任何要求 RSSI 获取特定地址(用于 BLE)的东西……

4

1 回答 1

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()
于 2020-05-10T23:43:28.603 回答