2016-12-01 50 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藍牙模塊無功能」消失了:)