王 超,趙建軍,李 偉,徐 釗
(昆明理工大學,云南 650500)
隨著網絡技術和信息技術的進一步發展,人們對通信系統的需求越來越集中于網絡寬帶和無線通信技術之上。藍牙是由愛立信、諾基亞、IBM、英特爾和東芝等五家公司聯合制定的短矩離無線通信技術[1-2]。藍牙技術工作在全球通用的 2.4GHz頻段,即ISM頻段,作為一種近矩離無線技術規范,因其有著開放性、低功耗、低成本、低輻射、安全性、體積小[3-6]等眾多優點而被廣泛運用到PDA、移動電話、臺式計算機、筆記本電腦等[7-8]。以藍牙技術為依托,構建出了一個小型廣告系統,通過在室內或者室外布置藍牙廣播站,這些藍牙設備會自動搜索范圍內的藍牙設備,詢問是否愿意接收該文件,若用戶同意接收該文件時,系統會自動將該文件發送到用戶終端。與現有廣告媒體相比,該系統搭配了藍牙技術強大的背景和功能,具有很好的適用性,穩定性。通過藍牙設備,將廣告信息發送到用戶帶有藍牙設備的手持設備中,縮短了用戶對廣告信息獲取的時間。Qt是一個功能強大的 GUI系統,Qt/Embedded是一個面向嵌入式系統的Qt版本[9]。提出一種基于藍牙技術的嵌入式開發方法,融合嵌入式技術、藍牙技術以及Qt/Embedded界面,構建一體化的嵌入式藍牙應用系統。利用藍牙官方提供的協議棧Bluez進行開發,在開發平臺完成了Bluez的移植,Qt設計器完成控制界面。在界面下對藍牙設備進行編程,完善藍牙設備的廣告功能,實現一個嵌入式藍牙廣告的小型系統。
ARM9硬件平臺以S3C2440A為核心處理器,外圍可擴展NAND/NOR Flash、音頻輸入輸出接口、USB接口、RS232接口、RJ45接口、SD卡接口、復位電路、時鐘電路及電源電路等。S3C2440A采用ARM920T內核,主頻203MHz,內部具有32M NAND Flash,16M NOR Flash及64M SDRAM。外圍擴展USB接口和RS232用于藍牙適配器連接和PC端口通信。系統硬件原理圖如圖1所示。

