【发布时间】:2018-04-08 23:54:05
【问题描述】:
问题
我想用Qt的Bluetooth Low Energy连接两个BLE设备。
系统
- 操作系统:Arch Linux 4.13.8
- bluez 版本:5.47
- BLE 适配器:Cambridge Silicon Radio, Ltd 蓝牙适配器(HCI 模式)
解决方案
我有两个这样的QLowEnergyControllers 实例:
controller0 = QLowEnergyController::createCentral(qBluetoothDeviceInfoBLE0, this));
controller1 = QLowEnergyController::createCentral(qBluetoothDeviceInfoBLE1, this));
如果然后成功连接到BLE0,并且在发出信号connected() 后,我将启动到BLE1 的连接。与BLE0 的连接将中止:
qt.bluetooth.bluez: Cannot connect due to pending active LE connections
qt.bluetooth.bluez: void QBluetoothSocketPrivate::_q_readNotify() 17 error: -1 "Software caused connection abort"
...与BLE1的连接将成功建立。
找到
我在QLowEnergyControllers中找到的是这个描述:
值得一提的是,某些平台,例如基于 BlueZ Linux 无法维护 QLowEnergyController 的两个连接实例 到同一个远程设备
注意:BLE0 和 BLE1 是不同的远程设备。
我还可以确认,我的 bluez 版本可以连接到相同的设备。在使用 nodejs 的包 noble 时也可以使用。
问题
- 它应该像我上面所做的那样工作吗? (连接到
BLE0,然后连接到BLE1)? - 我正在考虑使用第二个适配器,QBluetooth 只能使用一个适配器(默认适配器)是否正确?
- 有人能想到任何解决方法吗?
【问题讨论】:
-
这似乎是 Qt 的 BLE 实现中的一个错误。 BlueZ 可以处理与多个设备的连接。
-
bluez和多个连接中存在一些错误,但我的版本显然适用于多个连接,是的。我试图找出这是否是错误的行为,并会报告回来。 -
我在 Ubuntu 17.10、Qt 5.10 上遇到了同样的问题。马库斯你的问题解决了吗?
-
@DenysRogovchenko 很遗憾没有,仍在进行中
-
@Marcus 我在 Ubuntu 17.10、Qt 5.10 上遇到了同样的问题。显然,Qt 尚不支持 bluez dbus API,根据此评论:bugreports.qt.io/browse/… 此处跟踪了在同一设备上维护多个连接所需的 bluez dbus API:bugreports.qt.io/browse/QTBUG-46819 似乎中心角色将是与 Qt 5.11 一起出现。我们应该注意这一点。
标签: c++ qt bluetooth-lowenergy qt5 bluez