首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt蓝牙低能多路连接

Qt蓝牙低能多路连接
EN

Stack Overflow用户
提问于 2018-02-22 10:44:58
回答 1查看 1.2K关注 0票数 0

Qt: 5.10,Linux Ubuntu 17.10,Bluez 5.4x

我正在使用QBluetooth连接多个蓝牙低能设备。每一次连接都很正常。但是,当我用QLowEnergyController::connectToDevice()连接到第二个设备时,我得到以下错误,第一个连接被中止:

代码语言:javascript
复制
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是否支持这个功能.

  1. 有人知道与QBluetooth的多个LE连接吗?
  2. 这是建立第二个连接的正确方式吗?
  3. 有人知道一个好的解决办法吗?

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48925412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档