圖1 系統硬件原理圖
USB模塊集成在 S3C2440A芯片中,在使用S3C2440A時可以同時使用其中的 USB模塊。S3C2440A帶有兩個USB控制器,一個主設備控制器和一個從設備控制器,兩個設備均為四線控器,分別接5V電源,D-、D+數據信號和接地線。主USB主要用于接U盤、攝像頭等,從USB使用USB延長線,連接到PC,主要用于傳輸數據。在本次開發中USB主要用于連接藍牙適配器。
串口在開發或者是實驗中都是非常重要的接口之一,通過它能與PC進行數據傳輸,交互操作等。開發平臺具有一個五線異步串行和一個UART擴展接口。本設計采用SP3232EEN電壓轉換芯片將引出串口的 RSRXD0和 RSTXD03.3V電平轉換為232電平。UART可工作在中斷模式和DMA模式。
由于Linux內核過于龐大,對于受到資源限制的嵌入式系統來說,將其完整的運用到嵌入式系統中似乎是不太可能完成的事。所以為了能將嵌入式系統資源進行合理的利用、分配,Linux內核必須經過裁剪,配置,保留我們僅需要的部分,將其運用到嵌入式系統當中[10]。首先在宿主機上建立交叉編譯環境,然后從Linux官網上下載Linux-2.6.38內核源代碼,將其解壓到工作目錄中,檢查Makefile文件,確保ARCH=arm和CROSS_COMPILE=armlinux,在終端中進入其工作目錄,輸入make menuconfig進行內核配置,配置完成后按EXIT并保存退出。然后采用壓縮方式,執行make zImage,完成這個命令后,在其工作目錄的arch/arm/boot文件下生成了內核壓縮鏡像zImage,將其燒寫到開發平臺中。以這種方式編譯出來的內核小,有利于進行嵌入式系統的開發。
因為在linux2.6以上的版本中,藍牙內核已經集成在linux內核中,所以我們只要進行藍牙協議棧的移植。在內核代碼中,Bluez軟件開發包實現了主機控制接口和套接字接口的全部功能[11]。進入藍牙官網,下載藍牙函數庫bluez-lib-3.36、藍牙工具集 bluez-utils-3.36和其所依賴的庫文件expat-2.0.1或者 libxml2 -2.6.32、gblib -2.22.4、libusb -0.1.12、dbus - 1.3.0 和 openobex - 1.12。將它們進行解壓安裝。然后進入內核目錄,再次輸入make menuconfig配置內核,將我們所需要的藍牙網絡協議棧加入內核當中,重新編譯燒寫zImage。將藍牙 bin、sbin、etc、lib拷貝到開發平臺對應的文件系統下。在內核代碼中,Bluez軟件開發包實現了通過上述說明完成藍牙協議棧BlueZ的移植之后,基于ARM Linux的藍牙應用開發平臺就已經搭建好了,下面我們將利用藍牙函數庫來進行嵌入式平臺下藍牙通信的開發和應用。
從網上下載我們所要用到的tmake-1.11、qtembedded-2.3.7、qt- x11 - 2.32、qtopia - free -1.7.0的RPM包并安裝,在PC平臺下進行編譯,并在PC機上的linux下進行配置、編譯和安裝:
./configure–qconfig qpe–xplatform x86-linux-g++ -xplatform arm-linux-g++Qtopia開發最為核心的東西是由Qtopia開發工具包提供的Software Development kit(SDK),在Qtopia版本的編譯和安裝之后可以得到如下工具包:
(1)虛擬幀緩沖qvfb(Qt virtual frame buffer):是一個X Windows下的framebuffer仿真器,它主要有兩個方面的作用,一是它建立了一個system V共享目錄,用戶只需將需要顯示的圖像按像素格式要求加入到共享內存里,qvfb就可以顯示圖像了;二是提供了鍵盤和鼠標接口。
(2)designer工具:是利用Qt組件設計窗口布局或是用來組建GUI的工具。它提供了信號與槽的連接功能,但是沒有辦法實現組件對象函數的重載和添加。
(3)tmake工具:用來生成Makefile文件;
(4)用戶界面編譯器uic工具:將designer工具設計出來的ui文件或者XML格式文件生成源代碼;
(5)元對象編譯器moc工具:用來生成一些與信號和槽相關的底層代碼預編譯工具。
有了這些工具以后,配合交叉編譯GUN C++就可以在linux環境下進行Qt/Embedded的應用程序開發。
Qt designer是一款Qt提供的非常強大的圖形編譯工具,提供了非常多的部件資源,如按鈕、菜單、應用程序窗口等,把它們結合起來使用可以完成各種各樣我們需要實現的界面。利用Qt designer可以加快我們寫Qt程序速度,并且可以使我們能更快的學會Qt[12]。本文是利用Qt desinger設計出控制界面,實現廣告系統功能,具體的操作步驟如下:①利用Qt designer完成所需要的界面設計,并生成*.ui文件類型;②建立轉換ui為源碼的腳本文件,并生成*.h頭文件和*.cpp文件;③手工建立 main.cpp文件④利用progen軟件產生pro工程文件;⑤利用tmake工具生成相應的makefile文件,并做出相應的修改,去掉文件重復部分;⑥制作桌面啟動器和桌面圖標;⑦修改*.cpp文件使其完成要實現功能的編程;⑧使用make編譯。
經過上述的一系列步驟之后,一個完整的嵌入式藍牙開發平臺就已經搭建好了。在搭建的平臺之下,利用藍牙函數庫來進行嵌入式藍牙通信的開發。Bluez-lib-3.36主要提供程序開發的庫函數和應用程序接口,以便于用戶進行藍牙應用的開發。Bluez-utils-3.36提供藍牙工具集和藍牙設備的配置文件,實現藍牙的初始化和控制。其中幾個重要的工具功能為:hciconfig工具對藍牙進行配置,如開始藍牙設備,暫停藍牙設備等,格式上類似于ifconfig,可以用來設置HCI設備的參數;hcitool工具用來進行查找附近的藍牙設備,顯示遠端藍牙設備的地址,名稱等,能夠完成與藍牙相關的多種功能;l2ping主要用來建立socket形式來調用L2CAP接口,如查看兩個藍牙設備是否建立網絡連接。sdptool主要用來查看與藍牙服務相關的多種功能或者管理本地SDPD維護的數據庫,用于查看搜索到的藍牙設備可以得到的服務功能。Hciattach工具主要用來初始化藍牙設備。Qt designer可以用來為我們設計合理的藍牙廣告控制界面,并實現藍牙廣告的功能。
構建以ARM Linux為開發平臺的藍牙設備與開發者,藍牙設備相互之間的通信網絡,從而構建基于Qt界面的藍牙廣告系統。系統大概包括以下幾個部分:ARM硬件平臺、Linux系統、藍牙函數庫、Qt界面、藍牙廣告系統功能實現。
藍牙廣告系統在設計過程中包括了以下幾個功能模塊:藍牙控制模塊、藍牙搜索模塊、服務發現模塊、連接模塊、廣告發送模塊。每個模塊具體功能實現如下:
(1)控制模塊:控制模塊提供一個可以控制藍牙服務器端的藍牙設備接口,來控制藍牙服務器端所要進行的操作,主要有以下幾個方面:初始化藍牙設備,啟動服務器藍牙模塊,暫停、恢復、重啟藍牙服務模塊,獲取搜索到的藍牙設備,與藍牙客戶端建立連接,偵聽藍牙服務器端的運行狀態等。
(2)搜索模塊:每一個藍牙設備的48位地址是藍牙設備的唯一標識符,只有在得到藍牙設備地址之后,藍牙設備之間才能進行信息交互。當啟動藍牙設備之后,利用搜尋功能搜索附近所有的藍牙設備,獲取藍牙設備相應的48位地址標識符、藍牙設備名字、藍牙設備類型等相關信息。搜索結束后,將所有得到的藍牙設備地址進行存儲。
(3)服務發現模塊:在藍牙設備出廠之前,藍牙生產商在藍牙設備中就已經編碼了藍牙設備的服務類型和其相關的類別屬性。利用藍牙的服務發現模塊可以得到搜索到的藍牙設備可以支撐的服務信息,比如 OBEX File Transfer、OBEX Object Push、Dial-up networking、Voice Gateway等等。
(4)連接模塊:當一個藍牙設備與其它藍牙設備進行信息交互時,一些藍牙備需要藍牙服務器端提供PIN碼,這時藍牙設備把固化在hcid中的PIN碼推送到藍牙設備,再由藍牙設備做出響應。當服務器端藍牙設備與客戶端藍牙設備取得連接之后,我們就可以進行藍牙設備之間信息的交互。
(5)廣告發送模塊:藍牙設備搜索到附近藍牙設備之后,該藍牙設備就會向搜索到的藍牙設備發送廣告內容。該設計中提供了手動和自動兩種發送方式:點擊界面的browse功能按鈕找到需要發送的廣告內容,用下面兩種方法進行藍牙設備廣告的推送。
(6)廣告效果的反饋:待藍牙設備發送廣告之后,通過反饋功能來偵聽廣告的發送情況,如:該廣告內容是否發送成功,在這段時間內發送了多少條廣告,記錄下發送成功或者失敗的藍牙物理地址,以便進行統計。
界面設計如圖2所示。

