《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Android的水產(chǎn)物聯(lián)服務(wù)系統(tǒng)設(shè)計(jì)與開發(fā)
基于Android的水產(chǎn)物聯(lián)服務(wù)系統(tǒng)設(shè)計(jì)與開發(fā)
來源:電子技術(shù)應(yīng)用2014年第1期
馬曉飛1, 袁永明1,2, 張紅燕2, 陳浩成1, 劉彥娜1
1. 南京農(nóng)業(yè)大學(xué) 漁業(yè)學(xué)院,江蘇 無錫 214081;2. 中國水產(chǎn)科學(xué)研究院淡水漁業(yè)中心 國家羅非魚產(chǎn)業(yè)技術(shù)研發(fā)中心農(nóng)業(yè)部淡水漁業(yè)和種質(zhì)資源利用重點(diǎn)實(shí)驗(yàn)室,江蘇 無錫 214081
摘要: 設(shè)計(jì)開發(fā)了基于Android平臺(tái)的水產(chǎn)物聯(lián)服務(wù)系統(tǒng)客戶端,通過分析水產(chǎn)物聯(lián)服務(wù)系統(tǒng)客戶端的需求, 提出系統(tǒng)設(shè)計(jì)思想及實(shí)現(xiàn)方法。介紹了系統(tǒng)客戶端在線監(jiān)測(cè)和遠(yuǎn)程控制功能的實(shí)現(xiàn)方法和步驟,完成客戶端軟件的設(shè)計(jì)與開發(fā),實(shí)現(xiàn)了水產(chǎn)物聯(lián)服務(wù)系統(tǒng)客戶端的功能和需求。
中圖分類號(hào): TP311
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)01-0137-04
Design and development of aquaculture internet things service system based on Android
Ma Xiaofei1,Yuan Yongming1,2, Zhang Hongyan2, Chen Haocheng1, Liu Yanna1
1. Fisherise College,Nanjing Agricultural University,Wuxi 214081, China;2. Key Laboratory of Freshwater Fisheries and Germplasm Resources Utilization of Ministry of Agriculture, Tilapia industrial Research Center of China Agriculture Research System(CARS49), Freshwater Fisherise Reserch Center of Chinese Academy of Fishery Sciences, Wuxi 214081, China
Abstract: This paper designed and developed the client of Aquaculture internet things service system based on Android, analyzed the demand for the system,proposed the design ideas and implementation of the client. The implementation and measures of main functions for the client,such as online monitoring and remote control, are introduced. Completed the application design and development, achieved the functions and needs of aquaculture internet things service system based on Android.
Key words : aquaculture; internet things service; online monitoring; remote control

    Android是一個(gè)開放性的開發(fā)平臺(tái),由Google公司和開放手機(jī)聯(lián)盟開發(fā),基于Linux的自由及開放源代碼的操作系統(tǒng)[1]。主要應(yīng)用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦。Android的系統(tǒng)架構(gòu)主要分為應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和Linux內(nèi)核層。
   水產(chǎn)物聯(lián)服務(wù)系統(tǒng)AITSS(Aquaculture Internet Things Service System)是一個(gè)面向水產(chǎn)養(yǎng)殖行業(yè),應(yīng)用現(xiàn)代物聯(lián)技術(shù)[2]集成行業(yè)業(yè)務(wù)處理應(yīng)用系統(tǒng)的服務(wù)平臺(tái)。系統(tǒng)采用自然語言與計(jì)算機(jī)語言相融合的方法,使用豐富的命令集(管理命令、用戶命令、開發(fā)命令和短信命令),實(shí)現(xiàn)人-物-物之間的信息交流。系統(tǒng)的語音、視頻、短信、傳感、監(jiān)控等服務(wù)不受硬件、通信協(xié)議及方式的限制,集成的行業(yè)業(yè)務(wù)處理應(yīng)用系統(tǒng)運(yùn)行穩(wěn)定、維護(hù)簡單、更新方便、擴(kuò)展靈活。
   本文基于Android平臺(tái),設(shè)計(jì)并開發(fā)了水產(chǎn)物聯(lián)服務(wù)系統(tǒng)Android手機(jī)客戶端(AITSS for Android),將在線監(jiān)測(cè)、遠(yuǎn)程控制、設(shè)備遠(yuǎn)程維護(hù)等功能集成于本應(yīng)用軟件。
