标题 | 基于Android的远程实验客户端设计 |
范文 | 黄广发+吴先球 摘 要: 为了让实验者在移动终端上完成远程实验的异地操作,设计一种基于Android平台的远程实验客户端。通过对开源播放器VLC进行二次开发,使用Socket通信传输跨平台控制指令,利用HTML5中的canvas标签绘画波形图,实现客户端进行远程实验的视频监控、远程控制实验仪器和数据处理等功能。以单摆法测重力加速度实验进行效果验证,实测结果表明,客户端具有稳定可靠、实验数据处理精度高、人机交互性好等优点。 关键词: 远程实验; Android; 客户端; HTML5 中图分类号: TN911.2?34; TP311.52 文献标识码: A 文章编号: 1004?373X(2015)14?0089?03 0 引 言 在当今信息技术高速发展的时代,学习的自主化、智能化和终身化使得远程教育必须要与时俱进,就是要运用信息技术改善远程教学系统以满足人们的迫切需求。远程实验[1]是通过互联网远程操作实验仪器,在异地完成真实的实验过程。远程实验不受时空限制,特别是随着平板电脑、智能手机等移动终端的普及,Android系统占据了主流,只要连接了Internet,就可以根据实验者的水平和需要,随时随地使用客户端去选做各种实验,这种移动学习环境下的实验教学模式增加了教学的灵活性,具有广泛的应用前景。 为了满足移动学习的需求,本文结合远程控制实验的系统特点,设计了一种基于Android的客户端,实现了远程控制实验的移动性操作。 1 系统硬件及其工作原理 远程实验系统的硬件结构如图1所示,服务器通过串口连接控制模块,控制模块连接实验仪器,通过执行服务器传送过来的指令控制实验仪器,并采集实验数据。摄像机捕获现场仪器的运行情况通过USB接口反馈给服务器,服务器再通过网络及时反馈给远程的操作者。 控制模块主要由主控单片机和相关外设组成,服务器上使用LabVIEW软件与控制模块进行通信,使用VLC media player进行流媒体数据的编码和传输,使用Tomcat进行搭建Web应用服务器,响应HTML页面的请求访问,提供了实验数据处理功能。 2 客户端设计 客户端是远程实验系统的一部分,实验者直接在客户端上进行远程实验的操作,具有实时观察实验现象、实时远程控制实验仪器、实验数据接收与处理等功能。 图1 系统硬件结构图 2.1 Android应用程序开发环境 开发环境[2]由JDK(Java开发工具包)、Eclipse(开发Java程序的软件工具)、Android SDK(Android专属的软件开发工具包)、ADT(开发Android应用程序的插件)、NDK(原生开发工具包)5部分组成,通过安装和进行相应的配置即可完成开发环境的搭建。 2.2 功能流程 远程实验的实验仪器是实际设备,远程用户使用客户端通过网络对其进行操作,控制实验设备的运行。客户端的整体功能如图2所示,其中观察实验现象部分是先要接入流媒体服务器,再把通过HTTP协议传输过来的H.264视频流进行解码[3],最后通过控件SurfaceView播放出来;控制实验仪器部分主要是Socket通信,在主线程下申请子线程进行处理,具体采用Handler消息传递机制;数据处理部分是下载服务器端采集为txt格式的数据文件,读取后在HTML5上使用canvas绘制波形图,这种可视化的数据分析可以让实验者读取数据进行公式运算。 图2 功能流程图 2.3 关键技术 2.3.1 JNI接口 将开源播放器VLC[4]应用到Android上,需要通过将VLC的源代码编译成库文件,再通过Android提供的JNI接口调用,因为VLC的代码完全由C/C++编写,在需要调用第三方C/C++库文件时,使用JNI接口的应用[5]可以让开发者实现一些用Java语言难以实现的功能。 在上层通过以下代码载入已经编译好的libvlcjni.so库文件: { System.loadLibrary(“vlcjni”); } LibVLC类通过声明库中的本地函数就可以在上层应用程序调用。 在主类MainActivity中,调用VLC接收服务器端发送的视频流,经过程序处理后进行播放,关键代码如下: private LibVLC mLibVLC = null; mLibVLC = Util.getLibVlcInstance(); if (mLibVLC ! = null) { String pathUri = "http://222.200.152.122:8080/x"; mLibVLC.playMyMRL(pathUri); } 2.3.2 多线程应用 采用多线程技术可以避免UI线程的阻塞,其中Handler Message[6]方法最为常用。具体操作是在新启动的线程中发送消息,在主线程中获取、处理消息,通过回调的方式,主线程能够处理先启动线程所发送的消息。 在观察实验现象的同时,要对实验仪器进行控制,这就需要使用多线程来实现,主线程是视频播放,实验仪器控制就会开启新的子线程来执行,简单的代码实现如下: 在主线程中定义handler: private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what){ case 1: …… break; } } } 在另一线程中执行任务: Message message = new Message(); message.what = 1; handler.sendMessage(message); 控制实验仪器通过Socket通信[7]实现,包括3个步骤:建立连接、发送数据、关闭套接字。核心代码如下: private Socket client = null; client = new Socket("222.200.152.122",8888); PrintWriter out = new PrintWriter(client.getOutputStream()); out.println("#"); out.flush(); client.close(); 整个Socket通信过程需要采用try…catch机制。 2.3.3 HTML5 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。