圖2 藍牙廣告系統界面
手動實現打開藍牙設備,點擊search按鈕,搜索藍牙設備,將搜索到的藍牙設備名字,MAC地址分別顯示在對應的欄目下,選擇我們想要發送的藍牙設備。然后點擊browse選擇我們所要發送的文件,文件的路徑名稱會顯示在browse按鈕左邊的line edit中,然后點擊Send按鈕將廣告內容或者文件發送到對應的藍牙設備下。
設置界面主要用來對藍牙設備PIN Code和藍牙設備名稱的更改,輸入自己喜歡的PIN Code和名稱,點擊更改PIN碼按鈕和更改名稱按鈕分別對PIN碼和名稱做出相應的修改,點擊Close關閉整個系統。
自動發送是整個系統的核心功能,設置所要發送文件和希望發送的時間(最大可設為24小時),點擊start按鈕,系統會自動搜索附近的藍牙設備。在設置好的發送時間內,藍牙設備會自動搜索附近的藍牙設備,搜索到藍牙設備后自動與之進行連接,待搜索到的藍牙設備同意服務請求后,系統會將文件自動地發送給搜索到的藍牙設備。等設定的時間結束后,系統會自動暫停。待重新設定文件與時間,重新開始廣告文件的發送。點擊Cancel可以將正在活動的內容取消。點擊Close關閉整個系統。
在藍牙協議棧上選用藍牙規范中的主機控制接口,服務發現協議,邏輯鏈路控制與適配協議、交換協議等,并在此基礎上實現了藍牙系統的廣告功能。
服務器端系統詳細的程序流程圖如圖3所示。