1 系統(tǒng)設(shè)計(jì)
    根據(jù)用戶需求,系統(tǒng)能夠完成在線監(jiān)測(cè)、遠(yuǎn)程控制、設(shè)備管理、參數(shù)設(shè)置、外觀選擇等功能。系統(tǒng)功能結(jié)構(gòu)如圖1所示。

 (1)在線監(jiān)測(cè):在線監(jiān)測(cè)主要完成系統(tǒng)中所有管理區(qū)監(jiān)測(cè)設(shè)備(傳感器)的管理操作,包括設(shè)備開啟或關(guān)閉、查看設(shè)備運(yùn)行狀態(tài)、監(jiān)測(cè)指標(biāo)及監(jiān)測(cè)值等。
    (2)遠(yuǎn)程控制:遠(yuǎn)程控制主要完成系統(tǒng)中所有管理區(qū)控制設(shè)備(控制器)的管理操作,包括設(shè)備的開啟或關(guān)閉、查看設(shè)備運(yùn)行狀態(tài)、設(shè)定控制設(shè)備的工作方式(控制模式)等。
  (3)設(shè)備管理:設(shè)備管理主要完成水產(chǎn)物聯(lián)服務(wù)系統(tǒng)支持的系統(tǒng)成員的管理操作,主要包括系統(tǒng)成員的添加、刪除、查詢、系統(tǒng)作業(yè)的配置等。
    (4)參數(shù)設(shè)置:參數(shù)設(shè)置主要完成服務(wù)器地址、端口號(hào)和系統(tǒng)刷新頻率的設(shè)置。
    (5)外觀選擇:用于為用戶提供個(gè)性化的系統(tǒng)界面配色方案和外觀選擇。
2 開發(fā)環(huán)境
    水產(chǎn)物聯(lián)服務(wù)系統(tǒng)的服務(wù)器操作系統(tǒng)使用FreeBSD進(jìn)行系統(tǒng)管理,使用MySQL 5.0數(shù)據(jù)庫進(jìn)行數(shù)據(jù)和配置的存儲(chǔ)。手機(jī)客戶端與AITSS交互流程如圖2所示。

    在安裝有Windows操作系統(tǒng)的PC機(jī)進(jìn)行Android開發(fā)環(huán)境的搭建[1],需要Oracle公司的Java SE JDK和Java運(yùn)行環(huán)境(Java Runtime Environment),Eclipse IDE和Android SDK。
 開發(fā)環(huán)境如下:
 JAVA SE JDK:Java version 1.7.0_25;Java SE Runtime Envitonment <build 1.7.0_25-b16>。
    Eclipse IDE:Eclipse Java IDE for Web Developers. Indigo Service Release 2。
    Android SDK:Android 2.3.3(API 10)。
3 系統(tǒng)實(shí)現(xiàn)
3.1 網(wǎng)絡(luò)連接

    使用Android3.0及以上版本訪問WebService會(huì)出現(xiàn)android.os.NetworkOnMainThreadException的問題[3],通過在Activity類添加onCreate( )方法中添加Strict代碼解決。核心代碼如下:
        //解決Android3.0以上版本的Socket連接問題
        StrictMode.setThreadPolicy(new StrictMode
         .Threadpolicy.builder().detectDiskReads()
        .detectDiskWrites().detectDiskNetwork()
              .penaltyLog().build());
        StrictMode.setVmPolicy(new StrictMode
              .VmPolicy.builder().detectLeakedSqlLite
              Objects().penaltyLog().penaltyDeath()
              .build());
