《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Android的水產(chǎn)物聯(lián)服務(wù)系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)
基于Android的水產(chǎn)物聯(lián)服務(wù)系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)
來(lái)源:電子技術(shù)應(yīng)用2014年第1期
馬曉飛1, 袁永明1,2, 張紅燕2, 陳浩成1, 劉彥娜1
1. 南京農(nóng)業(yè)大學(xué) 漁業(yè)學(xué)院,江蘇 無(wú)錫 214081;2. 中國(guó)水產(chǎn)科學(xué)研究院淡水漁業(yè)中心 國(guó)家羅非魚(yú)產(chǎn)業(yè)技術(shù)研發(fā)中心農(nóng)業(yè)部淡水漁業(yè)和種質(zhì)資源利用重點(diǎn)實(shí)驗(yàn)室,江蘇 無(wú)錫 214081
摘要: 設(shè)計(jì)開(kāi)發(fā)了基于Android平臺(tái)的水產(chǎn)物聯(lián)服務(wù)系統(tǒng)客戶(hù)端,通過(guò)分析水產(chǎn)物聯(lián)服務(wù)系統(tǒng)客戶(hù)端的需求, 提出系統(tǒng)設(shè)計(jì)思想及實(shí)現(xiàn)方法。介紹了系統(tǒng)客戶(hù)端在線(xiàn)監(jiān)測(cè)和遠(yuǎn)程控制功能的實(shí)現(xiàn)方法和步驟,完成客戶(hù)端軟件的設(shè)計(jì)與開(kāi)發(fā),實(shí)現(xiàn)了水產(chǎn)物聯(lián)服務(wù)系統(tǒng)客戶(hù)端的功能和需求。
中圖分類(lèi)號(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è)開(kāi)放性的開(kāi)發(fā)平臺(tái),由Google公司和開(kāi)放手機(jī)聯(lián)盟開(kāi)發(fā),基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng)[1]。主要應(yīng)用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦。Android的系統(tǒng)架構(gòu)主要分為應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和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)采用自然語(yǔ)言與計(jì)算機(jī)語(yǔ)言相融合的方法,使用豐富的命令集(管理命令、用戶(hù)命令、開(kāi)發(fā)命令和短信命令),實(shí)現(xiàn)人-物-物之間的信息交流。系統(tǒng)的語(yǔ)音、視頻、短信、傳感、監(jiān)控等服務(wù)不受硬件、通信協(xié)議及方式的限制,集成的行業(yè)業(yè)務(wù)處理應(yīng)用系統(tǒng)運(yùn)行穩(wěn)定、維護(hù)簡(jiǎn)單、更新方便、擴(kuò)展靈活。
   本文基于Android平臺(tái),設(shè)計(jì)并開(kāi)發(fā)了水產(chǎn)物聯(lián)服務(wù)系統(tǒng)Android手機(jī)客戶(hù)端(AITSS for Android),將在線(xiàn)監(jiān)測(cè)、遠(yuǎn)程控制、設(shè)備遠(yuǎn)程維護(hù)等功能集成于本應(yīng)用軟件。
