黃廣發+吳先球
摘 要: 為了讓實驗者在移動終端上完成遠程實驗的異地操作,設計一種基于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 功能流程
遠程實驗的實驗儀器是實際設備,遠程用戶使用客戶端通過網絡對其進行操作,控制實驗設備的運行??蛻舳说恼w功能如圖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
var c = document.getElementById("myCanvas");
//獲取要操作的canvas的ID
//操作canvas的代碼…
在Android WebView控件中使用JavaScript,必須在WebView中使能JavaScript,還要解決亂碼問題,代碼如下:
webView.getSettings().setDefaultTextEncodingName("gbk");
webView.getSettings().setJavaScriptEnabled(true);
3 應用實例
使用該客戶端進行操作遠程控制實驗,選用單擺法測重力加速度實驗[10],因為此實驗需要實時觀察實驗現象、遠程控制電機的開關、采集傳感器數據進行運算等內容,最后通過實驗的完成進而算出重力加速度。通過讀圖,輸入t1=2.79 s,t2=0.83 s,然后客戶端會自動計算出重力加速度,計算原理是由周期T=t2-t1,T=2π[Lg],得到重力加速度g=[4π2LT2],客戶端的數據處理界面如圖3所示。
4 結 語
本文設計的客戶端,結合基于C/S模式的遠程控制實驗系統,實現了在客戶端上通過互聯網完成遠程實驗的操作過程。實時觀察實驗現象、低延時控制實驗設備、準確處理實驗數據等功能增強了遠程實驗的真實感,有助于更好地掌握實驗原理。本客戶端除了應用到以上實驗外,還可以應用到其他物理實驗的教學當中?;贏ndroid平臺的遠程實驗客戶端突破了傳統實驗的時空限制,提高了實驗設備的利用率,最大限度地共享實驗教學資源。
圖3 數據處理界面圖
參考文獻
[1] 吳先球,劉朝輝,葉穗紅,等.網絡環境下遠程實驗的技術探討[J].實驗技術與管理,2008,25(6):30?33.
[2] 公磊,周聰.基于Android的移動終端應用程序開發與研究[J].計算機與現代化,2008(8):85?89.
[3] 劉龍飛,章堅武.基于H.264的Web視頻監控客戶端設計與實現[J].現代電子技術,2011,34(19):27?30.
[4] 李宗辰,朱秀昌.基于VLC的Android多路視頻監控系統[J].現代電子技術,2013,36(24):63?66.
[5] 楊豐盛.Android應用開發揭秘[M].北京:機械出版社,2010.
[6] 閆偉,葉建栲.多線程技術在Android手機開發中的應用[J].信息通信,2012(1):46?47.
[7] 孫劍,董超,夏繼媛,等.基于Android的Socket(TCP/IP)在LED燈光控制系統中的應用[J].深圳職業技術學院學報,2012(5):19?23.
[8] 龐程,崔宣,粟潘,等.基于Android平臺HTML5的研究與實現[J].機械管理開發,2012(6):136?137.
[9] 佚名.HTML
[10] 張冠芬.單擺智能化測量重力加速度實驗的研究[J].菏澤學院學報,2012,34(2):50?55.