3.2 在線監(jiān)測(cè)
    實(shí)現(xiàn)在線監(jiān)測(cè)功能需要解決監(jiān)測(cè)設(shè)備獲取、監(jiān)測(cè)數(shù)據(jù)獲取和繪制監(jiān)測(cè)曲線等系統(tǒng)需求。
3.2.1 獲取監(jiān)測(cè)設(shè)備
 本程序在單獨(dú)線程中獲取水產(chǎn)物聯(lián)服務(wù)系統(tǒng),服務(wù)器端已完成配置的監(jiān)測(cè)地點(diǎn)和監(jiān)測(cè)設(shè)備詳情。根據(jù)Socket的返回值使用Android提供的ListView()組件顯示獲取到的信息。在處理Socket時(shí),使用singleton模式[4](單例模式)獲取SocketHelper,代碼如下:
    syncharonized(synObj){
          if(socketHelper == null) {
             socketHelper = new SocketHelper(context);
         }
    }
    根據(jù)Socket返回值顯示加載有監(jiān)測(cè)地點(diǎn)和設(shè)備信息的彈出窗口popupwindow時(shí),需要將其setFocusable屬性設(shè)置為true,否則無法獲取到彈出窗口里的焦點(diǎn),由此導(dǎo)致彈出窗口中可能存在輸入框等控件無法輸入。
3.2.2 獲取監(jiān)測(cè)數(shù)據(jù)
     傳感設(shè)備監(jiān)測(cè)到的環(huán)境數(shù)據(jù)會(huì)通過數(shù)傳設(shè)備實(shí)時(shí)傳輸并儲(chǔ)存在服務(wù)器端。在使用手機(jī)客戶端進(jìn)行在線監(jiān)測(cè)時(shí),需要使用monitorDataHandler( )方法對(duì)服務(wù)器端的數(shù)據(jù)進(jìn)行實(shí)時(shí)獲取,代碼如下:
       //獲取每行監(jiān)測(cè)數(shù)據(jù)(格式為373737:34.44[時(shí)間整數(shù):監(jiān)測(cè)數(shù)據(jù)值])
     String[] md = infos[i].split(Constants
         .Command.COMMAND_SEPARATOR);
     if (&ldquo;&rdquo;.equals(md[0].trim()))
          continue;
     date = MathHelper.getLong(md[0],0) * 1000;
     value = MathHelper.round(Float.valueOf(md[1]),3);
     series.addData(date,value);
     實(shí)時(shí)獲取到的監(jiān)測(cè)數(shù)據(jù)將在監(jiān)測(cè)顯示容器TextView( )組件中進(jìn)行顯示和實(shí)時(shí)更新。
3.2.3 監(jiān)測(cè)曲線繪制
    為便于用戶查看一定時(shí)間段內(nèi)的監(jiān)測(cè)指標(biāo)變化趨勢(shì),設(shè)計(jì)開發(fā)了監(jiān)測(cè)曲線繪制功能。
    監(jiān)測(cè)曲線的橫軸為實(shí)時(shí)時(shí)間參數(shù),表示服務(wù)器端獲取到該監(jiān)測(cè)值的時(shí)間點(diǎn),橫軸刻度根據(jù)時(shí)間變化實(shí)時(shí)更新,監(jiān)測(cè)曲線的為使用監(jiān)測(cè)值,表示對(duì)應(yīng)時(shí)間點(diǎn)的監(jiān)測(cè)指標(biāo)值;縱軸使用動(dòng)態(tài)坐標(biāo),根據(jù)當(dāng)前數(shù)據(jù)的最大最小值進(jìn)行自動(dòng)調(diào)節(jié),并在最大最小值相等時(shí)根據(jù)數(shù)據(jù)精度進(jìn)行上下縮放。
    使用Android提供的TextView( )組件作為曲線顯示容器,定義并使用drawLine(Canvas canvas)函數(shù)進(jìn)行曲線繪制,關(guān)鍵代碼如下:
    canvas.drawPoint(mChartRect.left,mChart.bottom - y0,this.mSeriesPaint);
    canvas.drawLine(mChartRect.left + x0 *
         mXSrawUnit, mChartRect.bottom - y0,
         mChartRect.left+x1* mXDrawUnit,
         mChartRect.bottom-y1, mSeriesPaint);
