江帆
摘 要:智能農(nóng)業(yè)是體現(xiàn)當前我國農(nóng)業(yè)信息化水平的重要依據(jù)之一。智能農(nóng)業(yè)主要是進行溫室大棚的設(shè)置,我國地域遼闊,氣候復雜,采用溫室大棚進行蔬菜、花卉等栽培,對緩解蔬菜淡季的供求矛盾起到了關(guān)鍵的作用,具有顯著的社會效益和現(xiàn)實的巨大的經(jīng)濟效益。在栽培的過程中,需要實時采集大棚內(nèi)的溫度、濕度、光照、土壤溫度、土壤水分等環(huán)境參數(shù),根據(jù)農(nóng)作物生長需求進行實時智能決策,并自動開啟或關(guān)閉指定的環(huán)境調(diào)節(jié)設(shè)備,使農(nóng)作物能夠正常生長,以滿足人們的日常生活需求。該文基于上述背景,闡述了基于Android系統(tǒng)的農(nóng)業(yè)大棚溫濕度實時控制系統(tǒng)的設(shè)計與開發(fā)。
關(guān)鍵詞:Android 線程 消息 ZigBee
中圖分類號:TP391.9 文獻標識碼:A 文章編號:1672-3791(2017)07(b)-0016-02
1 系統(tǒng)概述
該項目主要采用Android多線程技術(shù),結(jié)合Handler-Message消息處理機制,實時更新UI界面。農(nóng)業(yè)大棚中的溫濕度傳感器是通過ZigBee模塊連接的,風扇是通過串口連接的。ZigBee溫濕度傳感器實時檢測農(nóng)業(yè)大棚中的溫度和濕度,將數(shù)量實時顯示在Android端程序界面中,當大棚中的溫度和濕度過高時,打開風扇降溫、抽濕。
2 關(guān)鍵技術(shù)
在該項目中,主要采用了多線程技術(shù)和消息處理機制。
2.1 Android多線程技術(shù)
在Android系統(tǒng)中,每個線程完成一個任務(wù),并與其他線程同時執(zhí)行,這種機制稱為多線程。在Android系統(tǒng)中,可以創(chuàng)建線程、開啟線程、線程休眠和中斷線程。Android系統(tǒng)通過兩種方式創(chuàng)建線程,一是通過Thread類創(chuàng)建線程;二是通過實現(xiàn)Runnable接口創(chuàng)建線程。
在一個類中實現(xiàn)了Runnable接口函數(shù)以后,接下來是實現(xiàn)其run()方法,在run()方法中,編寫要執(zhí)行操作的代碼。
2.2 使用Handler傳遞消息
Android系統(tǒng)中使用Handler-Message消息傳遞機制更新主線程的UI步驟如下。
(1)在主線程的Activity中創(chuàng)建Handler對象,并重寫handleMessage(Message msg)方法。代碼如下:
Handler mHandler = new Handler(){
public void handleMessage(android.os.Messagemsg){
switch(msg.what){
case 0 ://對溫度值進行操作
case 1://對濕度值進行操作
}};};
(2)在新線程中使用主線程創(chuàng)建的Handler對象,調(diào)用它的發(fā)送消息方法向主線程發(fā)送消息。代碼如下。
mHandler.sendMessage(mMsg);
(3)利用Handler對象的handleMessage(Message msg)方法接收消息,然后根據(jù)obj的不同取值執(zhí)行不同的業(yè)務(wù)邏輯。
3 實現(xiàn)農(nóng)業(yè)大棚溫濕度自動控制
(1)按照實際需求,連接好ZigBee溫度和濕度傳感器模塊,并連接好風扇模塊。
(2)在Android Studio中新建一個項目,命名為wisearg。
(3)在項目工程中新建一個java文件,命名為BasePort.java,用于定義端口基類,打開ZigBee的四個輸入串口,定義openZigBeePort方法,打開ZigBee端口,代碼如下。
public class BasePort {
publicintopenZigBeePort(intcom,intmode,intbaudRate){
ZigbeeAnalogHelper.com =ZigBeeAnalogServiceAPI.openPort(com, mode, Rate);
return ZigbeeAnalogHelper.com; }
}
(4)新建closeZigBeePort()方法用于關(guān)閉四個串口,代碼如下:
public void closeZigBeePort(){
ZigBeeAnalogServiceAPI.closeUart();}
(5)實例化一個線程對象,每隔1 s更新一次溫度和濕度的數(shù)值。
Thread thread = new Thread(new Runnable(){
public void run()
{
while(!thread.currentThread().isInterrupted()){
Message message = Message.obtain();
message.what = 0x11;
handler.sendMessage(message);
Thread.sleep(1000);
}
}
});
(6)定義handleMessage函數(shù),用于處理溫度、濕度大于一定數(shù)值時,打開風扇。
public void handleMessage(Message msg){
switch(msg.what){
case 0 ://對溫度值進行操作
String mTempData = (String)msg.obj;
mTemp.setText(“溫度感應(yīng):” + mTempData + “℃”);
if(Double.parseDouble(mTempData) >mSetTemp) //檢測溫度高于設(shè)定值
mADAM4150.openFan1();//打開風扇
break;
case 1 ://對濕度值進行操作
String mHumiData = (String)msg.obj;
mHumi.setText(“濕度感應(yīng):” + mHumiData + “℃”);
if(Double.parseDouble(mHumiData) >mSetHumi) //檢測濕度高于設(shè)定值
mADAM4150.openFan1();//打開風扇
break;
}
}
運行程序,點擊開啟按鈕,程序?qū)崟r更新大棚內(nèi)溫度和濕度的數(shù)值,并控制風扇的開啟與關(guān)閉。
4 結(jié)語
智能農(nóng)業(yè)系統(tǒng)中的環(huán)境數(shù)據(jù)以無線傳感器技術(shù)為基礎(chǔ),實現(xiàn)對農(nóng)業(yè)生產(chǎn)環(huán)境的監(jiān)測和邏輯控制。在該系統(tǒng)中,需要使用ZigBee協(xié)調(diào)器模塊、ZigBee繼電器模塊、ZigBee溫度傳感器在、ZigBee濕度傳感器。通過采用高靈敏度傳感器,結(jié)合Android系統(tǒng)中多線程技術(shù)和消息發(fā)送機制,實現(xiàn)顯示農(nóng)業(yè)環(huán)境中的溫度和濕度的控制。
參考文獻
[1] 亓妍妍,李佳,朱維杰.基于Android系統(tǒng)的無線教學終端設(shè)計[J].科技創(chuàng)新導報,2013(12):150-151.
[2] 蔣德榮. 基于Android平臺的教學輔助平臺框架設(shè)計研究[J]. 科技廣場,2014(5):67-71.
[3] 彭登峰,韓梅,周路,等.Android終端軟件在嵌入式系統(tǒng)輔助教學中的應(yīng)用[J].計算機教育,2014(22):75-78.
[4] 王震,于文波,徐立波,等.基于Android平臺的電工實驗綜合管理系統(tǒng)研究[J].洛陽師范學院學報,2015(11):52-54.
[5] 李惠楊,凌雪.基于翻轉(zhuǎn)課堂和任務(wù)驅(qū)動的Android教學設(shè)計的研究[J].福建電腦,2016(5):64-65.