2016-12-01 297 views
0

我正在开发一个嵌入式应用程序,并使用Qt 5.7启用蓝牙LE功能。我正在开发的设备意味着扮演外围角色,它可以播送广告数据包并让智能手机连接到。QtBlueTooth在Linux上不可用

目标板在Ubuntu Linux 14.04上运行,蓝色版本为5.43(最新版本)由于Qt文档中提到“在Qt 5.7中,支持外设角色的附加API作为技术预览添加,后端仅实现Linux的/的BlueZ“。所以,我认为Qt蓝牙API正是我需要的。

但是当我建立和运行Qt的蓝牙例子(蓝牙低功耗心率服务器实例和蓝牙扫描仪例),他们都不工作。我只能得到控制台输出:“qt.bluetooth:假的后端运行.Qt蓝牙模块不起作用。”

我用Google搜索该错误消息,似乎是因为他们使用的是Windows平台上Qt的蓝牙API,和qt蓝牙API不支持Windows不少开发商得到这个错误消息。但我使用的是Ubuntu Linux,显然有些问题,但我不知道究竟是什么原因造成的。

我试图:

  1. 启用QtBluetooth记录。但没有更多有趣的信息可以显示。
  2. 不要使用任何的Qt蓝牙API,只需要使用命令行工具hciconfig和hcitool手动设置一个广告行为。而且它确实有效!我的iPhone可以“看见”设备,并且可以连接到它!

根据我所尝试的,我认为我的硬件没问题,蓝牙芯片可以工作,但我真的需要QtBluetooth API才能正常工作。也许我想念重要的事情?蓝色需要一些配置?请帮忙。

回答

0

OK,最后我设法解决这个问题。 Qt在通过源代码构建时有一些功能测试功能。如果主机上未安装某些开发包,则测试将失败并且该功能无法正常工作。在这种情况下,qt将使用虚拟后端,所以示例应用程序仍然可以编译成OK并运行,但没有任何实际用法。 (我已经列出了比需要更多的安装,以防万一)如果你使用的是蓝牙,那么你需要的软件包包括:蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙,蓝牙, ,请确保将所有这些安装在主机之前

我已经做好了所有的准备工作后,我跑配置脚本生成的Makefile的Qt。这是配置脚本使用:

#!/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  

运行配置脚本后,你会得到下yourQtSourcePath/qtbase /箱/年的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 

,那么你是好去,只是让& & make install的整个Qt的源,qt蓝牙现在可以正常工作。

编辑:

如果以任何方式,你无法通过蓝牙测试(这是很可能的,当你需要交叉编译,就像我的情况),我想出了一个解决方法。您仍然必须在make之前安装所有必需的dev-packages,这次为了通过蓝牙功能测试,您可以使用您的系统内置的qmake(apt-get install qt5-qmake,NOT您生成的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 

然后,您可以交叉编译通过使& &使安装整个的Qt源。

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