3.3 遠(yuǎn)程控制
    遠(yuǎn)程控制主要對(duì)用于水產(chǎn)養(yǎng)殖生產(chǎn)的自動(dòng)化設(shè)備進(jìn)行遠(yuǎn)程控制。設(shè)備控制模式根據(jù)生產(chǎn)需要分為人工控制、定時(shí)控制和自動(dòng)控制三種。
3.3.1 選擇控制模式
    系統(tǒng)根據(jù)用戶的需要,設(shè)計(jì)開發(fā)了三種控制模式:(1)人工模式,滿足用戶隨時(shí)隨地控制設(shè)備的需求;(2)定時(shí)模式,通過設(shè)置時(shí)間隊(duì)列,滿足設(shè)備定時(shí)控制;(3)自動(dòng)模式,結(jié)合水產(chǎn)養(yǎng)殖專家系統(tǒng),進(jìn)行智能化決策及設(shè)備控制。在遠(yuǎn)程控制界面,選擇不同控制模式,顯示不同視圖View( )。選擇人工模式時(shí),切換控制模式顯示視圖的代碼如下:
     case R.id.chkManualControl:
     startContent.setVisibility(Constants.Visibility.GONE);
     endContent.setVisibility(Constants.Visibility.GONE);
     break;
3.3.2 獲取設(shè)備狀態(tài)
    準(zhǔn)確獲取設(shè)備當(dāng)前狀態(tài)是進(jìn)行設(shè)備遠(yuǎn)程控制的重要前提。本程序定義設(shè)備狀態(tài)變量devState為一個(gè)可進(jìn)行滑動(dòng)操作的SlipButton對(duì)象[5]。賦值代碼為:
    devState=(SlipButton)findViewById
                     (R.id.devstate)
    獲取設(shè)備狀態(tài)代碼如下:
       float open = MathHelper.getFloat(dev[1],0);
       devState.setCheck(open>0);
       paraZone.setVisibility(Constants.Visibility.VISIBLE);
3.3.3 定時(shí)控制
    定時(shí)本文控制的原理是用戶根據(jù)需要自主設(shè)定改變控制設(shè)備狀態(tài)的起止時(shí)間點(diǎn)。如當(dāng)前增氧機(jī)狀態(tài)為開啟,用戶可以根據(jù)需要,設(shè)定在某一時(shí)間點(diǎn)將增氧機(jī)狀態(tài)更改為關(guān)閉,并在另一時(shí)間點(diǎn)再次開啟增氧機(jī)。關(guān)鍵代碼為:
        String mode= oprMode==0?&rdquo;auto&rdquo;:(devdate
                  .isChecked()?&rdquo;on&rdquo;:&rdquo;off&rdquo;)
        try{
           String b= startTime.getText().toString();
           long beginTime =DateHelper.convert2long(b,
                    &ldquo;yyyy-MM-dd HH:mm&rdquo;);
           begin =(int)(beginTime- currentTime);
        }
