陳靜
(包頭師范學(xué)院信息科學(xué)與技術(shù)學(xué)院,內(nèi)蒙古包頭014030)
基于嵌入式WinCE的溫室大棚控制系統(tǒng)*
陳靜
(包頭師范學(xué)院信息科學(xué)與技術(shù)學(xué)院,內(nèi)蒙古包頭014030)
本文主要介紹了嵌入式系統(tǒng)在溫室大棚中的應(yīng)用研究,提出了基于嵌入式的溫室大棚控制系統(tǒng)的設(shè)計(jì)思想,感知層采用SHT11采集溫濕度信息,傳輸層利用Zigbee進(jìn)行數(shù)據(jù)傳輸及無(wú)線傳感網(wǎng)組網(wǎng),最終在嵌入式系統(tǒng)Tiny6410開(kāi)發(fā)板上實(shí)現(xiàn)數(shù)據(jù)匯總及顯示。本文重點(diǎn)研究基于嵌入式系統(tǒng)Wince的數(shù)據(jù)采集、串口通信及控制系統(tǒng)的設(shè)計(jì)部分。
嵌入式系統(tǒng);WinCE;Zigbee-CC2530;串口
隨著嵌入式系統(tǒng)技術(shù)的應(yīng)用與發(fā)展,溫室大棚技術(shù)不斷更新,推動(dòng)了我國(guó)農(nóng)業(yè)由過(guò)去的粗獷性農(nóng)業(yè)向精準(zhǔn)型農(nóng)業(yè)轉(zhuǎn)型。溫室大棚中環(huán)境信息如溫度、濕度、光照度、二氧化碳濃度等環(huán)境因素對(duì)作物的生長(zhǎng)發(fā)育有極大的影響。本文以三星S3C6410為微處理器,采用SHT11數(shù)字式溫濕度傳感器,通過(guò)Zigbee處理、傳輸各傳感器采集到的溫濕度信息,通過(guò)串口與嵌入式-WinCE應(yīng)用系統(tǒng)相連,最終顯示各點(diǎn)溫度濕度信息及圖表顯示,完成ARM11多點(diǎn)溫濕度檢測(cè)傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[1]。
本系統(tǒng)采用SHT11溫濕度傳感器采集的溫度、濕度數(shù)據(jù),通過(guò)Zigbee組網(wǎng)發(fā)送到協(xié)調(diào)器上,協(xié)調(diào)器通過(guò)串口發(fā)送到PC機(jī),在PC機(jī)上通過(guò)串口讀取到數(shù)據(jù),應(yīng)用程序處理讀到的數(shù)據(jù),完成顯示、存儲(chǔ)、繪制圖像等功能。最后將程序下載到Tiny6410開(kāi)發(fā)板上,硬件電路框圖如圖(1)所示。
圖1:硬件電路框圖
1.1 SHT11溫濕度傳感器
SHT11傳感器是全校準(zhǔn)數(shù)字輸出相對(duì)濕度、溫度;溫度值分辨率為14位,濕度值分辨率為12位,可編程降至12位和8位;具有露點(diǎn)計(jì)算輸出能力,有極高的可靠性和卓越的長(zhǎng)期穩(wěn)定性,無(wú)需外圍元件,采用工業(yè)標(biāo)準(zhǔn)I2C總線接口,可靠的CRC傳輸校驗(yàn)。
1.2 Zigbee技術(shù)
Zigbee技術(shù)[2]是一種短距離無(wú)線通信技術(shù),其主要特點(diǎn)是成本低、傳輸距離短、自組織、低數(shù)據(jù)傳輸速率及低功耗。本文采用Zigbee-CC2530芯片,基于TI的IAR 7.6a與Zigbee207-Zstack協(xié)議棧進(jìn)行開(kāi)發(fā),Zigbee協(xié)議棧包含物理層、介質(zhì)訪問(wèn)層、網(wǎng)絡(luò)層、應(yīng)用程序支持子層,應(yīng)用層。IEEE802.15.4定義了前兩層,而Zigbee聯(lián)盟定義了后三層。Zigbee協(xié)議棧是將各層協(xié)議集成,以API函數(shù)供用戶調(diào)用,開(kāi)發(fā)者需要關(guān)心的是數(shù)據(jù)在應(yīng)用層通過(guò)什么函數(shù),應(yīng)用哪些方式把數(shù)據(jù)接收或發(fā)送。
Zigbee-CC2530實(shí)現(xiàn)無(wú)線數(shù)據(jù)通信是一般包含三步:組網(wǎng)、發(fā)送和接收。通過(guò)調(diào)用協(xié)議棧組網(wǎng)函數(shù)、使終端節(jié)點(diǎn)(負(fù)責(zé)采集溫濕度值)加入網(wǎng)絡(luò),由協(xié)調(diào)器節(jié)點(diǎn)負(fù)責(zé)實(shí)現(xiàn)網(wǎng)絡(luò)的建立和終端加點(diǎn)加入;通過(guò)調(diào)用協(xié)議棧的無(wú)線收發(fā)函數(shù),實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收,協(xié)議棧實(shí)際上就是一個(gè)小的操作系統(tǒng),采用任務(wù)輪詢的工作方式執(zhí)行命令。
網(wǎng)絡(luò)層主要采用基于ADHOC技術(shù)的網(wǎng)絡(luò)協(xié)議,組網(wǎng)方式主要包含星型網(wǎng)、網(wǎng)狀網(wǎng)和樹(shù)狀網(wǎng),本文對(duì)協(xié)議棧進(jìn)行初始化用到的函數(shù)是basicR FInit(),用來(lái)設(shè)置模塊的傳輸通道,短地址等;調(diào)用basicRFSendPacket()函數(shù)發(fā)送數(shù)據(jù);以及bssicRFReceive()接收數(shù)據(jù),同時(shí)存入buffer中,最后通過(guò)UART串口傳送至嵌入式-Tiny6410硬件開(kāi)發(fā)平臺(tái),通過(guò)WinCE接收顯示數(shù)據(jù)。
在WinCE下運(yùn)行的程序,一般是在Windows環(huán)境下應(yīng)用EVC平臺(tái)開(kāi)發(fā),然后下載到嵌入式設(shè)備中。串口在WinCE中屬于流接口設(shè)備,可以像對(duì)文件一樣對(duì)串口進(jìn)行打開(kāi)、關(guān)閉、讀寫等操作。WinCE下的串口函數(shù)和Windows下的串口函數(shù)基本相同,但在以下一些方面有所不同:
(1)WinCE只支持Unicode;
(2)WinCE中有些自己特有的控件,可以方便編程。
《左傳》僖公二十四年富辰諫襄王述周公封建,有云:“昔周公吊二叔之不,故封建親戚,以蕃屏周:管、蔡、郕、霍、魯、衛(wèi)、毛、聃、郜、雍、曹、滕、畢、原、酆、郇,文之昭也;邘、晉、應(yīng)、韓,武之穆也;凡、蔣、邢、茅、胙、祭,周公之胤也?!盵4](第6冊(cè),P255)至少在西周時(shí)期,就已經(jīng)形成了以宗族拱衛(wèi)國(guó)家的觀念。此后這一觀念一直貫穿整個(gè)中國(guó)歷史。
(3)EVC不支持重疊I/O操作。
本文是將Zigbee采集到的溫濕度數(shù)據(jù)通過(guò)串口與嵌入式開(kāi)發(fā)板Tiny6410相連,在WinCE下開(kāi)發(fā)串口通信,包含下面一些步驟:
步驟1:打開(kāi)端口并進(jìn)行初始化。在EVC中把設(shè)備當(dāng)文件來(lái)處理,故使用CreateFile()函數(shù)打開(kāi)端口。如果打開(kāi)成功,則會(huì)返回打開(kāi)串口的句柄。成功打開(kāi)一個(gè)端口之后,需要對(duì)端口進(jìn)行初始化。調(diào)用端口通信函數(shù)SetupComm()設(shè)置串口的發(fā)送和接收緩沖區(qū)buffer的大小,調(diào)用GetCommTimeout()函數(shù)設(shè)置串口超時(shí);然后調(diào)用GetCommState()函數(shù)獲取當(dāng)前串口的默認(rèn)并返回一個(gè)DCB結(jié)構(gòu)體地址,通過(guò)給這個(gè)DCB結(jié)構(gòu)體各成員賦值來(lái)重新設(shè)定串口狀態(tài);最后調(diào)用PurgeComm()函數(shù)清空串口的發(fā)送接收緩沖區(qū)。
步驟2:對(duì)串口進(jìn)行讀寫操作。成功配置好串口參數(shù)后即可調(diào)用函數(shù)ReadFile()和WriteFile()對(duì)串口進(jìn)行讀寫操作。在通信的過(guò)程中應(yīng)用ClearCommError()函數(shù)清除可能出現(xiàn)錯(cuò)誤導(dǎo)致程序無(wú)法繼續(xù)運(yùn)行的問(wèn)題。
步驟3:關(guān)閉串口。使用完串口后必須關(guān)閉串口,調(diào)用CloseHandle()函數(shù)進(jìn)行關(guān)閉處理。
在WinCE下的編程依然是在Windows下的編程[3],而Windows走的是消息機(jī)制,原始的SDK下編程,使用的是微軟提供出來(lái)的一套由幾千個(gè)API函數(shù)接口,該接口提供的風(fēng)格是C語(yǔ)言形式的,如果使用傳統(tǒng)的SDK風(fēng)格編程,在小的程序上看不出什么問(wèn)題,要是一個(gè)大的項(xiàng)目上,從軟件架構(gòu)上考慮,傳統(tǒng)的C語(yǔ)言就是顯得捉襟見(jiàn)肘了,不利于程序的維護(hù)工作。
文檔類對(duì)儲(chǔ)存數(shù)據(jù)、對(duì)數(shù)據(jù)進(jìn)行處理,而視圖類進(jìn)行數(shù)據(jù)的顯示,視圖中需要顯示的數(shù)據(jù)從文檔類取得,而文檔類來(lái)維護(hù)這套數(shù)據(jù)。本文實(shí)現(xiàn)的過(guò)程如下:
其次,界面控件的添加。在視圖中創(chuàng)建一些標(biāo)簽和文本框,用于顯示數(shù)據(jù),界面的顯示走的是WM _PAINT消息,而要定時(shí)刷新數(shù)據(jù)就是要用到定時(shí)器,WM_TIMER消息,溫度的二維走勢(shì)圖的繪制,由于是動(dòng)態(tài)的數(shù)據(jù)每次接收的數(shù)據(jù)都是在不斷的細(xì)微的變化中,所以在文檔類的線程函數(shù)完成對(duì)數(shù)據(jù)的處理,這樣在視圖中就是不用關(guān)心數(shù)據(jù)的變化的問(wèn)題,直接可以用文檔類中的數(shù)據(jù)畫圖就是可以了。
最后,數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的存儲(chǔ)問(wèn)題。嵌入式編程不同于應(yīng)用程序,應(yīng)用程序中使用的數(shù)據(jù)庫(kù)大都是ORACLE、DB2、MySql、Sql Server等數(shù)據(jù)庫(kù)[4],而嵌入式編程使用的都是輕便型的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的訪問(wèn)一個(gè)是遠(yuǎn)程訪問(wèn)、一個(gè)就是運(yùn)行的應(yīng)用程序的設(shè)備中安裝數(shù)據(jù)庫(kù)軟件,這里采用的是WinCE自帶的數(shù)據(jù)庫(kù),來(lái)完成數(shù)據(jù)的存儲(chǔ)任務(wù)工作,這樣更便利。
3.1 溫度的二維走勢(shì)圖的繪制
在文檔類中的ThreadFuncData()線程函數(shù)[5]處理中刷新數(shù)據(jù),算法思想描述:目的是每秒定時(shí)繪制圖像,數(shù)據(jù)要每秒要刷新一次,接收數(shù)據(jù)的時(shí)候就是按每秒來(lái)接收的數(shù)據(jù),根據(jù)界面的大下繪制出22個(gè)點(diǎn),這樣本文定義一個(gè)數(shù)組[22],每次賦值一個(gè)值,數(shù)組滿了就把后面的值賦值給前面一個(gè),最后的一個(gè)存儲(chǔ)新值。代碼片段如下:
3.2 繪制圖像代碼
繪制圖像代碼思路:初始坐標(biāo)的點(diǎn)是第一個(gè)點(diǎn),CDC::Moveto函數(shù)完成定義坐標(biāo)點(diǎn),而CDC::Line-To函數(shù)的特點(diǎn)是坐標(biāo)點(diǎn)的更新,這樣就是能一次用CDC::LinTo函數(shù)劃線了,根據(jù)溫度的區(qū)間定義好坐標(biāo)點(diǎn)。
3.3 數(shù)據(jù)庫(kù)的連接及控件按鈕的實(shí)現(xiàn)
在WinCE中,如果想把數(shù)據(jù)庫(kù)存儲(chǔ)在文件中,也就是要使用數(shù)據(jù)庫(kù)卷,則必須先裝配數(shù)據(jù)庫(kù)卷,并且在關(guān)閉數(shù)據(jù)庫(kù)后,還應(yīng)卸載數(shù)據(jù)庫(kù)卷。另外,此數(shù)據(jù)庫(kù)系統(tǒng)不同于其他的數(shù)據(jù)庫(kù),沒(méi)有用到sql語(yǔ)句。而是用其自帶的數(shù)據(jù)庫(kù)字段類型,和一些API函數(shù)來(lái)操作數(shù)據(jù)庫(kù)系統(tǒng)的[5]。
存儲(chǔ)數(shù)據(jù)的按鈕和顯示存儲(chǔ)數(shù)據(jù)的按鈕是在菜單項(xiàng)下,用戶用鼠標(biāo)點(diǎn)擊菜單的消息屬于WM_ COMMAND消息,可以捕獲該消息,根據(jù)菜單的ID不同,去調(diào)用不同的消息處理函數(shù)。程序結(jié)構(gòu)代碼如圖(2)所示,顯示效果如圖(3)所示。
圖2:定義結(jié)構(gòu)的代碼段
圖3:數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的顯示效果
完全空白的SD卡是不能直接啟動(dòng)6410開(kāi)發(fā)板的,必須先在PC機(jī)上使用特殊的燒寫軟件把BIOS(也可以稱為bootloader)寫入SD卡才可以,并且寫入的這個(gè)BIOS是無(wú)法在電腦上直接看到的。三星公司已經(jīng)提供了這樣燒寫程序:IROM-SD_Fusing _tool.exe,可以找到它的源代碼,目前大部分6410開(kāi)發(fā)板均使用這個(gè)軟件,但這個(gè)燒寫軟件有很多的局限性和不安全性。
本系統(tǒng)是在Tiny6410開(kāi)發(fā)板上定制WinCE系統(tǒng)。將開(kāi)發(fā)板上自帶的光盤中的images文件夾復(fù)制到SD卡文件中,雙擊打開(kāi)“imagesFriendlyARM.ini”文件,找到”O(jiān)S=Linux”,并改為”O(jiān)S=CE6”保存修改,取出SD卡插到開(kāi)發(fā)板上;把開(kāi)發(fā)板上S2開(kāi)關(guān)設(shè)置為“SDBOOT”,并插入SD卡;上電開(kāi)機(jī)這時(shí)可以聽(tīng)到開(kāi)發(fā)板上蜂鳴器”滴“的一聲,同時(shí)板上的LED4開(kāi)始點(diǎn)亮并閃爍;靜聽(tīng)秒表跳動(dòng)的聲音,可以注意到LED3,2,1逐個(gè)開(kāi)始閃爍亮起,直到聽(tīng)到蜂鳴器”滴滴“兩聲,所有的LED滿格亮起,隨后不停的跳馬啟動(dòng),就說(shuō)明系統(tǒng)已經(jīng)燒寫完畢;把開(kāi)發(fā)板S2開(kāi)關(guān)設(shè)置為”NAND”啟動(dòng),這時(shí)重啟系統(tǒng)就可以看到WindowsCE已經(jīng)安裝好了,在WindowsCE上正常運(yùn)行時(shí)的顯示效果如圖(4)所示,可以清晰的讀取到溫室大棚當(dāng)前的溫度值、濕度值、土壤的溫度值及土壤的濕度值;通過(guò)曲線可以看出當(dāng)前數(shù)據(jù)的走向,同時(shí)從數(shù)據(jù)庫(kù)中可以調(diào)取到一段時(shí)間以內(nèi)的所有溫度濕度數(shù)據(jù),可以對(duì)農(nóng)作物的種植、澆灌、培育起指導(dǎo)作用。
圖4:嵌入式Wince下運(yùn)行界面
本文重點(diǎn)研究了在WindowsCE下的串口實(shí)現(xiàn)過(guò)程,二維圖像繪制及WindowsCE下數(shù)據(jù)庫(kù)調(diào)用的連接及控件的實(shí)現(xiàn)過(guò)程,對(duì)WinCE下編程應(yīng)用具有實(shí)際的指導(dǎo)意義。通過(guò)對(duì)溫室大棚溫濕度控制系統(tǒng)的設(shè)計(jì),解決了大棚內(nèi)溫濕度采集控制及顯示問(wèn)題,使用起來(lái)跟Windows操作系統(tǒng)類似很容易上手實(shí)現(xiàn),節(jié)省了很大的人力、物力和財(cái)力,使得本設(shè)計(jì)具有很高的實(shí)用性和可擴(kuò)展性。
[1]侯曉茜.基于嵌入式系統(tǒng)的溫室大棚參數(shù)采集與傳輸[D].沈陽(yáng)工業(yè)大學(xué)碩士畢業(yè)論文,2013,02.
[2]黃鳳娟.基于單片機(jī)的溫度測(cè)控系統(tǒng)在溫室大棚中的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢工程大學(xué)畢業(yè)論文.2006.10.1.
[3]李國(guó)政;張強(qiáng);楊宏衛(wèi).ARM-Linux嵌入式系統(tǒng)在農(nóng)業(yè)大棚中的應(yīng)用[J].現(xiàn)代電子技術(shù),2008,3.
[4]張莉蓮.基于S3C2440的溫室大棚多點(diǎn)溫度檢測(cè)系統(tǒng)的研究[J].安徽農(nóng)業(yè)科學(xué),2010,7.
[5]Jeff Prosise.MFC Windows程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007,3.
The Greenhouse Control System Based on Embedded WinCE
CHEN Jing
(College of Information Science and Technology,Baotou Teachers College;Baotou 014030)
This paper mainly introduced the implication of embedded system on greenhouse,proposed the design idea of greenhouse control system based on Embedded system.The perceptual layer using SHT11 to gather temperature and humidity information,the transport layer using Zigbee for data transmission and wireless sensor network,and at last the paper displayed and summarized the data on the board of embedded system 6410.The paper focused on the data acquisition based on Embedded system WinCE software,serial communication and the design of control system.
Embedded system;WinCE;Zigbee-CC2530;Serial communication
TP274
A
1004-1869(2014)01-0044-04
2013-12-20
包頭師范學(xué)院青年基金資助項(xiàng)目(BSYKJ2011-24)
陳靜(1981-),女,漢族,碩士研究生,講師,研究方向:現(xiàn)代信號(hào)處理、嵌入式系統(tǒng)及短距離無(wú)線通信技術(shù)在物聯(lián)網(wǎng)中的應(yīng)用研究。