【问题标题】:Connecting a bluetooth LE device using bluez 4.01使用 bluez 4.01 连接蓝牙 LE 设备
【发布时间】:2014-12-03 19:42:40
【问题描述】:

我正在尝试将蓝牙低功耗血氧计与我的 Ubuntu 桌面连接,但遇到了一些问题。

我可以使用hcitool lescan 很好地看到设备,但我在输入时无法连接

sudo gatttool -b 00:1C:05:FF:ED:A9 -I [ ][00:1C:05:FF:ED:A9][LE]> connect

这些是来自hcidump -X的日志:

HCI Event: Command Status (0x0f) plen 4 LE Create Connection (0x08|0x000d) status 0x00 ncmd 1 HCI Event: Command Status (0x0f) plen 4 LE Start Encryption (0x08|0x0019) status 0x00 ncmd 1 HCI Event: Encrypt Change (0x08) plen 4 status 0x06 handle 64 encrypt 0x00 Error: PIN or Key Missing HCI Event: Command Status (0x0f) plen 4 Disconnect (0x01|0x0006) status 0x00 ncmd 1 HCI Event: Disconn Complete (0x05) plen 4 status 0x00 handle 64 reason 0x16 Reason: Connection Terminated by Local Host

这看起来像是某种身份验证失败。问题是血氧仪不需要任何 PIN 或密码。它只是一个简单的代理,可以将数据发送给与其连接的任何人。

谢谢

【问题讨论】:

    标签: linux ubuntu bluetooth bluetooth-lowenergy bluez


    【解决方案1】:

    尝试使用hcitool lecc 命令:

    sudo hcitool lecc 00:1C:05:FF:ED:A9
    

    【讨论】:

      【解决方案2】:

      我的血氧计也面临同样的问题。我还没有深入了解它,但我确实有一个解决方法。 YMMV。

      在我的情况下,前几次连接正常,然后由于您显示的相同 PIN 错误而停止工作。我的解决方法是删除与 oximiter 的配对(由最初成功的连接创建)。我通过“bt-device -r XX:XX:XX:XX:XX:XX”来做到这一点。之后连接成功。也就是说,需要在重新连接之前删除任何先前的配对。

      这是简短的答案 :-) 这是更详细的研究。

      如果您以 root 身份运行 hcidump (sudo hcidump -X),它将为您提供更详细的数据。你可能看到的是这样的:

      > ACL data: handle 69 flags 0x02 dlen 6
          SMP: Security Request (0x0b)
            auth req 0x00
      < HCI Command: LE Start Encryption (0x08|0x0019) plen 28
        0000: 45 00 ec 8e 25 1b 09 46  b3 f7 7e ae 20 be 0c 63  E...%..F..~. ..c
        0010: fc cf ef e5 82 61 e0 eb  d4 bd 54 f6              .....a....T.
      > HCI Event: Command Status (0x0f) plen 4
          LE Start Encryption (0x08|0x0019) status 0x00 ncmd 0
      > HCI Event: Command Status (0x0f) plen 4
          Unknown (0x00|0x0000) status 0x00 ncmd 1
      > HCI Event: Encrypt Change (0x08) plen 4
          status 0x06 handle 69 encrypt 0x00
          Error: PIN or Key Missing
      

      在我看来,oximiter 请求配对(第一个 ACL 数据转储),但 bluez 并没有像预期的那样启动配对。将此与初始成功连接进行比较。 oximiter 请求配对,此时本地 bluez 会响应配对请求:

      > ACL data: handle 70 flags 0x02 dlen 6
          SMP: Security Request (0x0b)
            auth req 0x00
      < ACL data: handle 70 flags 0x00 dlen 11
          SMP: Pairing Request (0x01)
            capability 0x03 oob 0x00 auth req 0x01
            max key size 0x10 init key dist 0x00 resp key dist 0x01
            Capability: NoInputNoOutput (OOB data not present)
            Authentication: Bonding (No MITM Protection)
            Initiator Key Distribution:    
            Responder Key Distribution:  LTK  
      > HCI Event: Number of Completed Packets (0x13) plen 5
          handle 70 packets 1
      > ACL data: handle 70 flags 0x02 dlen 11
          SMP: Pairing Response (0x02)
            capability 0x03 oob 0x00 auth req 0x01
            max key size 0x10 init key dist 0x00 resp key dist 0x01
            Capability: NoInputNoOutput (OOB data not present)
            Authentication: Bonding (No MITM Protection)
            Initiator Key Distribution:    
            Responder Key Distribution:  LTK
      

      我仍在调查以确定这是否是 bluez 中的错误,或者是否是我的用户错误。

      【讨论】:

      • 非常感谢您的详细解答。确实,这与我面临的问题相同。它确实连接一次或两次,然后失败,直到我重新启动机器。你用的是什么bluez版本?我知道 bluez 5.X 的 bluetoothctl 与血氧计完美配合,但由于兼容性问题,我真的需要让它与 bluez 4.X 配合使用。
      • 我遇到的问题可以用 bluez4 和 bluez5 重现。删除配对(无需重新启动)然后连接的解决方法是否适合您?只是想确定您的问题是否相同。
      • 问题是,我一开始就无法配对设备。不使用蓝牙管理器或任何其他控制台命令。因此,当我运行“bt-device -r”时,它只会返回“不存在”消息。
      【解决方案3】:

      试试:

      sudo gatttool -t random -b 00:1C:05:FF:ED:A9 -I
      

      然后输入connect

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 2015-06-08
        • 1970-01-01
        • 2014-10-04
        • 2018-11-16
        • 2016-03-20
        • 2013-04-11
        • 2014-12-17
        • 1970-01-01
        相关资源
        最近更新 更多