小議藍(lán)牙技術(shù)在多媒體教學(xué)的應(yīng)用

時(shí)間:2022-04-14 04:10:00

導(dǎo)語(yǔ):小議藍(lán)牙技術(shù)在多媒體教學(xué)的應(yīng)用一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

小議藍(lán)牙技術(shù)在多媒體教學(xué)的應(yīng)用

論文關(guān)鍵詞:藍(lán)牙;遠(yuǎn)程控制;J2ME;JABWT

論文摘要:藍(lán)牙無(wú)線通信具有無(wú)線性、低功耗等優(yōu)點(diǎn),非常適合于近距離的遠(yuǎn)程控制。討論了在支持J2ME的藍(lán)牙手機(jī)設(shè)備上,用JABWT藍(lán)牙開(kāi)發(fā)包編程與PC幻燈片主設(shè)備建立通信連接,并在此基礎(chǔ)上交換信息,實(shí)現(xiàn)對(duì)幻燈片翻頁(yè)的控制,從而擴(kuò)展了教師在課堂中的活動(dòng)距離可達(dá)10M左右,能更好地實(shí)現(xiàn)師生互動(dòng)交流。

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

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

1、藍(lán)牙技術(shù)規(guī)范

藍(lán)牙技術(shù)規(guī)范就是為了使符合該規(guī)范的各種應(yīng)用之間能夠互聯(lián)。要實(shí)現(xiàn)藍(lán)牙設(shè)備之間的通信,不僅要有底層藍(lán)牙硬件,還需要上層協(xié)議棧的支持。藍(lán)牙BSIG標(biāo)準(zhǔn)組織(BluetoothSpecialInterestGroup,BSIG)的藍(lán)牙規(guī)范就是藍(lán)牙通信協(xié)議標(biāo)準(zhǔn),規(guī)定了藍(lán)牙軟硬件應(yīng)遵循的標(biāo)準(zhǔn)和達(dá)到的要求。根據(jù)藍(lán)牙協(xié)議的功能,協(xié)議??煞譃?個(gè)部分:底層硬件模塊、中間協(xié)議層和高層應(yīng)用。具體藍(lán)牙協(xié)議棧結(jié)構(gòu)如圖1。主機(jī)控制器接口(HostControlInterface,HCI)是對(duì)不同連接方式的抽象,它提供了調(diào)用下層基帶以及狀態(tài)和控制寄存器等硬件的一致的命令接口,使不同的連接方式對(duì)主機(jī)的協(xié)議軟件而言是透明的。規(guī)范的制訂需要考慮并達(dá)到不同藍(lán)牙產(chǎn)品之間的互聯(lián)性。藍(lán)牙系統(tǒng)構(gòu)成的基本網(wǎng)絡(luò)單元稱為微微網(wǎng)((piconet),一個(gè)微微網(wǎng)內(nèi)包括一個(gè)主設(shè)備(Master)和多個(gè)從設(shè)備(slave),設(shè)備的主從關(guān)系是在藍(lán)牙鏈路的建立過(guò)程中確定的,鏈路建立的發(fā)起者定義為主設(shè)備,其他響應(yīng)者為從設(shè)備。

2、J2ME藍(lán)牙API

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

3、基于藍(lán)牙的應(yīng)用架構(gòu)

基于藍(lán)牙無(wú)線通信的應(yīng)用大都采用C/S(Client/Server)架構(gòu)??蛻舳讼蚍?wù)器發(fā)送服務(wù)請(qǐng)求,服務(wù)器根據(jù)請(qǐng)求提供服務(wù)。具體服務(wù)可以選擇在不同的協(xié)議層上來(lái)實(shí)現(xiàn)。在多媒體教學(xué)中,我們把播放幻燈片的主機(jī)作為服務(wù)器端,負(fù)責(zé)接收對(duì)幻燈片的控制請(qǐng)求,手機(jī)作為客戶端,負(fù)責(zé)發(fā)送控制請(qǐng)求數(shù)據(jù)。

3.1服務(wù)器處理流程

服務(wù)器端流程圖如圖2所示,服務(wù)器是發(fā)起藍(lán)牙通信的一端,為主設(shè)備,手機(jī)為從設(shè)備。

3.1.1服務(wù)注冊(cè)

