问题
我想使用Qt的蓝牙低能耗连接到两个BLE设备。
系统
- 操作系统:Arch Linux 4.13.8
- bluez版本:5.47
- BLE适配器:剑桥硅无线电有限公司蓝牙软件狗(HCI模式)
解决方案
我使用了两个QLowEnergyController实例,如下所示:
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"
并且将成功地建立到CCD_ 5的连接。
已找到
我在QLowEnergyControllers:中发现了这样的描述
值得一提的是,一些平台,如基于BlueZ的Linux无法维护QLowEnergyController的两个连接实例到同一远程设备
注意:BLE0
和BLE1
是不同的远程设备。
我还可以确认,连接到相同的设备适用于我的bluez版本。当使用nodejs的package noble时,它也可以工作。
问题
- 它应该像我上面做的那样工作吗?(连接
BLE0
,然后连接BLE1
) - 我正在考虑使用第二个适配器,QBluetooth只能使用一个适配器(默认适配器)是正确的吗
- 有人能想出什么变通办法吗
目前已修复(QT 5.11,BlueZ 5.50,Raspian,用RPi 4测试)。我可以很容易地创建两个QLowEnergyController
实例。
但是,一次只能有一个活动的QBluetoothDeviceDiscoveryAgent
。这意味着必须首先发现所有设备,然后通过为每个外围设备创建一个单独的QLowEnergyController
对象来连接它们。
下面是一个很好的例子https://bugreports.qt.io/browse/QTBUG-73809