小議藍牙技術在多媒體教學的應用

時間:2022-04-14 04:10:00

導語:小議藍牙技術在多媒體教學的應用一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

小議藍牙技術在多媒體教學的應用

論文關鍵詞:藍牙;遠程控制;J2ME;JABWT

論文摘要:藍牙無線通信具有無線性、低功耗等優點,非常適合于近距離的遠程控制。討論了在支持J2ME的藍牙手機設備上,用JABWT藍牙開發包編程與PC幻燈片主設備建立通信連接,并在此基礎上交換信息,實現對幻燈片翻頁的控制,從而擴展了教師在課堂中的活動距離可達10M左右,能更好地實現師生互動交流。

藍牙是一種開放的、解決中短距離的無線通信技術,具有很強的設備間的兼容性和互操作性,并且能提供在10m內具有藍牙接口的不同設備之間的互聯(10-100m范圍需要添加功率放大器),工作頻段免費,因此藍牙在短距離數據傳輸中有非常廣泛的應用前景。

在多媒體教學中,教師為了方便、快捷地通過和主機交互,來控制幻燈片的播放、翻頁,往往只能在距離講臺和主機的一個小范圍內移動,活動受到限制,教學效果不是很理想,為了改變這種現狀,本文基于J2ME平臺和VC"6.0編程環境,設計并實現了幻燈片遠程控制系統中的主機端服務器和手機端的客戶程序,成功實現了藍牙手機對主機中幻燈片的遠程遙控播放,與當前市場上同類產品相比,只需要額外購買一款通用的USB接口藍牙適配器,并結合大眾化的支持JZME的藍牙手機即可,無需智能機。本系統既可以讓教師離開枯燥的講臺實現遠程控制,又可以實現10米范圍內的學生互動交流,提高教學效果,有廣泛的應用前景。

1、藍牙技術規范

