论文摘要:蓝牙无线通信具有无线性、低功耗等优点,非常适合于近距离的远程控制。讨论了在支持j2me的蓝牙手机设备上,用jabwt蓝牙开发包编程与pc幻灯片主设备建立通信连接,并在此基础上交换信息,实现对幻灯片翻页的控制,从而扩展了教师在课堂中的活动距离可达10m左右,能更好地实现师生互动交流。
蓝牙是一种开放的、解决中短距离的无线通信技术,具有很强的设备间的兼容性和互操作性,并且能提供在10m内具有蓝牙接口的不同设备之间的互联(10-100m范围需要添加功率放大器),工作频段免费,因此蓝牙在短距离数据传输中有非常广泛的应用前景。
在多媒体教学中,教师为了方便、快捷地通过和主机交互,来控制幻灯片的播放、翻页,往往只能在距离讲台和主机的一个小范围内移动,活动受到限制,教学效果不是很理想,为了改变这种现状,本文基于j2me平台和vc6.0编程环境,设计并实现了幻灯片远程控制系统中的主机端服务器和手机端的客户程序,成功实现了蓝牙手机对主机中幻灯片的远程遥控播放,与当前市场上同类产品相比,只需要额外购买一款通用的usb接口蓝牙适配器,并结合大众化的支持jzme的蓝牙手机即可,无需智能机。本系统既可以让教师离开枯燥的讲台实现远程控制,又可以实现10米范围内的学生互动交流,提高教学效果,有广泛的应用前景。
蓝牙技术规范就是为了使符合该规范的各种应用之间能够互联。要实现蓝牙设备之间的通信,不仅要有底层蓝牙硬件,还需要上层协议栈的支持。蓝牙bsig标准组织(bluetoothspecialinterestgroup,bsig)发布的蓝牙规范就是蓝牙通信协议标准,规定了蓝牙软硬件应遵循的标准和达到的要求。根据蓝牙协议的功能,协议栈可分为3个部分:底层硬件模块、中间协议层和高层应用。具体蓝牙协议栈结构如图1。主机控制器接口(hostcontrolinterface,hci)是对不同连接方式的抽象,它提供了调用下层基带以及状态和控制寄存器等硬件的一致的命令接口,使不同的连接方式对主机的协议软件而言是透明的。规范的制订需要考虑并达到不同蓝牙产品之间的互联性。蓝牙系统构成的基本网络单元称为微微网((piconet),一个微微网内包括一个主设备(master)和多个从设备(slave),设备的主从关系是在蓝牙链路的建立过程中确定的,链路建立的发起者定义为主设备,其他响应者为从设备。
j2me蓝牙api(javaapplicationforbluetoothwirelesstoolkit,jabwt)属于j2me的蓝牙扩展部分,是蓝牙技术规范的第一个实现,由jsr82规范进行定义。jabwt包括两个基本包,一个核心包为javax.bluetooth,另一个为javax.obex,后者提供对象交换协议,之所以和蓝牙核心包分离开,是为了让obex协议不依赖蓝牙硬件,比如在红外等支持对象交换协议的地方都可以使用javax.obex包。在具体应用中,核心包实现了蓝牙协议栈中的l2cap,sdp和rfcomm等协议,主要应用于蓝牙设备管理、设备发现和服务查找。在幻灯片控制应用中,通过在主机中插入蓝牙适配器,就可以提供和手机间的蓝牙通信,数据交换。
基于蓝牙无线通信的应用大都采用c/s(client/server)架构。客户端向服务器发送服务请求,服务器根据请求提供服务。具体服务可以选择在不同的协议层上来实现。在多媒体教学中,我们把播放幻灯片的主机作为服务器端,负责接收对幻灯片的控制请求,手机作为客户端,负责发送控制请求数据。
由于服务器端采用vc’6.0开发环境,自然采用微软的蓝牙协议开发工具包,首先需要调用wsastartup函数对网络进行初始化,定义一个基于rfcomm的流套接字,绑定此套接字到一个本地蓝牙设备,随后注册并发布一个服务,此时需要提供一个uuid(在手机客户端仍然需要使用同一个quid来发现本服务),可以通过guidgen.exe工具自动生成,代码如下:
当为一个本地蓝牙设备注册并发布一个服务后,就可以等待客户端的连接请求。其中accept函数为阻塞函数,一直等到客户端连接上方可返回,所以本代码需要在单独的后台线程中运行,如果在界面线程中,则界面就会没有反应,不能和用户进行交互。返回的client在与蓝牙客户端收发数据中需要使用,需要保存。
使用一般的网络编程方式,调用recv函数读取客户端发送来的服务请求数据,本函数也为阻塞方式,也要放在单独线程中运行。当客户端断开连接时,函数返回,同时rec为0;如果re。不为0,说明收到了客户端的有效数据,进行处理即可。
当手机客户端退出时,要关闭服务端所对应客户端的连接套接字,退出本服务所定义的线程。如果所有的客户端请求处理结束,服务器要退出,也需要关闭服务器的套接字,释放系统资源。
手机客户端流程图如图3所示,采用j2me进行编写,能够实现跨平台,无论是否为智能手机都可以运行客户端程序,对手机设备的要求不高。
服务发现允许你发现附近的蓝牙服务。discoveryagent提供的方法可以用来发现蓝牙设备上的服务。在某个服务可以被发现以前,必须首先在蓝牙设备上注册或广播该服务。与设备发现类似也需要提供一个接口,接受服务查询结果和查询结束事件。
在一般的网络编程中,需要单独的一个非界面线程等待客户的连接到来,如若需要等待多个客户端,一般使用循环语句。当与客户端建立连接后,数据的读取和发送,可以选择异步io或阻塞方式,阻塞数据传输中,需额外创建两个线程分别实现数据的读取和发送。
本文来源网络由中国学术期刊网(www.qyjyqh.com)整理发布,本站转载的内容出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如涉及版权等问题,请与我们联系,我们将立即进行删除处理。