4 試驗(yàn)與結(jié)果分析
 使用設(shè)計(jì)并開發(fā)的客戶端程序,進(jìn)行基于Android平臺(tái)的水產(chǎn)物聯(lián)服務(wù)系統(tǒng)的應(yīng)用試驗(yàn)。本實(shí)例使用安裝有Android4.0.3版本的手機(jī),在CDMA2000的3G網(wǎng)絡(luò)環(huán)境進(jìn)行。
    軟件使用流程為:打開應(yīng)用程序,輸入用戶名和密碼,以默認(rèn)服務(wù)器地址和端口號(hào)登錄;手機(jī)根據(jù)用戶的手勢(shì)指令將信息發(fā)送到服務(wù)器,并將解析后的信息及時(shí)回送到手機(jī)端,經(jīng)應(yīng)用程序處理后顯示在手機(jī)上。用戶可以實(shí)時(shí)管理監(jiān)測(cè)設(shè)備,查看實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)和指標(biāo)變化曲線;通過遠(yuǎn)程控制命令進(jìn)行設(shè)備的人工開啟和關(guān)閉、定時(shí)開啟和關(guān)閉,也可連接到專家系統(tǒng)使用自動(dòng)智能控制模式[6]。系統(tǒng)應(yīng)用實(shí)例如圖3、圖4所示。

 

 

    程序的開發(fā)和應(yīng)用實(shí)驗(yàn)證明,客戶端軟件能夠完成與服務(wù)器端水產(chǎn)物聯(lián)服務(wù)系統(tǒng)的交互,實(shí)現(xiàn)水產(chǎn)養(yǎng)殖環(huán)境的在線監(jiān)測(cè)和水產(chǎn)養(yǎng)殖生產(chǎn)設(shè)備的遠(yuǎn)程控制。由于Android平臺(tái)對(duì)硬件配置的適應(yīng)性和平臺(tái)的開放性,用戶可以將已有視頻監(jiān)控設(shè)備移植到客戶端中,實(shí)現(xiàn)真正的實(shí)時(shí)在線監(jiān)控[7]?;贏ndroid平臺(tái)的客戶端程序易于獲取,通過網(wǎng)絡(luò)即可方便地下載安裝,享受物聯(lián)服務(wù)。
    本文基于Android平臺(tái),結(jié)合水產(chǎn)養(yǎng)殖行業(yè)所需的環(huán)境監(jiān)測(cè)指標(biāo)和生產(chǎn)設(shè)備,設(shè)計(jì)開發(fā)了一個(gè)開放式的智能手機(jī)客戶端平臺(tái)。該客戶端平臺(tái)與物聯(lián)服務(wù)系統(tǒng)服務(wù)器進(jìn)行交互,起到信息展示和發(fā)布的作用,而信息的處理和存儲(chǔ)皆由物聯(lián)服務(wù)系統(tǒng)完成。還可以根據(jù)用戶的不同需求配置不同的傳感監(jiān)測(cè)設(shè)備和控制設(shè)備,將該客戶端應(yīng)用于其他行業(yè), 設(shè)計(jì)出適用于各個(gè)領(lǐng)域的物聯(lián)服務(wù)系統(tǒng)。
 此方案可以有效降低系統(tǒng)開發(fā)成本,延長系統(tǒng)存活周期,具有靈活、高效、可擴(kuò)展的特性,應(yīng)用前景較好。
參考文獻(xiàn)
[1] JACKSON W. Android apps for absolute beginners[M]. New York City:Apress,2011.
[2] 孫其博,劉杰,黎羴,等. 物聯(lián)網(wǎng):概念、架構(gòu)與關(guān)鍵技術(shù)研究綜述[J].北京郵電大學(xué)學(xué)報(bào),2010,33(3):1-9.
[3] 鄧蕊.基于Android的視頻監(jiān)控的研究與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[4] SHALLOWAY A, TROTT J R.設(shè)計(jì)模式解析[M].徐言聲譯.北京:人民郵電出版社,2006.
[5] 鄭云卿,黃琦.基于Android平臺(tái)的軟件自動(dòng)化監(jiān)控工具的設(shè)計(jì)開發(fā)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(2):235-238.
[6] 江燕良.基于Android智能終端的遠(yuǎn)程控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2012,38(8):129-132.
[7] 李昂,宋海聲,蘇小蕓. 基于Android的視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(7):138-143.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。