圖3 程序流程圖
通過上述開發方法完成嵌入式藍牙系統的設計后,對該藍牙廣告系統做了一定的測試。通過測試,證明了該系統已經能和本身之外其它可見的藍牙設備建立正常的通信連接,能很好的實現本設計功能。
根據藍牙協議設計出了一種基于ARM+Linux下Qt界面的藍牙廣告系統,該系統可以對文字,圖片,視頻,名片等眾多格式的廣告信息發布到搜索到的藍牙設備上,同時對發送情況和狀態進行記錄,以便能很好的統計這個廣告系統的發送效果。利用Qt界面來實現在對藍牙的控制,可以很好地實現人機互連,簡單,易懂,操作性高。隨著藍牙技術和藍牙廣告媒體、以及短距離無線技術的進一步發展,藍牙廣告將會被運用在越來越多的地方,將會使更多的信息進入到我們的手機或者其它集成有藍牙的設備中。同時文中介紹的藍牙廣告也可以和電腦相結合,實現電腦與嵌入式平臺的雙向操作,而達到統一的操作目的,實現藍牙廣告媒體多種方式的統一聯播。
[1]錢志鴻,楊帆,周求湛.藍牙技術原理、開發與應用[M].北京:北京航空航天大學出版社,2006.
[2]嚴紫建,劉元安.藍牙技術[M].北京:北京郵電大學出版社,2001.
[3]卜奎昊,陳伏兵,宋杰.基于Bluez協議棧的嵌入式系統無線通信實現[J].微計算機信息,2009,25(7-2):172-173.
[4]張超,顧曉峰,赦衛娟.基于嵌入式藍牙模塊的嵌入式系統設計[J].電子與封裝,2009,12(9):20 -22.
[5]徐峰.基于 ARM9和 LINUX的藍牙視頻傳輸系統[D].湖南:國防科技大學研究生院,2010.
[6]張健,林海.基于嵌入式Linux的藍牙通信的實現[J].消防技術與產品信息,2011,(2):53-55.
[7]蔣綱,周敬利,余勝生,等.基于Bluetooth OBEX協議的文件傳輸技術的研究[J].小型微型計算機系統,2003,4(24):688 -690.
[8]周龍.嵌入式藍牙技術研究及實現[D].湖北:華中科技大學,2009.
[9]周鳴爭.嵌入式系統應用[M].北京:中國鐵道出版社,2010.
[10]鄧俊華,杜玉曉,敖永紅.基于 S3C2410處理器的linux移植[J].微型電腦應用,2009(25):53-55.
[11]倪曉軍,鄭龍,章志成,等.基于藍牙技術的嵌入式廣告發送系統設計[J].科學技術與工程,2011,11(8):1722-1727.
[12]文全剛.嵌入式Linux操作系統的原理與應用[M].北京:北京航天航空大學出版社,2011.