自动重新连接已信任的蓝牙设备

4
我正在尝试自动重新连接到一个BLE设备,这里是Taidoc Thermometer。我已经扫描了该设备,然后发出了“配对”命令,它成功了,然后是“信任”命令也成功了。
如果我在该设备上执行“info”命令,它会报告为已配对和受信任。
Name: TAIDOC TD1241
Alias: TAIDOC TD1241
Appearance: 0x0300
Paired: yes
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: no
UUID: Vendor specific           (00001523-1212-efde-1523-785feabcd123)
UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: Health Thermometer        (00001809-0000-1000-8000-00805f9b34fb)
UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
UUID: Battery Service           (0000180f-0000-1000-8000-00805f9b34fb)

然而,当设备开始广告时,它从不自动重新连接到设备。我还尝试手动启动扫描,但也没有什么区别。
我的理解是“信任”应该会使设备自动重新连接? Bluez文档并没有太多说明“信任”做了什么...
有什么提示可以使“信任”自动重连工作吗?

我在使用BlueZ时也遇到了自动重新连接设备的深层问题。BlueZ应该有一种“自动连接”功能,但文档记录不好,我从未使其正常工作。我认为你应该将用例和问题发布到BlueZ邮件列表中。 - Emil
我现在正在为Bluez编写一个“包装器”库,并实现了一个“autoConnect”函数,但它基本上只是不断扫描,直到找到设备。这不是一种非常有效或优雅的方式...但我想现在这可能是唯一的方法。在这里查看我的进展:https://github.com/weliem/blessed-bluez ...我可能确实会尝试使用Bluez邮件列表... - Martijn van Welie
1个回答

2
信任设备并不意味着它一旦可用就自动重新连接。信任设备意味着您正在与其建立绑定关系(即与设备配对并将绑定密钥保存在绑定数据库中)。当您与设备建立绑定关系时,有一些好处,包括:-
  • 连接可以加密。
  • 如果另一个设备使用LE Privacy来持续更改其蓝牙地址,则您的设备将能够看到远程设备的实际地址。

您可以在下面找到有关配对/绑定的更多信息:-

所以,要回答您最初的问题,如果您希望您的设备自动配对到温度计上,您必须在BlueZ机器上编写一个脚本/守护进程,以连续扫描并连接到找到的设备。您甚至可以将该守护进程作为启动脚本的一部分,以便在Linux机器启动时立即启动。您可以每隔几分钟进行一次扫描/连接,以避免不必要地浪费电池和处理能力。

希望这可以帮到您。


谢谢您的回答。但是在我的理解中,“pair”命令已经完成了绑定。我已经使用它与许多设备配对成功。所以我对“trust”命令的作用感到困惑... - Martijn van Welie
我刚刚使用需要绑定的脉搏血氧仪Nonin 3230进行了另一次测试。第一次连接时,由于它使用JustWorks配对,因此会配对并要求确认。第二次连接时,由于已保存了绑定密钥,因此只需正常连接,无需确认。但是,如果我在设备上执行“info”操作,则显示“Trusted: no”。我的结论是,对于绑定BLE设备,不需要信任。发出“pair”命令就足够了,并且密钥肯定已由Bluez存储。所以我仍然不知道“trust”是用来做什么的... - Martijn van Welie
你说得对,我查看了BlueZ源代码,似乎绑定和信任是不同的。然而,信任仍然不意味着你可以自动连接到你的设备。我会再多阅读一些资料,并相应地删除或修改我的答案。 - Youssif Saeed
好的!我明白了,“信任”可能不是用于“重新连接”……但现在我更加困惑它究竟是用来干什么的! - Martijn van Welie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接