QtBlueTooth在Linux上不起作用

科林

我正在开发一个使用Qt 5.7启用了蓝牙LE功能的嵌入式应用程序。我正在开发的设备旨在充当外围设备,它可以广播广告包并允许智能手机进行连接。

目标板运行在具有bluez版本5.43(最新版本)的Ubuntu Linux 14.04上。由于Qt文档说:“在Qt 5.7中,添加了支持外围设备角色的其他API作为技术预览,后端仅针对Linux / BlueZ实现。 ” 因此,我认为Qt蓝牙API正是我所需要的。

但是,当我构建并运行Qt蓝牙示例(Bluetooth低能耗心率服务器示例和Bluetooth扫描仪示例)时,它们都不起作用。我只能得到控制台输出:“ qt.bluetooth:虚拟后端正在运行。Qt蓝牙模块不起作用。”

我搜索了该错误消息,似乎很多开发人员都收到了该错误消息,因为他们在Windows平台上使用Qt蓝牙API,而qt蓝牙api不支持Windows。但是我正在使用Ubuntu Linux,因此很明显出了点问题,但是我不知道是什么导致了问题。

我正在尝试:

  1. 启用QtBluetooth日志记录。但是没有其他有趣的消息要显示。
  2. 不要使用任何Qt蓝牙API,只需使用命令行工具hciconfig和hcitool即可手动设置广告操作。它实际上有效!我的iPhone可以“看到”该设备,并且可以连接到该设备!

根据我的尝试,我认为我的硬件还可以,蓝牙芯片可以工作,但是我确实需要QtBluetooth API才能正常工作。也许我错过了重要的事情?bluez需要一些配置吗?请帮忙。

科林

好吧,终于我设法解决了这个问题。当您通过源代码构建Qt时,它具有一些功能测试功能。如果主机上未安装任何开发包,则测试将失败,并且该功能将无法正常工作。在这种情况下,qt将使用虚拟后端,因此示例应用程序仍可以编译并运行,但没有任何实际用法。

说到qt蓝牙,所需的dev软件包是libbluetooth-dev蓝牙blueman bluez libusb-dev libdbus-1-dev bluez-hcidump bluez-tools(我列出的安装量超过了所需的安装量,以防万一)所有这些都在主机上完成之前进行。

完成所有准备工作之后,我运行configure脚本为Qt生成Makefile。这是我使用的配置脚本:

#!/bin/sh
./configure \
-v \
-prefix /opt/qt-5.7.0 \
-release \
-opensource \
-xplatform linux-arm-gnueabi-g++ \    # yes, I need to cross-compile
-qt-sql-sqlite \
-qt-zlib \
-qt-pcre \
-no-opengl \
-no-sse2 \
-no-openssl \
-qt-freetype \
-nomake examples \
-nomake tests \
-no-separate-debug-info \
-no-qml-debug \
-pkg-config \
-confirm-license    

运行configure脚本后,您将在您的QtSourcePath / qtbase / bin /下获得一个qmake可执行文件,然后可以通过执行以下命令来测试您的qtbluetooth函数:

qtSourcePath/qtbase/bin/qmake qtSourcePath/qtconnectivity/qtconnectivity.pro   

如果您看到类似以下内容的内容:

Checking for bluez... yes
Checking for bluez_le... yes
Checking for linux_crypto_api... yes

那么您就可以了,只需为整个Qt源进行&& make安装,qt蓝牙现在就可以正常工作了。

编辑:

如果无论如何您都不能通过蓝牙测试(这很可能在您需要交叉编译的情况下,例如我的案例),那么我已经找到了一种解决方法。您仍然需要在make之前安装所有必需的dev-package,这一次为了通过蓝牙功能测试,您可以使用系统内置的qmake(apt-get install qt5-qmake,而不是通过运行生成的qmake)配置脚本)以与qtconnectivity.pro配合使用。这样,您可以通过蓝牙功能测试并为qtconnectivity模块生成一个Makefile。

修改Makefile,更改QMAKE参数。就我而言,这是结果:

- QMAKE = /usr/lib/x86_64-linux-gnu/qt5/bin/qmake
+ QMAKE = /opt/qt-everywhere-opensource-src-5.7.0/qtbase/bin/qmake 

然后,您可以通过make && make install交叉编译整个Qt源。

我已经测试了解决方法,示例应用程序(heartRate服务器)现在可以正常工作了。烦人的消息“ qt.bluetooth:虚拟后端正在运行。Qt蓝牙模块不起作用” :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章