1 系統(tǒng)設(shè)計(jì)
    根據(jù)用戶(hù)需求,系統(tǒng)能夠完成在線(xiàn)監(jiān)測(cè)、遠(yuǎn)程控制、設(shè)備管理、參數(shù)設(shè)置、外觀選擇等功能。系統(tǒng)功能結(jié)構(gòu)如圖1所示。

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

    在安裝有Windows操作系統(tǒng)的PC機(jī)進(jìn)行Android開(kāi)發(fā)環(huán)境的搭建[1],需要Oracle公司的Java SE JDK和Java運(yùn)行環(huán)境(Java Runtime Environment),Eclipse IDE和Android SDK。
 開(kāi)發(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及以上版本訪問(wèn)WebService會(huì)出現(xiàn)android.os.NetworkOnMainThreadException的問(wèn)題[3],通過(guò)在Activity類(lèi)添加onCreate( )方法中添加Strict代碼解決。核心代碼如下:
        //解決Android3.0以上版本的Socket連接問(wèn)題
        StrictMode.setThreadPolicy(new StrictMode
         .Threadpolicy.builder().detectDiskReads()
        .detectDiskWrites().detectDiskNetwork()
              .penaltyLog().build());
        StrictMode.setVmPolicy(new StrictMode
              .VmPolicy.builder().detectLeakedSqlLite
              Objects().penaltyLog().penaltyDeath()
              .build());
3.2 在線(xiàn)監(jiān)測(cè)
    實(shí)現(xiàn)在線(xiàn)監(jiān)測(cè)功能需要解決監(jiān)測(cè)設(shè)備獲取、監(jiān)測(cè)數(shù)據(jù)獲取和繪制監(jiān)測(cè)曲線(xiàn)等系統(tǒng)需求。
3.2.1 獲取監(jiān)測(cè)設(shè)備
 本程序在單獨(dú)線(xiàn)程中獲取水產(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,否則無(wú)法獲取到彈出窗口里的焦點(diǎn),由此導(dǎo)致彈出窗口中可能存在輸入框等控件無(wú)法輸入。
3.2.2 獲取監(jiān)測(cè)數(shù)據(jù)
     傳感設(shè)備監(jiān)測(cè)到的環(huán)境數(shù)據(jù)會(huì)通過(guò)數(shù)傳設(shè)備實(shí)時(shí)傳輸并儲(chǔ)存在服務(wù)器端。在使用手機(jī)客戶(hù)端進(jìn)行在線(xià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è)曲線(xiàn)繪制
    為便于用戶(hù)查看一定時(shí)間段內(nèi)的監(jiān)測(cè)指標(biāo)變化趨勢(shì),設(shè)計(jì)開(kāi)發(fā)了監(jiān)測(cè)曲線(xiàn)繪制功能。
    監(jiān)測(cè)曲線(xiàn)的橫軸為實(shí)時(shí)時(shí)間參數(shù),表示服務(wù)器端獲取到該監(jiān)測(cè)值的時(shí)間點(diǎn),橫軸刻度根據(jù)時(shí)間變化實(shí)時(shí)更新,監(jiān)測(cè)曲線(xiàn)的為使用監(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( )組件作為曲線(xiàn)顯示容器,定義并使用drawLine(Canvas canvas)函數(shù)進(jìn)行曲線(xià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ù)用戶(hù)的需要,設(shè)計(jì)開(kāi)發(fā)了三種控制模式:(1)人工模式,滿(mǎn)足用戶(hù)隨時(shí)隨地控制設(shè)備的需求;(2)定時(shí)模式,通過(guò)設(shè)置時(shí)間隊(duì)列,滿(mǎn)足設(shè)備定時(shí)控制;(3)自動(dòng)模式,結(jié)合水產(chǎn)養(yǎng)殖專(zhuān)家系統(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í)本文控制的原理是用戶(hù)根據(jù)需要自主設(shè)定改變控制設(shè)備狀態(tài)的起止時(shí)間點(diǎn)。如當(dāng)前增氧機(jī)狀態(tài)為開(kāi)啟,用戶(hù)可以根據(jù)需要,設(shè)定在某一時(shí)間點(diǎn)將增氧機(jī)狀態(tài)更改為關(guān)閉,并在另一時(shí)間點(diǎn)再次開(kāi)啟增氧機(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ì)并開(kāi)發(fā)的客戶(hù)端程序,進(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)行。
    軟件使用流程為:打開(kāi)應(yīng)用程序,輸入用戶(hù)名和密碼,以默認(rèn)服務(wù)器地址和端口號(hào)登錄;手機(jī)根據(jù)用戶(hù)的手勢(shì)指令將信息發(fā)送到服務(wù)器,并將解析后的信息及時(shí)回送到手機(jī)端,經(jīng)應(yīng)用程序處理后顯示在手機(jī)上。用戶(hù)可以實(shí)時(shí)管理監(jiān)測(cè)設(shè)備,查看實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)和指標(biāo)變化曲線(xiàn);通過(guò)遠(yuǎn)程控制命令進(jìn)行設(shè)備的人工開(kāi)啟和關(guān)閉、定時(shí)開(kāi)啟和關(guān)閉,也可連接到專(zhuān)家系統(tǒng)使用自動(dòng)智能控制模式[6]。系統(tǒng)應(yīng)用實(shí)例如圖3、圖4所示。

 

 

    程序的開(kāi)發(fā)和應(yīng)用實(shí)驗(yàn)證明,客戶(hù)端軟件能夠完成與服務(wù)器端水產(chǎn)物聯(lián)服務(wù)系統(tǒng)的交互,實(shí)現(xiàn)水產(chǎn)養(yǎng)殖環(huán)境的在線(xiàn)監(jiān)測(cè)和水產(chǎn)養(yǎng)殖生產(chǎn)設(shè)備的遠(yuǎn)程控制。由于Android平臺(tái)對(duì)硬件配置的適應(yīng)性和平臺(tái)的開(kāi)放性,用戶(hù)可以將已有視頻監(jiān)控設(shè)備移植到客戶(hù)端中,實(shí)現(xiàn)真正的實(shí)時(shí)在線(xiàn)監(jiān)控[7]?;贏ndroid平臺(tái)的客戶(hù)端程序易于獲取,通過(guò)網(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ì)開(kāi)發(fā)了一個(gè)開(kāi)放式的智能手機(jī)客戶(hù)端平臺(tái)。該客戶(hù)端平臺(tái)與物聯(lián)服務(wù)系統(tǒng)服務(wù)器進(jìn)行交互,起到信息展示和發(fā)布的作用,而信息的處理和存儲(chǔ)皆由物聯(lián)服務(wù)系統(tǒng)完成。還可以根據(jù)用戶(hù)的不同需求配置不同的傳感監(jiān)測(cè)設(shè)備和控制設(shè)備,將該客戶(hù)端應(yīng)用于其他行業(yè), 設(shè)計(jì)出適用于各個(gè)領(lǐng)域的物聯(lián)服務(wù)系統(tǒng)。
 此方案可以有效降低系統(tǒng)開(kāi)發(fā)成本,延長(zhǎng)系統(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ì)開(kāi)發(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)載。