小议蓝牙技术在多媒体教学的应用
时间: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、结束语
本文就蓝牙在多媒体教学中的应用提出了相应的解决方案,进行了设计与实现。系统完成并经过测试运行稳定,按照这种设计,在对系统扩展后,完成对更多的教学类应用软件进行远程控制,比如教学中幻灯片的播放同时的音视频录制等,实现通用的基于蓝牙的无线主机控制软件。
- 上一篇:音乐教育与审美教学分析综述
- 下一篇:透析物流战略联盟及其特点