由于服務(wù)器端采用VC''''"6.0開(kāi)發(fā)環(huán)境,自然采用微軟的藍(lán)牙協(xié)議開(kāi)發(fā)工具包,首先需要調(diào)用WSAStartup函數(shù)對(duì)網(wǎng)絡(luò)進(jìn)行初始化,定義一個(gè)基于RFCOMM的流套接字,綁定此套接字到一個(gè)本地藍(lán)牙設(shè)備,隨后注冊(cè)并一個(gè)服務(wù),此時(shí)需要提供一個(gè)UUID(在手機(jī)客戶端仍然需要使用同一個(gè)QUID來(lái)發(fā)現(xiàn)本服務(wù)),可以通過(guò)Guidgen.exe工具自動(dòng)生成,代碼如下:

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啟動(dòng)服務(wù)器

當(dāng)為一個(gè)本地藍(lán)牙設(shè)備注冊(cè)并一個(gè)服務(wù)后,就可以等待客戶端的連接請(qǐng)求。其中accept函數(shù)為阻塞函數(shù),一直等到客戶端連接上方可返回,所以本代碼需要在單獨(dú)的后臺(tái)線程中運(yùn)行,如果在界面線程中,則界面就會(huì)沒(méi)有反應(yīng),不能和用戶進(jìn)行交互。返回的client在與藍(lán)牙客戶端收發(fā)數(shù)據(jù)中需要使用,需要保存。

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

3.1.3接受手機(jī)客戶端服務(wù)請(qǐng)求處理

使用一般的網(wǎng)絡(luò)編程方式,調(diào)用recv函數(shù)讀取客戶端發(fā)送來(lái)的服務(wù)請(qǐng)求數(shù)據(jù),本函數(shù)也為阻塞方式,也要放在單獨(dú)線程中運(yùn)行。當(dāng)客戶端斷開(kāi)連接時(shí),函數(shù)返回,同時(shí)rec為0;如果re。不為0,說(shuō)明收到了客戶端的有效數(shù)據(jù),進(jìn)行處理即可。

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

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

/*對(duì)接受到得數(shù)據(jù)進(jìn)行處理*/

刀繼續(xù)下次循環(huán)

3.1.4服務(wù)結(jié)束關(guān)閉連接

當(dāng)手機(jī)客戶端退出時(shí),要關(guān)閉服務(wù)端所對(duì)應(yīng)客戶端的連接套接字,退出本服務(wù)所定義的線程。如果所有的客戶端請(qǐng)求處理結(jié)束,服務(wù)器要退出,也需要關(guān)閉服務(wù)器的套接字,釋放系統(tǒng)資源。

closesocket(client);…closesocket(server);

3.2客戶端處理程序

手機(jī)客戶端流程圖如圖3所示,采用J2ME進(jìn)行編寫,能夠?qū)崿F(xiàn)跨平臺(tái),無(wú)論是否為智能手機(jī)都可以運(yùn)行客戶端程序,對(duì)手機(jī)設(shè)備的要求不高。

3.2.1設(shè)備發(fā)現(xiàn)

通過(guò)JABWT中的DiscoveryAgent類和DiscoveryListener接口實(shí)現(xiàn)設(shè)備發(fā)現(xiàn),DiscoveryAgent類中的startInquiry)方法可將設(shè)備置為查詢模式,同時(shí)指定一個(gè)事件監(jiān)聽(tīng)器,監(jiān)聽(tīng)查詢結(jié)果的到來(lái)和查詢結(jié)束兩個(gè)事件,主要是,當(dāng)有查詢到的設(shè)備時(shí),就發(fā)送deviceDiscovered這個(gè)事件,并調(diào)用deviceDiscovered()方法,當(dāng)查詢結(jié)束時(shí),調(diào)用inquiryCompleted()方法。

3.2.2服務(wù)發(fā)現(xiàn)

服務(wù)發(fā)現(xiàn)允許你發(fā)現(xiàn)附近的藍(lán)牙服務(wù)。DiscoveryAgent提供的方法可以用來(lái)發(fā)現(xiàn)藍(lán)牙設(shè)備上的服務(wù)。在某個(gè)服務(wù)可以被發(fā)現(xiàn)以前,必須首先在藍(lán)牙設(shè)備上注冊(cè)或廣播該服務(wù)。與設(shè)備發(fā)現(xiàn)類似也需要提供一個(gè)接口,接受服務(wù)查詢結(jié)果和查詢結(jié)束事件。

3.2.3與服務(wù)器通訊請(qǐng)求服務(wù)

以下代碼描述了服務(wù)協(xié)議屬性檢查:

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();

/*按需發(fā)送通信數(shù)據(jù)*/

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

3.3幻燈片控制請(qǐng)求的服務(wù)器端實(shí)現(xiàn)

微軟的Office套件,都提供了對(duì)應(yīng)的API函數(shù),不過(guò)需要依賴OLE編程接口。在使用VC''''*6.0編程環(huán)境建立基于MFC的工程時(shí),需要選中OLE支持,在OnInitDialog)函數(shù)中需要調(diào)用AfxOIeInit)對(duì)OLE進(jìn)行初始化,并且在類向?qū)е羞x中從OLB類型庫(kù)中添加OfficePowerPoint的OLE自動(dòng)化類,在彈出的文件選擇對(duì)話框中選擇…/Officell/MSPPT.OLB文件,在確認(rèn)類對(duì)話框中選中一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();

可通過(guò)向view對(duì)象發(fā)送Next,Previous,First和Last消息實(shí)現(xiàn)具體的幻燈片翻頁(yè)功能。

3.4多線程的使用

在一般的網(wǎng)絡(luò)編程中,需要單獨(dú)的一個(gè)非界面線程等待客戶的連接到來(lái),如若需要等待多個(gè)客戶端,一般使用循環(huán)語(yǔ)句。當(dāng)與客戶端建立連接后,數(shù)據(jù)的讀取和發(fā)送,可以選擇異步IO或阻塞方式,阻塞數(shù)據(jù)傳輸中,需額外創(chuàng)建兩個(gè)線程分別實(shí)現(xiàn)數(shù)據(jù)的讀取和發(fā)送。

4、結(jié)束語(yǔ)

本文就藍(lán)牙在多媒體教學(xué)中的應(yīng)用提出了相應(yīng)的解決方案,進(jìn)行了設(shè)計(jì)與實(shí)現(xiàn)。系統(tǒng)完成并經(jīng)過(guò)測(cè)試運(yùn)行穩(wěn)定,按照這種設(shè)計(jì),在對(duì)系統(tǒng)擴(kuò)展后,完成對(duì)更多的教學(xué)類應(yīng)用軟件進(jìn)行遠(yuǎn)程控制,比如教學(xué)中幻燈片的播放同時(shí)的音視頻錄制等,實(shí)現(xiàn)通用的基于藍(lán)牙的無(wú)線主機(jī)控制軟件。