【问题标题】:Is there any other way to get RSSI values than blueZ (Pybluez)除了blueZ(Pybluez)之外,还有其他方法可以获取RSSI值吗
【发布时间】:2019-09-14 03:43:08
【问题描述】:

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

我一直在尝试使用 pyblueZ

从 RSSI 获取精确值

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

对于 BR/EDR 控制器,Connection_Handle 用作句柄 命令参数和返回参数。 RSSI 参数返回 测量的接收信号强度指示之间的差异 (RSSI)和黄金接收功率范围的限制 Connection_Handle 到另一个 BR/EDR 控制器。 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)的东西...

【问题讨论】:

    标签: python bluetooth rssi pybluez


    【解决方案1】:

    对于 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2015-12-08
      • 2017-07-18
      • 1970-01-01
      • 2012-05-23
      相关资源
      最近更新 更多