摘要:為實(shí)現(xiàn)對(duì)生長柜中環(huán)境信息遠(yuǎn)程采集和數(shù)據(jù)顯示,同時(shí)實(shí)現(xiàn)攝像頭對(duì)植物的監(jiān)控和對(duì)多控制節(jié)點(diǎn)的遠(yuǎn)程控制,設(shè)計(jì)了一種基于Android平臺(tái)的物聯(lián)網(wǎng)測控系統(tǒng)。該系統(tǒng)各傳感器的數(shù)據(jù)采集、攝像頭圖像采集以及調(diào)節(jié)生長柜中環(huán)境的執(zhí)行機(jī)構(gòu)是由FS_WSN4412平臺(tái)進(jìn)行控制,利用Android編程技術(shù)對(duì)FS_WSN4412平臺(tái)軟件的功能和界面進(jìn)行了設(shè)計(jì),通過Wifi模塊上傳數(shù)據(jù)至服務(wù)器。物聯(lián)網(wǎng)服務(wù)器采用Tomcat搭建,利用JSP+servlet+MVC技術(shù)完成網(wǎng)頁的設(shè)計(jì)。結(jié)果表明,該系統(tǒng)實(shí)現(xiàn)了對(duì)物聯(lián)網(wǎng)智能植物生長柜的環(huán)境參數(shù)的現(xiàn)場和遠(yuǎn)程監(jiān)控。
關(guān)鍵詞:智能植物生長柜;物聯(lián)網(wǎng);Android;遠(yuǎn)程監(jiān)控
中圖分類號(hào):TP271 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):0439-8114(2016)02-0473-05
DOI:10.14088/j.cnki.issn0439-8114.2016.02.053
為解決資源與食品安全問題,智能植物生長柜以節(jié)省資源、保護(hù)環(huán)境、安全、放心、健康為出發(fā)點(diǎn),得到社會(huì)的廣泛關(guān)注與認(rèn)可[1,2]。智能植物生長柜是一種人工光利用型植物工廠,使用LED燈光代替自然光,并能夠通過對(duì)植物生長發(fā)育過程中的環(huán)境溫度、濕度、光照度等要素進(jìn)行智能控制,為植物生長提供環(huán)保、舒適的生活環(huán)境,從而實(shí)現(xiàn)植物周年連續(xù)生產(chǎn)[3-5]。
目前,市場上常見的智能植物生長柜依賴于嵌入式設(shè)備或微電腦對(duì)生長柜中的環(huán)境參數(shù)進(jìn)行采集與調(diào)節(jié),完全由人工在現(xiàn)場對(duì)生長柜中環(huán)境進(jìn)行監(jiān)測管理,無法實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,而且硬件資源有限,具有管理效率低、操作不便、可擴(kuò)展性差等缺點(diǎn)[6,7]。充分利用Android技術(shù)和物聯(lián)網(wǎng)技術(shù)的物聯(lián)網(wǎng)智能植物生長柜,以Android系統(tǒng)作為測控中心的主控制器,結(jié)合Wifi無線通信技術(shù),使生長柜與互聯(lián)網(wǎng)聯(lián)系起來,實(shí)時(shí)與服務(wù)器端進(jìn)行信息交換與通訊[8,9]。通過Android端測控中心的底層驅(qū)動(dòng)和界面設(shè)計(jì),實(shí)現(xiàn)本地對(duì)生長柜的監(jiān)控,同時(shí)實(shí)現(xiàn)在服務(wù)器端遠(yuǎn)程監(jiān)測生長柜中環(huán)境參數(shù)、查詢數(shù)據(jù)庫中數(shù)據(jù),并且通過攝像頭查看柜中植物生長狀況[10-12]。該系統(tǒng)能夠增強(qiáng)智能植物生長柜作業(yè)的可靠性、安全性、準(zhǔn)確性和快捷性,最大限度保障生長柜中植物的安全與健康。
1 系統(tǒng)總體設(shè)計(jì)方案
系統(tǒng)主要分為底層測控中心和服務(wù)器端數(shù)據(jù)中心兩部分,系統(tǒng)架構(gòu)圖如圖1所示。測控中心部分主要包括Android主控制板、環(huán)境參數(shù)采集模塊、攝像頭模塊、Wifi通信模塊及調(diào)節(jié)環(huán)境參數(shù)執(zhí)行機(jī)構(gòu)等5大模塊。Android控制板為FS_WSN4412開發(fā)板,主要完成生長柜現(xiàn)場監(jiān)控,包括傳感節(jié)點(diǎn)信息采集、與服務(wù)器的網(wǎng)絡(luò)通信和響應(yīng)服務(wù)器端反饋控制等功能;參數(shù)采集模塊主要通過采用CO2TH200二氧化碳溫濕度一體化傳感器模塊、光照傳感器和DS18B20溫度傳感器實(shí)時(shí)檢測獲得植物的生長環(huán)境;攝像頭模塊主要負(fù)責(zé)生長柜現(xiàn)場監(jiān)控和服務(wù)器端遠(yuǎn)程監(jiān)控視頻的采集;Wifi通信模塊主要采用Wifi無線通信協(xié)議同服務(wù)器端進(jìn)行遠(yuǎn)距離無線通信;執(zhí)行機(jī)構(gòu)采用模糊PID智能控制算法,由Android系統(tǒng)通過控制I/O輸出進(jìn)而控制加熱棒、制冷機(jī)、加濕器、風(fēng)機(jī)、(小功率)氣壓泵、電機(jī)等控制設(shè)備來調(diào)節(jié)柜體內(nèi)的溫度、濕度、CO2濃度和光照度以及營養(yǎng)液溫度。
2 子系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2.1 Android系統(tǒng)與傳感器的設(shè)計(jì)與實(shí)現(xiàn)
Android系統(tǒng)是Google公司開發(fā)的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)。該系統(tǒng)采用的是運(yùn)行Android4.2.1版本的FS_WSN4412開發(fā)板,該設(shè)備基于ARM Cortex-A9的四核Exynos4412處理器,其主頻1.5 GHz,運(yùn)行內(nèi)存1 GB,具有豐富的傳感器節(jié)點(diǎn)、自帶攝像頭、外設(shè)接口資源和無線傳感網(wǎng)絡(luò),是一款功能強(qiáng)大的嵌入式、物聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)平臺(tái)。硬件傳感器部分采用的是CO2TH200二氧化碳溫濕度一體化傳感器、光照傳感器和DS18B20溫度傳感器,F(xiàn)S_WSN4412平臺(tái)上所有資源都在Linux系統(tǒng)中實(shí)現(xiàn)基本驅(qū)動(dòng),在Android系統(tǒng)中實(shí)現(xiàn)HAL的stub,并向JNI層注冊(cè)相應(yīng)服務(wù),包括LED服務(wù)、BEEP服務(wù)以及由Android系統(tǒng)實(shí)現(xiàn)的Sensor服務(wù)。
Android中傳感器底層驅(qū)動(dòng)開發(fā)的文件位于Android源碼的如下位置:
1)frameworks/base/core/java/Android/hardware/SensorManager.java;
2)frameworks/base/core/jni/Android_hardware_SensorManager.cpp;
3)frameworks/base/services/java/com/Android/server/SensorService.java;
4)frameworks/base/services/jni/com/Android_server_SensorService.cpp;
再加上sensorstub以及Linux內(nèi)核驅(qū)動(dòng),構(gòu)成了整個(gè)Sensor框架,用戶應(yīng)用程序只需調(diào)用sensormanager類,即可操作所有的傳感器(以下各層代碼中的sensor不是代表具體的一種傳感器,而是文中所有傳感器統(tǒng)稱)。
2.1.1 Android Sensor驅(qū)動(dòng)層 Android內(nèi)核是由標(biāo)準(zhǔn)的Linux內(nèi)核修改而來的,內(nèi)核空間的Android硬件驅(qū)動(dòng)程序和Linux設(shè)備驅(qū)動(dòng)程序的編寫均是以Linux模塊來實(shí)現(xiàn)的,即文件操作結(jié)構(gòu)體file_operations的賦值以及結(jié)構(gòu)體中函數(shù)的具體實(shí)現(xiàn)。此外,Android Sensor驅(qū)動(dòng)層還執(zhí)行各傳感器的注冊(cè)、初始化和設(shè)備的注銷操作。
file_operation是將系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。文件操作結(jié)構(gòu)體中的成員函數(shù)是字符設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)的主體,這些函數(shù)會(huì)在應(yīng)用程序的open()、write()、read()、close()等中被調(diào)用。傳感器一般結(jié)構(gòu)體定義如下:
static struct file_operations sensor_fops={
.owner =THIS_MODULE,
.open =sensor_open,
.release=sensor_close,
.read=sensor_read,
.write=sensor_write,};
2.1.2 Android Sensor HAL層 硬件驅(qū)動(dòng)程序一方面分布在Linux內(nèi)核中,另一方面分布在用戶空間的硬件抽象層中,增加傳感器的硬件抽象層模塊訪問Linux內(nèi)核驅(qū)動(dòng)程序。Stub作為直接調(diào)用Linux驅(qū)動(dòng)的上層,實(shí)現(xiàn)簡單的I/O操作,Stub向HAL提供操作函數(shù)(Operations),而Runtime則向HAL取得特定模塊(Stub)的Operations,再回調(diào)這些操作函數(shù)。在HAL實(shí)現(xiàn)的stub中定義hw_module_t結(jié)構(gòu)體,該結(jié)構(gòu)體是HAL模塊的核心結(jié)構(gòu)體,所有硬件模塊都必須將該結(jié)構(gòu)體作為第一個(gè)成員,表示繼承了該結(jié)構(gòu)體。根據(jù)本層架構(gòu),定義3個(gè)結(jié)構(gòu)體,它們主要部分分別定義如下:
typedef_struct sensor_module_t{
Tag:HARDWARE_MODULE_TAG,
......
id:SENSORS_HARDWARE_MODULE_ID,
}sensor_module_t
typedef struct sensor_module_method_t={
int (open)(const struct sensor_module_t module const char id
struct sensor_device_t device)
}sensor_module_method_t
typedef struct sensor_device_t={
struct sensor_module_t;
int (*get_read)(struct sensor_device_t*dev,int*val);
}sensor_device_t
上層通過硬件的id調(diào)用hw_get_module()函數(shù),即得硬件模塊sensor_module_t,并從該模塊中得到sensor_module_method_t,繼而打開得到的硬件設(shè)備sensor_device_t,然后調(diào)用設(shè)備中的get_read()函數(shù),即可調(diào)用傳感器在Linux內(nèi)核層的驅(qū)動(dòng)實(shí)現(xiàn),最后調(diào)用hw_device_t中的close關(guān)閉設(shè)備。
2.1.3 Android Sensor JNI層 Android系統(tǒng)的應(yīng)用程序是用Java語言編寫的,而硬件驅(qū)動(dòng)程序是用C語言來實(shí)現(xiàn)的,應(yīng)用程序要調(diào)用傳感器驅(qū)動(dòng)程序操作硬件必須通過Java本地調(diào)用JNI來調(diào)用硬件抽象層接口。JNI的數(shù)據(jù)類型與Java數(shù)據(jù)類型的相互轉(zhuǎn)化及函數(shù)注冊(cè)是通過JNINative_Method結(jié)構(gòu)體實(shí)現(xiàn)的,代碼如下:
typedef struct{
const char* name;
const char* signature;
void* fnPtr;
}JNINative_Method
JNI層主要是將stub中的open、close等方法封裝提交給android application框架。在int中會(huì)調(diào)用open方法初始化,代碼如下:
Static jint android_init(JNIEnv*env, jclass clazz)
{ ......
if(sensors_control_open(module->common,SensorDevice)==0){
const struct sensor_t*list;
int count=module->get_sensors_list(module,list);
return count;
}}
2.1.4 Android Sensor Framework層 為硬件抽象層模塊編寫完串口的JNI方法后,需要為Android系統(tǒng)的Application Frameworks層增加硬件訪問服務(wù)SensorService。Application Frameworks層中包含了自定義的硬件服務(wù)SensorService,在Android系統(tǒng)啟動(dòng)的時(shí)候,應(yīng)用程序就可以通過Java接口來訪問Sensor硬件服務(wù)了。
2.2 測控端軟件設(shè)計(jì)
測控端軟件采用Android Java開發(fā),通過互聯(lián)網(wǎng)為物聯(lián)網(wǎng)連接媒介,結(jié)合Android底層驅(qū)動(dòng)開發(fā)技術(shù),在底層開發(fā)傳感器驅(qū)動(dòng),在應(yīng)用程序?qū)泳帉懜鱾鞲衅鲾?shù)據(jù)采集程序。用戶登錄進(jìn)入系統(tǒng)前,Android設(shè)備通過Wifi無線網(wǎng)絡(luò)或3G移動(dòng)通信網(wǎng)絡(luò)等連接到互聯(lián)網(wǎng)服務(wù)器上。登陸后,首先輸入已經(jīng)申請(qǐng)的用戶名和密碼,然后啟動(dòng)接收相應(yīng)生長柜的環(huán)境參數(shù)的后臺(tái)運(yùn)行SerialService類,實(shí)現(xiàn)采集數(shù)據(jù)的Android端實(shí)時(shí)監(jiān)控和與服務(wù)器端數(shù)據(jù)交互,物聯(lián)網(wǎng)智能植物生長柜測控端的具體實(shí)現(xiàn)如圖3所示。
測控端Android應(yīng)用程序主要包含了45個(gè)Java文件和10個(gè)XML腳本文件,每一個(gè)文件的屬性和權(quán)限要在全局的配置文件manifest.xml中定義。通信模塊采用的是Wifi無線通信方式,同時(shí)為了提高系統(tǒng)整體的通信效率,本系統(tǒng)將傳感器數(shù)據(jù)采集和互聯(lián)網(wǎng)通信部分放在了后臺(tái)獨(dú)立運(yùn)行的線程Thread中執(zhí)行,可以保證系統(tǒng)數(shù)據(jù)的實(shí)時(shí)采集和快速反應(yīng)性能。
Android完全支持JDK本身的TCP、UDP網(wǎng)絡(luò)通信API,同時(shí)也支持JDK提供的URL、URLConnection等網(wǎng)絡(luò)通信API。本系統(tǒng)中由于用到互聯(lián)網(wǎng)通信,采用了URLConnection的一個(gè)子類HttpURLConnection,其可用于向指定網(wǎng)站發(fā)送GET請(qǐng)求、POST請(qǐng)求。Android端互聯(lián)網(wǎng)通信部分核心代碼如下:
URL url = new URL(“http://219.243.13.12:80/test/UploadServlet”);//創(chuàng)建URL對(duì)象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();//調(diào)用URL對(duì)象openConnection()方法來創(chuàng)建HttpURLConnection對(duì)象
httpURLConnection.setRequestMethod(\"POST\");//設(shè)置POST方式的請(qǐng)求
DataOutputStream dos = new DataOutputStream(httpURLConnection.getOutputStream());//獲得OutputStream對(duì)象輸出流,準(zhǔn)備上傳文件至服務(wù)器
dos.writeBytes(s1);//調(diào)用writeBytes上傳
InputStream is = httpURLConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(is,\"utf-8\");
BufferedReader br = new BufferedReader(isr);
String result = br.readLine();//獲得InputStream對(duì)象輸入流,讀取從服務(wù)端傳過來的信息
啟動(dòng)Android端應(yīng)用程序,登錄到物聯(lián)網(wǎng)智能植物生長柜測控系統(tǒng),與此同時(shí)啟動(dòng)后臺(tái)程序采集生長柜中植物生長環(huán)境的參數(shù)和向服務(wù)器端的參數(shù)上傳。測控端向服務(wù)器發(fā)送POST方式的請(qǐng)求,連接服務(wù)器端。獲得OutputStream對(duì)象輸出流,準(zhǔn)備上傳文件至服務(wù)器,通過調(diào)用WriteBytes實(shí)現(xiàn)數(shù)據(jù)上傳。上傳成功后,服務(wù)器端向底層Android端發(fā)送反饋信息,底層數(shù)據(jù)中心獲得InputStream對(duì)象輸入流,讀取從服務(wù)端傳過來的信息。Android端測控中心的網(wǎng)絡(luò)通信程序流程如圖4所示。
2.3 服務(wù)器端軟件設(shè)計(jì)
物聯(lián)網(wǎng)服務(wù)器是Web服務(wù)的一種,Web服務(wù)基于標(biāo)準(zhǔn)網(wǎng)絡(luò)調(diào)用約定,無關(guān)操作系統(tǒng)或編程語言,僅通過相同的調(diào)用命令來遠(yuǎn)程執(zhí)行程序并返回結(jié)果。本項(xiàng)目使用Myeclipse+tomcat+MVC模式來設(shè)計(jì)開發(fā)。Web服務(wù)發(fā)布成功后,通過在瀏覽器地址欄輸入調(diào)用地址或網(wǎng)址進(jìn)行簡單的調(diào)用,也可以通過Web服務(wù)組合技術(shù)將相關(guān)服務(wù)分為一組,按組進(jìn)行服務(wù)的批量調(diào)用。
物聯(lián)網(wǎng)服務(wù)器接收端的軟件設(shè)計(jì)步驟如下:
1)通過item.getInputStream()獲得上傳的輸入流;
2)將上傳的生長柜中環(huán)境參數(shù)數(shù)據(jù)通過pp.split(“b|a”)進(jìn)行分割;
3)接收程序用一個(gè)后臺(tái)運(yùn)行的servlet,保證在服務(wù)器打開的情況下實(shí)時(shí)接收下位機(jī)傳輸?shù)臄?shù)據(jù),并插入數(shù)據(jù)庫sql1=\"insert into car_new(carnumber, carcolor, identifydate, identifyplace, path) values (?,?,?,?,?)\";
4)調(diào)用PreparedStatement進(jìn)行逐次插入。
3 實(shí)際應(yīng)用
智能植物生長柜實(shí)物圖如圖5所示,Android端測控中心生長柜中溫度現(xiàn)場監(jiān)測結(jié)果如圖6所示,數(shù)據(jù)5 s更新一次。同時(shí)采用Wifi無線網(wǎng)絡(luò)通信技術(shù)將環(huán)境參數(shù)傳至互聯(lián)網(wǎng),服務(wù)器端測試數(shù)據(jù)如圖7所示。
4 小結(jié)
基于Android平臺(tái)的物聯(lián)網(wǎng)智能植物生長柜測控系統(tǒng),結(jié)合互聯(lián)網(wǎng)通信技術(shù),實(shí)現(xiàn)了實(shí)時(shí)現(xiàn)場與遠(yuǎn)程監(jiān)控,根據(jù)傳感器監(jiān)測到的環(huán)境參數(shù)對(duì)執(zhí)行機(jī)構(gòu)進(jìn)行相應(yīng)的控制,從而達(dá)到為作物提供最佳生長環(huán)境的目的。該設(shè)計(jì)具有硬件成本低、操作界面人性化、控制方便、實(shí)時(shí)性好、遠(yuǎn)程控制靈敏度高等特點(diǎn),具有廣闊的應(yīng)用前景和使用價(jià)值。
參考文獻(xiàn):
[1] 古在豐樹.太陽光利用型植物工廠——先進(jìn)植物工廠的可持續(xù)性與設(shè)計(jì)[M].張成波,尚慶茂,譯.北京:中國農(nóng)業(yè)出版社,2010.
[2] 楊其長,張成波.植物工廠系列談(七)——植物工廠光照和溫度調(diào)控[J].農(nóng)村實(shí)用工程技術(shù)( 溫室園藝),2005(11):31-33.
[3] WU X L, DONG J L, LIANG F, et al. An LED green light for new plant growth cabinet precise temperature control system[J]. Applied Mechanics and Materials, 2014,577:325-328.
[4] 江 天,張 瀟.智能LED植物生長系統(tǒng)[J].照明工程學(xué)報(bào),2012(S1):10.
[5] CUI S G,HAN S L,WU X L,et al. Design of hardware of smart qlant growth cabinet[J].Applied Mechanics and Materials,2014,577:624-627.
[6] 王石磊,郭艷玲,付志剛.基于ARM的溫室環(huán)境控制系統(tǒng)研究[J].林業(yè)機(jī)械與木工設(shè)備,2008,36(4):19-21.
[7] MONTOYA F G,GOMEZ J,CAMA A. A monitoring system for intensive agriculture based on mesh networks and the android system[J]. Computers and Electronics in Agriculture,2013, 99(7):14-20.
[8] 馬增煒,馬錦儒,李亞敏.基于WIFI的智能溫室監(jiān)控系統(tǒng)設(shè)計(jì)[J].農(nóng)機(jī)化研究,2011(2):154-157.
[9] 公 磊,周 聰.基于Android的移動(dòng)終端應(yīng)用程序開發(fā)與研究[J].計(jì)算機(jī)與現(xiàn)代化,2008(8):86-89.
[10] 陳 強(qiáng).Android底層接口與驅(qū)動(dòng)開發(fā)技術(shù)詳解[M].北京:中國鐵道出版社,2012.
[11] 韓 迪,潘志宏.基于Android移動(dòng)設(shè)備傳感器的體感應(yīng)用[J]. 華南理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,40(9):75-80.
[12] 鄭 萌.Android系統(tǒng)移植和驅(qū)動(dòng)開發(fā)[M].北京:電子工業(yè)出版社,2013.