Qt: 5.10,Linux Ubuntu 17.10,Bluez 5.4x
我正在使用QBluetooth连接多个蓝牙低能设备。每一次连接都很正常。但是,当我用QLowEnergyController::connectToDevice()连接到第二个设备时,我得到以下错误,第一个连接被中止:
qt.bluetooth.bluez: Cannot connect due to pending active LE Connections
qt.bluetooth.bluez: void QBluetoothSocketPrivate::_q_readNotify() 21 error: -1 "Software caused Connection abort"在此之后,建立第二个连接。
我正在使用QLowEnergyController的一个实例,在中央模式下,每个连接使用。
经过研究,我认为应该有可能创建多个连接到BLE外设与Bluez蓝牙协议栈。但我不确定QBluetooth是否支持这个功能.
谢谢你的帮忙!
发布于 2018-05-25 14:59:56
问题不是BLE,而是它的Qt实现。文档称,任何使用QLowEnergyController同时连接到两个BLE设备的尝试都将失败。检查它:http://doc.qt.io/qt-5/qlowenergycontroller.html;节“详细描述”,第5段:“基于BlueZ的Linux不能将两个连接的QLowEnergyController实例维护到同一个远程设备。在这种情况下,对connectToDevice()的第二次调用可能失败。”
根据这一点,应该可以使用类的两个实例与两个不同的远程设备建立连接,但它根本无法工作。如果您继续阅读文档,您会发现“这个限制可能会在将来的某个阶段消失”。
在连接到第二个设备(都是TI SensorTag)之前,我尝试了从第一个设备断开连接,但由于每次我重新连接程序变得太慢,我不得不重新发现服务并重新启用传感器(请参阅文档中的disconnectFromDevice() )。
如果您想使用Qt连接到两个设备,则必须通过带有Qt的D总线类的D总线使用Bluez API。
编辑:
我设法用D总线类连接到多个设备。我的程序的架构并不复杂,只是语法变得更复杂了。唯一的大问题是BlueZ版本:D总线接口在5.3x (默认Ubuntu16.04)之间发生了很大变化,它不支持低能量(试验性.)和后来的版本。我认为这就是Qt的D总线蓝牙还没有启用的原因。因为从BlueZ 5.42开始,BLE没有被标记为实验性的,所以在当前版本中使用D总线应该是很好的。为了记录在案,我很好地使用D总线与Raspbian的默认5.9BlueZ。
https://stackoverflow.com/questions/48925412
复制相似问题