藍牙技術規范就是為了使符合該規范的各種應用之間能夠互聯。要實現藍牙設備之間的通信,不僅要有底層藍牙硬件,還需要上層協議棧的支持。藍牙BSIG標準組織(BluetoothSpecialInterestGroup,BSIG)的藍牙規范就是藍牙通信協議標準,規定了藍牙軟硬件應遵循的標準和達到的要求。根據藍牙協議的功能,協議棧可分為3個部分:底層硬件模塊、中間協議層和高層應用。具體藍牙協議棧結構如圖1。主機控制器接口(HostControlInterface,HCI)是對不同連接方式的抽象,它提供了調用下層基帶以及狀態和控制寄存器等硬件的一致的命令接口,使不同的連接方式對主機的協議軟件而言是透明的。規范的制訂需要考慮并達到不同藍牙產品之間的互聯性。藍牙系統構成的基本網絡單元稱為微微網((piconet),一個微微網內包括一個主設備(Master)和多個從設備(slave),設備的主從關系是在藍牙鏈路的建立過程中確定的,鏈路建立的發起者定義為主設備,其他響應者為從設備。

2、J2ME藍牙API

J2ME藍牙API(JavaApplicationforBluetoothWirelessToolkit,JABWT)屬于J2ME的藍牙擴展部分,是藍牙技術規范的第一個實現,由JSR82規范進行定義。JABWT包括兩個基本包,一個核心包為javax.bluetooth,另一個為javax.obex,后者提供對象交換協議,之所以和藍牙核心包分離開,是為了讓obex協議不依賴藍牙硬件,比如在紅外等支持對象交換協議的地方都可以使用javax.obex包。在具體應用中,核心包實現了藍牙協議棧中的L2CAP,SDP和RFCOMM等協議,主要應用于藍牙設備管理、設備發現和服務查找。在幻燈片控制應用中,通過在主機中插入藍牙適配器,就可以提供和手機間的藍牙通信,數據交換。

3、基于藍牙的應用架構

基于藍牙無線通信的應用大都采用C/S(Client/Server)架構。客戶端向服務器發送服務請求,服務器根據請求提供服務。具體服務可以選擇在不同的協議層上來實現。在多媒體教學中,我們把播放幻燈片的主機作為服務器端,負責接收對幻燈片的控制請求,手機作為客戶端,負責發送控制請求數據。

3.1服務器處理流程

服務器端流程圖如圖2所示,服務器是發起藍牙通信的一端,為主設備,手機為從設備。

3.1.1服務注冊

由于服務器端采用VC''''"6.0開發環境,自然采用微軟的藍牙協議開發工具包,首先需要調用WSAStartup函數對網絡進行初始化,定義一個基于RFCOMM的流套接字,綁定此套接字到一個本地藍牙設備,隨后注冊并一個服務,此時需要提供一個UUID(在手機客戶端仍然需要使用同一個QUID來發現本服務),可以通過Guidgen.exe工具自動生成,代碼如下:

SOCKADDR_BTHsa;SOCKETserver;CSADDR_INFOsockInfo;

server=socket(AFBTH,SOCK_STREAM,BTHPROTO_RF-COMM);

bind(server,(constsockaddr*)&sa,sizeof(SOCKADDR_BTH));

sockInfo.iProtocol=BTHPROTO_RFCOMM;sockInfo.iSocketType=SOCKSTREAM;

WSAQUERYSETsvcInfo=}0};

svcInfo.dwNameSpace=NS_BTH;

svcInfo.lpServiceClassId=(LPGUID)&SERVICE_UUID;

WSASetService(&svcInfo,RNRSERVICE_REGISTER,0);

3.1.2啟動服務器

當為一個本地藍牙設備注冊并一個服務后,就可以等待客戶端的連接請求。其中accept函數為阻塞函數,一直等到客戶端連接上方可返回,所以本代碼需要在單獨的后臺線程中運行,如果在界面線程中,則界面就會沒有反應,不能和用戶進行交互。返回的client在與藍牙客戶端收發數據中需要使用,需要保存。

SOCKETclient=accept(server,(LPSOCKADDR)&ca,&calen);

3.1.3接受手機客戶端服務請求處理

使用一般的網絡編程方式,調用recv函數讀取客戶端發送來的服務請求數據,本函數也為阻塞方式,也要放在單獨線程中運行。當客戶端斷開連接時,函數返回,同時rec為0;如果re。不為0,說明收到了客戶端的有效數據,進行處理即可。

rec=recv(client,data,sizeof(data),0);

if(rec<=0)break;//客戶端退出

/*對接受到得數據進行處理*/

刀繼續下次循環

3.1.4服務結束關閉連接

當手機客戶端退出時,要關閉服務端所對應客戶端的連接套接字,退出本服務所定義的線程。如果所有的客戶端請求處理結束,服務器要退出,也需要關閉服務器的套接字,釋放系統資源。

closesocket(client);…closesocket(server);

3.2客戶端處理程序

手機客戶端流程圖如圖3所示,采用J2ME進行編寫,能夠實現跨平臺,無論是否為智能手機都可以運行客戶端程序,對手機設備的要求不高。

3.2.1設備發現

通過JABWT中的DiscoveryAgent類和DiscoveryListener接口實現設備發現,DiscoveryAgent類中的startInquiry)方法可將設備置為查詢模式,同時指定一個事件監聽器,監聽查詢結果的到來和查詢結束兩個事件,主要是,當有查詢到的設備時,就發送deviceDiscovered這個事件,并調用deviceDiscovered()方法,當查詢結束時,調用inquiryCompleted()方法。

3.2.2服務發現

服務發現允許你發現附近的藍牙服務。DiscoveryAgent提供的方法可以用來發現藍牙設備上的服務。在某個服務可以被發現以前,必須首先在藍牙設備上注冊或廣播該服務。與設備發現類似也需要提供一個接口,接受服務查詢結果和查詢結束事件。

3.2.3與服務器通訊請求服務

以下代碼描述了服務協議屬性檢查:

StringconnString=agent.selectService

(uuid,ServiceRecord.NOAUTHENTICATE_NOENCRYPT,false);

if(connString==null)return

corm=(StreamConnection)Connector.open(connString);

OutputStreamout;InputStreamin;

out=conn.open0utputStream);in=conn.openInputStream();

/*按需發送通信數據*/

Stringmesg=""""";Byte]data二mesg.getBytes);out.writ-e(data);

3.3幻燈片控制請求的服務器端實現

微軟的Office套件,都提供了對應的API函數,不過需要依賴OLE編程接口。在使用VC''''*6.0編程環境建立基于MFC的工程時,需要選中OLE支持,在OnInitDialog)函數中需要調用AfxOIeInit)對OLE進行初始化,并且在類向導中選中從OLB類型庫中添加OfficePowerPoint的OLE自動化類,在彈出的文件選擇對話框中選擇…/Officell/MSPPT.OLB文件,在確認類對話框中選中一pplication,-Presentation,_S1ide,View等類,

app.CreateDispatch("Powerpoint.Application")

Presentation=app.GetActivePresentation);

slideshow=Presentation.GetSlideShowSettings);

slideshow.Run);

app.SetVisible(TRUE);

S1ideShowWindow二Presentation.GetSlideShowWindow();

view二S1ideShowWindow.GetView();

可通過向view對象發送Next,Previous,First和Last消息實現具體的幻燈片翻頁功能。

3.4多線程的使用

在一般的網絡編程中,需要單獨的一個非界面線程等待客戶的連接到來,如若需要等待多個客戶端,一般使用循環語句。當與客戶端建立連接后,數據的讀取和發送,可以選擇異步IO或阻塞方式,阻塞數據傳輸中,需額外創建兩個線程分別實現數據的讀取和發送。

4、結束語

本文就藍牙在多媒體教學中的應用提出了相應的解決方案,進行了設計與實現。系統完成并經過測試運行穩定,按照這種設計,在對系統擴展后,完成對更多的教學類應用軟件進行遠程控制,比如教學中幻燈片的播放同時的音視頻錄制等,實現通用的基于藍牙的無線主機控制軟件。