趙翠芹 蔣聯(lián)周 閆列友 梁雪 韋魏
摘要:緊跟物聯(lián)網(wǎng)發(fā)展的步伐,設(shè)計(jì)了一個(gè)智慧農(nóng)業(yè)系統(tǒng)。該系統(tǒng)主要由TI公司提供的CC2530芯片組建無線傳感器網(wǎng)絡(luò)(Wireless Sensor Networks,WSN),遠(yuǎn)程采集數(shù)據(jù)、然后將收集的數(shù)據(jù)通過串口發(fā)送到上位機(jī)。上位機(jī)物聯(lián)網(wǎng)平臺(tái)實(shí)現(xiàn)了遠(yuǎn)程數(shù)據(jù)的展示并下達(dá)用戶命令給協(xié)調(diào)器進(jìn)行網(wǎng)絡(luò)調(diào)整。此外,為了方便手持終端能夠?qū)崟r(shí)訪問網(wǎng)絡(luò),使用ESP8266WIFI AP(Access Point)進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。系統(tǒng)具有可遠(yuǎn)程實(shí)時(shí)顯示終端數(shù)據(jù)、低成本、功耗低等特點(diǎn),有一定的應(yīng)用價(jià)值。
關(guān)鍵詞:智慧農(nóng)業(yè);無線傳感器網(wǎng)絡(luò);物聯(lián)網(wǎng)技術(shù);遠(yuǎn)程實(shí)時(shí)監(jiān)控
中圖分類號(hào):TN790 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)10-0103-03
近年來,物聯(lián)網(wǎng)的新浪潮勢(shì)不可擋,可謂是“火樹銀花”之勢(shì)。一顆顆高端大氣的處理器魚貫而出。比如蘋果A11、華為麒麟970、三星Exynos 8895、高通驍龍845/835、展訊SC9853I、聯(lián)發(fā)科的Helio X30等[1]。這些高大上的處理器成為人們茶余飯后的談資,各大企業(yè)在物聯(lián)網(wǎng)領(lǐng)域賺得盆滿缽滿。最近,即將呼之欲出的“工業(yè)4.0”[2]被IT界炒得熱火朝天,可以說是物聯(lián)網(wǎng)的第二春。窄帶物聯(lián)網(wǎng)(NB-IOT)[3]標(biāo)準(zhǔn)一落地,各種產(chǎn)品是遍地開花。物聯(lián)網(wǎng)技術(shù)無孔不入,從中央到地方,從城市到農(nóng)村。在工業(yè)、農(nóng)業(yè)、交通、物流、城市管理、環(huán)保、安全、醫(yī)療、家居等各個(gè)領(lǐng)域都開展了應(yīng)用示范。在一定程度上提高了生產(chǎn)或生活效率,改善了生產(chǎn)或生活質(zhì)量。
民以食為天,農(nóng)業(yè)物聯(lián)網(wǎng)面臨著巨大市場(chǎng)需求。傳統(tǒng)農(nóng)業(yè)生產(chǎn)方式落后,生產(chǎn)率底下,抵抗自然災(zāi)害能力差,科技含量不高。而且近年來各種污染的問題層出不窮,空氣污染、水污染和土壤污染等新問題嚴(yán)重威脅到糧食安全[4][5]。
該智慧農(nóng)業(yè)系統(tǒng)緊跟物聯(lián)網(wǎng)發(fā)展的腳步,將物聯(lián)網(wǎng)技術(shù)應(yīng)用到農(nóng)業(yè)系統(tǒng)中,利用溫濕度傳感器、光照傳感器、煙霧傳感器等常規(guī)傳感器感知環(huán)境數(shù)據(jù)。終端采集這些數(shù)據(jù)后,通過A/D轉(zhuǎn)換之后,以字符串模式發(fā)送給協(xié)調(diào)器。協(xié)調(diào)器將收集到的數(shù)據(jù)通過UART串口通信發(fā)送給上位機(jī),并保存到數(shù)據(jù)庫中。為了不受時(shí)空限制,系統(tǒng)中添加了WIFI轉(zhuǎn)發(fā)模塊。用戶可以通過手持終端實(shí)時(shí)查看遠(yuǎn)程數(shù)據(jù),對(duì)光照、溫度、濕度等數(shù)據(jù)作出及時(shí)評(píng)估。上傳的數(shù)據(jù)還可以跟網(wǎng)上專家給出的數(shù)據(jù)進(jìn)行對(duì)比,分析數(shù)據(jù)后會(huì)得到相應(yīng)的解決辦法,修正給定參數(shù)。從而方便了農(nóng)作物的管理以及更快地解決農(nóng)作物問題,大大提高土地產(chǎn)出率、資源利用率和勞動(dòng)生產(chǎn)率。
從成本和功耗出發(fā),采用高性能、低成本、低功耗的CC2530來設(shè)計(jì)智慧農(nóng)業(yè)監(jiān)控系統(tǒng)。文章的結(jié)構(gòu)組織如下:首先給出總體系統(tǒng)架構(gòu);接著闡釋了硬件系統(tǒng)設(shè)計(jì)、軟件設(shè)計(jì)和系統(tǒng)的具體實(shí)現(xiàn),最后進(jìn)行了總結(jié)。
1 總體系統(tǒng)架構(gòu)
系統(tǒng)總體架構(gòu)圖如圖1所示,由zigbee組成的WSN、串口、PC端物聯(lián)網(wǎng)平臺(tái)、WIFI路由轉(zhuǎn)發(fā)和手持終端組成。協(xié)調(diào)器下面有6個(gè)終端。因各種農(nóng)作物的生長對(duì)環(huán)境要求不一樣。終端1用于數(shù)據(jù)采集,終端2用于環(huán)境控制。終端1連接的外設(shè)有溫濕度傳感器、煙霧傳感器、光敏傳感器和人體傳感器。終端2連接有風(fēng)扇和光合作用LED燈。終端3連接土壤濕度傳感器、雨滴傳感器和步進(jìn)電機(jī)。當(dāng)土壤濕度過低,會(huì)打開步進(jìn)電機(jī)進(jìn)行澆水。在節(jié)點(diǎn)中設(shè)置了適宜農(nóng)作物生長的相應(yīng)值。當(dāng)協(xié)調(diào)器收集到終端采集的數(shù)據(jù)時(shí),會(huì)進(jìn)行檢查。如果數(shù)據(jù)不適宜農(nóng)作物生長時(shí),協(xié)調(diào)器就會(huì)發(fā)指令給終端2。終端2收到指令后會(huì)自動(dòng)打開風(fēng)扇進(jìn)行通風(fēng)或LED燈補(bǔ)光,以調(diào)節(jié)相應(yīng)的環(huán)境數(shù)據(jù)值。終端3、4、5和終端1、2、3是一樣的。上位機(jī)軟件界面提供給用戶下發(fā)指令的功能。如果用戶想要修改環(huán)境參數(shù)的極限值,可以通過軟件界面觸發(fā)并通過串口發(fā)送指令給協(xié)調(diào)器,協(xié)調(diào)器再下達(dá)指令給相應(yīng)的終端。
2 系統(tǒng)硬件設(shè)計(jì)
硬件設(shè)計(jì)主要包括Zigbee節(jié)點(diǎn)的核心板、傳感器、LED電路、按鍵電路、步進(jìn)電機(jī)電路等部分硬件。
網(wǎng)絡(luò)節(jié)點(diǎn)選用TI公司的CC2530F256RHAR芯片作為CPU,該芯片是51結(jié)構(gòu)的單片機(jī),采用最經(jīng)典的C語言開發(fā)。為了縮短開發(fā)周期,專注系統(tǒng)的開發(fā)應(yīng)用,CC2530核心板、WIFI數(shù)據(jù)透?jìng)髂Kesp8266、和各種傳感器模塊都是直接從淘寶上購買。CC2530核心板實(shí)物圖和WIFI模塊實(shí)物圖如圖2所示。核心板包括單片機(jī)、晶振、天線接口和IO擴(kuò)展口。
作為數(shù)據(jù)采集的傳感器部分,主要涉及空氣溫濕度傳感器DHT11、土壤濕度傳感器、光敏傳感器、煙霧傳感器MQ-2、人體紅外檢測(cè)傳感器這5種傳感器。使用時(shí)將傳感器連接到CC2530的IO口,就可以很方便的獲取到周圍環(huán)境數(shù)據(jù)。
3 軟件設(shè)計(jì)
軟件設(shè)計(jì)主要包括WSN協(xié)議編程、WIFI模塊數(shù)據(jù)透?jìng)骱蜕衔粰C(jī)物聯(lián)網(wǎng)平臺(tái)開發(fā)。
3.1 WSN協(xié)議編程
傳感網(wǎng)系統(tǒng)是在IAR Embedded Workbench軟件下進(jìn)行開發(fā),在ZStack-CC2530-2.5.1a協(xié)議棧上編寫應(yīng)用層源碼。系統(tǒng)由一個(gè)協(xié)調(diào)器、多個(gè)終端節(jié)點(diǎn)組成星型網(wǎng)絡(luò)。協(xié)調(diào)器主要的功能是建立網(wǎng)絡(luò),網(wǎng)絡(luò)穩(wěn)定后將接收到的數(shù)據(jù)通過串口發(fā)送給PC機(jī)。終端節(jié)點(diǎn)主要是采集數(shù)據(jù),協(xié)調(diào)器和終端的工作流程如圖5所示。協(xié)議棧開發(fā)的重點(diǎn)是初始化函數(shù)和任務(wù)事件處理函數(shù)的實(shí)現(xiàn)。
1) 初始化函數(shù)實(shí)現(xiàn)
在初始化部分中,協(xié)調(diào)器和終端節(jié)點(diǎn)是一樣的實(shí)現(xiàn)過程。先定義節(jié)點(diǎn)描述符,然后用afRegister()函數(shù)對(duì)其進(jìn)行注冊(cè),注冊(cè)后就可以使用操作系統(tǒng)提供的服務(wù);接下來是對(duì)串口操作,定義halUARTCfg_t串口結(jié)構(gòu)體變量,并對(duì)其參數(shù)進(jìn)行相應(yīng)的配置,配置的參數(shù)主要有波特率、控制流和回調(diào)函數(shù)等參數(shù)配置,并用HalUARTOpen()函數(shù)打開串口;最后進(jìn)行NV操作,osal_nv_item_init初始內(nèi)存區(qū),讀取當(dāng)前PANID。如果PANID為零,則調(diào)用MT_UtilCommandProcessing()函數(shù)更改PANID,更改完成之后調(diào)用SystemReset()函數(shù)重啟。
為了避免開關(guān)終端后,終端節(jié)點(diǎn)無法及時(shí)響應(yīng)協(xié)調(diào)器發(fā)出指令,將協(xié)議棧中Tools下的f8wConfig.cfg文件中的-DRFD_RCVC_ALWAYS_ON改為TRUE;為了使終端處于低功耗模式,將-DRFD_RCVC_ALWAYS_ON改為FALSE。
2) 事件處理函數(shù)部分
當(dāng)兩個(gè)以上的終端(或者路由器)和協(xié)調(diào)器之間的通信時(shí),協(xié)調(diào)器需要區(qū)分消息來自于哪個(gè)終端。因此,在協(xié)調(diào)器部分定義了一個(gè)struct _devices結(jié)構(gòu)體類型數(shù)據(jù),結(jié)構(gòu)體成員包括int型的終端編號(hào)和網(wǎng)絡(luò)短地址。然后定義一個(gè)結(jié)構(gòu)體數(shù)組,用來存放相應(yīng)數(shù)據(jù)。終端節(jié)點(diǎn)入網(wǎng)成功后,終端節(jié)點(diǎn)采用NLME_GetShortAddr()函數(shù)獲取自身節(jié)點(diǎn)的網(wǎng)絡(luò)地址。終端采集到的數(shù)據(jù)是模擬的,需要轉(zhuǎn)換為數(shù)字信號(hào),使用協(xié)議棧里的文件 hal_adc.c 里的方法 HalAdcRead,可以讀出對(duì)應(yīng) IO 口上的 ADC 電壓值。此函數(shù)原型為:uint16 HalAdcRead (uint8 channel, uint8 resolution) ,第一個(gè)參數(shù)是通道號(hào),第2個(gè)參數(shù)是設(shè)置分辨率。終端采集數(shù)據(jù)之后,通過AF_DataRequest()函數(shù)把自己的終端編號(hào)、網(wǎng)絡(luò)地址和采集的數(shù)據(jù)發(fā)送給協(xié)調(diào)器。AF_DataRequest()函數(shù)的原型為AF_DataRequest(afAddrType_t dstAddr,endPointDesc_t *srcEP, unit16 cID,unit16 len, unit8 *buf,unit8 *transID,unit8 *options, unit8 radius)。發(fā)送函數(shù)最關(guān)鍵的參數(shù)是前5個(gè),依次為目的地址結(jié)構(gòu)體變量(接收數(shù)據(jù)的端點(diǎn))、設(shè)備端點(diǎn)描述符(發(fā)送數(shù)據(jù)的端點(diǎn))、簇ID、發(fā)送數(shù)據(jù)的有效長度、需要發(fā)送的數(shù)據(jù),其他參數(shù)可以參考協(xié)議棧里的GenericApp 例子進(jìn)行設(shè)置。消息可以定時(shí)發(fā)送,發(fā)送時(shí)長可以通過osal_start_timerEx()函數(shù)的第三個(gè)參數(shù)來實(shí)現(xiàn)。
接收消息函數(shù)為osal_msg_receive(),接收消息后需要將接收消息進(jìn)行強(qiáng)制轉(zhuǎn)換,轉(zhuǎn)換為afIncomingMSGPacket_t結(jié)構(gòu)體類型指針。接下來用switch和case分支語句判斷接收到的終端類型和事件類型,以便進(jìn)行相應(yīng)終端接收數(shù)據(jù)處理。系統(tǒng)中用到的系統(tǒng)強(qiáng)制事件標(biāo)志主要是響應(yīng)無線數(shù)據(jù)的AF_INCOMING_MSG_CMD、響應(yīng)網(wǎng)絡(luò)狀態(tài)的ZDO_STATE_CHANGE和響應(yīng)串口數(shù)據(jù)的CMD_SERIAL_MSG。
3.2 WIFI模塊
ESP8266是帶有串口并支持透?jìng)鲾?shù)據(jù)的WIFI模塊。在keil uVision4開發(fā)環(huán)境下進(jìn)行WIFI固件程序燒寫。設(shè)置WIFI模式,通過串口WIFI模塊,可以將協(xié)調(diào)器端的數(shù)據(jù)發(fā)送給WIFI,WIFI連接AP,借助WIFI AP轉(zhuǎn)發(fā),將數(shù)據(jù)發(fā)送給遠(yuǎn)程終端。
3.3 上位機(jī)物聯(lián)網(wǎng)平臺(tái)
該平臺(tái)建立在Visual Studio 2017軟件環(huán)境中,開發(fā)的語言是C#語言。軟件中提供了SerialPort類,該類實(shí)現(xiàn)了串口資源操作相關(guān)功能,命名空間為System.IO.Ports。程序代碼編寫過程中,首先用SerialPort()構(gòu)造函數(shù)初始化一個(gè)實(shí)例,接著調(diào)用SerialPort.GetPortNames()方法獲取當(dāng)前計(jì)算機(jī)串行端口名稱數(shù)組,并配置串口參數(shù)。關(guān)鍵實(shí)現(xiàn)串口接收的函數(shù)為receiveComDataRun(),該函數(shù)需要解析串口接收數(shù)據(jù),數(shù)據(jù)協(xié)議的解析如表1所示。例如在協(xié)議EA2656107610D中,第1位和最后一位表示數(shù)據(jù)幀頭和數(shù)據(jù)幀尾,第2位表示終端A,第3和第4位表示溫度為26°、第5和第6位表示濕度為56%、第7位表示紅外檢測(cè)結(jié)果,有人為1,無人為0、第8位煙霧檢測(cè)結(jié)果為無煙霧、第九和10位表示光照強(qiáng)度為76%、第11和12位表示網(wǎng)絡(luò)號(hào)為0X0010。數(shù)據(jù)解析之后,將數(shù)據(jù)展示在用戶界面。
4 系統(tǒng)實(shí)現(xiàn)
硬件電路連接圖如圖5所示,有協(xié)調(diào)器和終端節(jié)點(diǎn)。協(xié)調(diào)器上電后進(jìn)行組網(wǎng),并以廣播方式向外發(fā)送消息。終端節(jié)點(diǎn)上電后加入網(wǎng),并以單播方式把采集到的數(shù)據(jù)周期性地上報(bào)給協(xié)調(diào)器。PC端打開串口調(diào)試助手,按圖6中所示的串口參數(shù)進(jìn)行配置,配置完成之后打開串口,即可收到如圖6所示的數(shù)據(jù)。上位機(jī)物聯(lián)網(wǎng)平臺(tái)根據(jù)串口接收數(shù)據(jù)協(xié)議解析串口發(fā)送過來的數(shù)據(jù),經(jīng)過數(shù)據(jù)解析之后將獲取數(shù)據(jù)展示在用戶界面,如圖7所示。因?yàn)椴煌锓N適宜生長的條件不一樣。上位機(jī)還可以根據(jù)物種的生長條件,改變報(bào)警范圍,例如溫濕度、光照等上限和下限值發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器再以組播的方式把數(shù)據(jù)轉(zhuǎn)發(fā)給控制終端,以便打開風(fēng)扇進(jìn)行通風(fēng)或降溫、或開關(guān)等進(jìn)行光強(qiáng)控制,形成了一套聯(lián)動(dòng)的系統(tǒng)。
5 總結(jié)
在TI公司zigbee協(xié)議棧的工程項(xiàng)目基礎(chǔ)上,搭建了一個(gè)智慧農(nóng)業(yè)物聯(lián)網(wǎng)系統(tǒng),終端設(shè)備采集數(shù)據(jù),并定時(shí)發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器將收到數(shù)據(jù)轉(zhuǎn)發(fā)送給PC機(jī)。PC端用結(jié)合了java和c++優(yōu)勢(shì)的C#語言開發(fā)了一個(gè)物聯(lián)網(wǎng)平臺(tái),把遠(yuǎn)程終端采集到的數(shù)據(jù)展示在用戶界面。用戶可以根據(jù)植物生長最有利的條件把參數(shù)發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器再把數(shù)據(jù)發(fā)送給控制終端,控制終端進(jìn)行相應(yīng)的調(diào)整,形成了一套聯(lián)動(dòng)的系統(tǒng)。系統(tǒng)具有操作簡(jiǎn)單、低成本和低功耗的特點(diǎn),有一定的使用價(jià)值。
參考文獻(xiàn):
[1]與非網(wǎng).盤點(diǎn)2017之最全面手機(jī)處理器盤點(diǎn)[EB/OL]. http://www.eefocus.com/mcu-dsp/399425/r0.
[2]東方頭條.博世集團(tuán)宣布:將在工業(yè)4.0中使用IOTA[EB/OL]. http://sh.qihoo.com/pc/2s21quzve1k?sign=360_e39369d1.
[3] 戴博,袁弋非,余媛芳.窄帶物聯(lián)網(wǎng)(NB-IoT)標(biāo)準(zhǔn)與關(guān)鍵技術(shù)[M].北京:人民郵電出版社,2016 .
[4] 段益群,劉國彥.基于物聯(lián)網(wǎng)的智慧農(nóng)業(yè)大棚系統(tǒng)設(shè)計(jì)[J].軟件工程師,2013(12):35-36.
[5] 周新淳,張瞳,呂宏強(qiáng).基于物聯(lián)網(wǎng)的精準(zhǔn)化智慧農(nóng)業(yè)大棚系統(tǒng)設(shè)計(jì)[J].國外電子測(cè)量技術(shù), 2016,35(12):46:49.