基于ZigBee的無線溫濕度采集系統(tǒng)_第1頁
基于ZigBee的無線溫濕度采集系統(tǒng)_第2頁
基于ZigBee的無線溫濕度采集系統(tǒng)_第3頁
基于ZigBee的無線溫濕度采集系統(tǒng)_第4頁
基于ZigBee的無線溫濕度采集系統(tǒng)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于ZigBee的無線溫濕度采集系統(tǒng) 17基于ZigBee的無線溫濕度采集系統(tǒng)摘要:針對(duì)傳統(tǒng)溫濕度檢測(cè)存在的問題,結(jié)合無線傳感器網(wǎng)絡(luò)技術(shù),本文提出一種基于ZigBee 技術(shù)的無線溫濕度采集系統(tǒng)的設(shè)計(jì)方法。設(shè)計(jì)采用CC2530 射頻芯片及SHT11 數(shù)字溫濕度傳感器,在ZigBee 協(xié)議棧的基礎(chǔ)上進(jìn)行應(yīng)用開發(fā)。闡述了ZigBee技術(shù),系統(tǒng)組成及工作原理,系統(tǒng)軟硬件設(shè)計(jì)等內(nèi)容,并通過實(shí)驗(yàn)測(cè)試表明,該無線溫濕度采集系統(tǒng)能夠穩(wěn)定可靠的運(yùn)行,并且具有組網(wǎng)簡(jiǎn)單、功耗低,成本低等優(yōu)點(diǎn),具有十分好的實(shí)用價(jià)值和經(jīng)濟(jì)效益。關(guān)鍵字:ZigBee,溫濕度,CC2530,協(xié)議棧Wireless temperature

2、and humidity acquisition system based on ZigBee technologyAbstract: According to the problems existing in temperature and humidity detecting of traditional ways, combining with wireless sensor network technology , this paper puts forward a new design of temperature and humidity acquisition system ba

3、sed on ZigBee technology. The design was carried out based on the ZigBee protocol, adopting CC2530 RF chip and digital humidity and temperature sensor SHT11. Paper introduces ZigBee technology, the overall design of the system, hardware and software design of the nodes and so forth. Finally, the exp

4、erimental tests have proved that the wireless temperature and humidity acquisition system was stable and credible , with the advantages of simple networking , low cost and low power, and it has a very good practical value and economic benefits .Keywords: ZigBee, Temperature and humidity, CC2530, Pro

5、tocol1 引言在冷鏈物流、農(nóng)業(yè)生產(chǎn)、倉(cāng)庫(kù)管理以及食品保存等領(lǐng)域,溫度和濕度控制顯得十分重要,但傳統(tǒng)的方法采用測(cè)試器材來測(cè)量溫度和濕度,通過人工進(jìn)行檢測(cè),這種人工測(cè)試方法費(fèi)時(shí)費(fèi)力、效率低,而且測(cè)試的溫度及濕度的誤差大,隨機(jī)性大。因此,開發(fā)一種全新的溫濕度采集系統(tǒng)就顯得十分迫切和重要了。本文設(shè)計(jì)了一種采用無線傳感器網(wǎng)絡(luò)技術(shù)進(jìn)行溫度和濕度的采集系統(tǒng)。無線傳感器網(wǎng)絡(luò)不需要較高的傳輸帶寬,但需要較低的傳輸時(shí)延和較低的功率消耗。ZigBee 是一種新興的短距離、低功耗、低數(shù)據(jù)速率、低成本、低復(fù)雜度的無線網(wǎng)絡(luò)技術(shù),它的出現(xiàn)正好滿足了這個(gè)要求。2 ZigBee技術(shù)ZigBee是一種標(biāo)準(zhǔn),該標(biāo)準(zhǔn)定義了短距離

6、、低數(shù)據(jù)傳輸速率無線通信所需要的一系列通信協(xié)議,它擁有一套完整的協(xié)議層次結(jié)構(gòu),由IEEE802. 15. 4 和ZigBee 聯(lián)盟共同制定完成。其工作頻段分別是868MHz(歐洲)、915MHz(北美)、2. 4GHz(全球)3個(gè)頻段,可以應(yīng)用于不同的場(chǎng)合,諸如家庭自動(dòng)化網(wǎng)絡(luò)、工業(yè)控制網(wǎng)絡(luò)、交互式玩具、遠(yuǎn)程檢測(cè)等。完整的ZigBee 協(xié)議棧包括物理層(PHY) 、媒體訪問控制層(MAC) 、網(wǎng)絡(luò)層(NWK) 和應(yīng)用層(APL)。其中,ZigBee 的應(yīng)用層由應(yīng)用支持子層(APS) 、ZigBee 設(shè)備對(duì)象(ZDO) 和制造商定義的應(yīng)用對(duì)象組成。在ZigBee 協(xié)議棧中,每一層通過使用下層提供的

7、服務(wù)完成自己的功能,同時(shí)對(duì)上層提供服務(wù),網(wǎng)絡(luò)中的通信在對(duì)等的層次上進(jìn)行。ZigBee 網(wǎng)絡(luò)含三種類型的節(jié)點(diǎn),即協(xié)調(diào)器、路由器和終端設(shè)備,其中協(xié)調(diào)器和路由器均為全功能設(shè)備(FFD),而終端設(shè)備選用精簡(jiǎn)功能設(shè)備(RFD) 。一個(gè)ZigBee 網(wǎng)絡(luò)有且僅有一個(gè)協(xié)調(diào)器,該設(shè)備負(fù)責(zé)啟動(dòng)網(wǎng)絡(luò),配置網(wǎng)絡(luò)成員地址,維護(hù)網(wǎng)絡(luò),維護(hù)節(jié)點(diǎn)的綁定關(guān)系表等,需要最多的存儲(chǔ)空間和計(jì)算能力,它可以看作是一個(gè)PAN 的網(wǎng)關(guān)節(jié)點(diǎn)。路由器主要實(shí)現(xiàn)擴(kuò)展網(wǎng)絡(luò)及路由消息的功能,終端設(shè)備則負(fù)責(zé)與實(shí)際的監(jiān)控對(duì)象相連,實(shí)現(xiàn)具體功能的單元。無線傳感器網(wǎng)絡(luò)中可以根據(jù)不同的需要組成星型、簇型網(wǎng)和網(wǎng)狀型三種不同的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。星狀網(wǎng)絡(luò)由一個(gè)PAN

8、協(xié)調(diào)器和多個(gè)終端設(shè)備組成。只存在PAN 協(xié)調(diào)器與終端設(shè)備的通信,終端設(shè)備間的通信都需通過PAN 協(xié)調(diào)器的轉(zhuǎn)發(fā);樹狀網(wǎng)絡(luò)由一個(gè)協(xié)調(diào)器和一個(gè)或多個(gè)星狀結(jié)構(gòu)連接而成,設(shè)備除了能與自己的父節(jié)點(diǎn)或子節(jié)點(diǎn)進(jìn)行點(diǎn)對(duì)點(diǎn)直接通訊外,其他只能通過樹狀路由完成消息傳輸;網(wǎng)狀網(wǎng)絡(luò)是樹狀網(wǎng)絡(luò)基礎(chǔ)上實(shí)現(xiàn)的,與樹狀網(wǎng)絡(luò)不同的是,它允許網(wǎng)絡(luò)中所有具有路由功能的節(jié)點(diǎn)直接互連,由路由器中的路由表配合實(shí)現(xiàn)消息的網(wǎng)狀路由。一個(gè)ZigBee 網(wǎng)絡(luò)最多可含有65000 多個(gè)子節(jié)點(diǎn),通過無線網(wǎng)絡(luò)數(shù)據(jù)從一個(gè)節(jié)點(diǎn)傳送到另一個(gè)節(jié)點(diǎn),最終傳送到控制中心。另外,它可以與其他的無線網(wǎng)絡(luò)如GPRS 和CDMA 等兼容,也可以接入有線網(wǎng)絡(luò)如Interne

9、t 、Ethernet ,實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。3 系統(tǒng)結(jié)構(gòu)和原理基于ZigBee的無線溫濕度采集系統(tǒng)采用ZigBee星型拓?fù)浣M網(wǎng)方式,多個(gè)具有簡(jiǎn)單功能的設(shè)備和傳感器構(gòu)成傳感器節(jié)點(diǎn)(終端設(shè)備),一臺(tái)具有完整功能的設(shè)備作為中心節(jié)點(diǎn)(協(xié)調(diào)器節(jié)點(diǎn)),中心節(jié)點(diǎn)與中心控制計(jì)算機(jī)(PC機(jī))相連,中心控制計(jì)算機(jī)通過上位機(jī)軟件可以實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)節(jié)點(diǎn)的監(jiān)測(cè)和控制。整個(gè)系統(tǒng)工作時(shí),傳感器節(jié)點(diǎn)負(fù)責(zé)現(xiàn)場(chǎng)溫濕度數(shù)據(jù)的采集,將采集到數(shù)據(jù)一定的數(shù)據(jù)格式存儲(chǔ)起來,當(dāng)上位機(jī)需要讀取溫濕度時(shí),就發(fā)送相應(yīng)指令給協(xié)調(diào)器,協(xié)調(diào)器將指令翻譯后發(fā)送給傳感器節(jié)點(diǎn),傳感器節(jié)點(diǎn)接收到指令,就將溫濕度數(shù)據(jù)無線發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器通過串口RS232 將數(shù)據(jù)

10、發(fā)送給PC 機(jī),PC機(jī)就可以對(duì)溫濕度數(shù)據(jù)進(jìn)行顯示、分析和處理,從而實(shí)現(xiàn)了溫濕度全程的無線采集和監(jiān)測(cè)工作。此外,整個(gè)溫濕度采集系統(tǒng)還可以實(shí)現(xiàn)協(xié)調(diào)器自檢、發(fā)送功率設(shè)置、終端節(jié)點(diǎn)地址設(shè)定、時(shí)間讀取和設(shè)置、低功耗設(shè)置、拍照等其它功能。4 系統(tǒng)硬件設(shè)計(jì)4.1 傳感器節(jié)點(diǎn)無線傳感器節(jié)點(diǎn)由數(shù)據(jù)采集、數(shù)據(jù)處理、無線通信和能量供應(yīng)四個(gè)模塊組成。數(shù)據(jù)采集模塊由數(shù)字傳感器或者模擬傳感器加A/ D 轉(zhuǎn)換器組成,負(fù)責(zé)區(qū)域內(nèi)的溫濕度信息采集和數(shù)據(jù)轉(zhuǎn)換;數(shù)據(jù)處理模塊由微控制器組成,負(fù)責(zé)控制整個(gè)傳感器節(jié)點(diǎn)的操作和數(shù)據(jù)存儲(chǔ);無線通信模塊由無線收發(fā)器組成,負(fù)責(zé)與其他傳感器節(jié)點(diǎn)進(jìn)行通信,能量供應(yīng)模塊為系統(tǒng)其他的三個(gè)部分提供能量。傳

11、感器節(jié)點(diǎn)由瑞溫濕度傳感器SHT11 檢測(cè)得到溫濕度信息,并轉(zhuǎn)化為數(shù)字信號(hào),傳輸至CC2530,由CC2530負(fù)責(zé)對(duì)信號(hào)進(jìn)行處理發(fā)送。節(jié)點(diǎn)電源部分使用兩節(jié)五號(hào)電池為整個(gè)節(jié)點(diǎn)供電。為了使系統(tǒng)工作時(shí)間持續(xù)長(zhǎng),節(jié)點(diǎn)通常在閑置時(shí)快速進(jìn)入休眠模式,其外設(shè)模塊進(jìn)入休眠狀態(tài),或者電源管理部分不對(duì)這些外設(shè)模塊供電。SHT11是瑞士Sensirion 公司推出的基于CMOSensTM 技術(shù)的新型溫濕度傳感器。SHT11將溫濕度傳感器、信號(hào)放大調(diào)理、A/ D 轉(zhuǎn)換、I2C 總線接口全部集成于一個(gè)芯片上,該芯片包括一個(gè)電容性聚合體濕度敏感元件和一個(gè)用能隙材料制成的溫度敏感元件。這兩個(gè)敏感元件分別將濕度和溫度轉(zhuǎn)換成電信

12、號(hào),該電信號(hào)首先進(jìn)入微弱信號(hào)放大器進(jìn)行放大器;然后進(jìn)入一個(gè)14 位的A/ D 轉(zhuǎn)換器;最后經(jīng)過二線串行數(shù)字接口輸出數(shù)字信號(hào)。SHT11 通過DA TA 數(shù)據(jù)總線輸出的是相對(duì)濕度,需要進(jìn)行線性補(bǔ)償和溫度補(bǔ)償后才能得到較為準(zhǔn)確的濕度值。CC2530芯片是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 應(yīng)用的一個(gè)真正的片上系統(tǒng)(SoC)解決方案。它能夠以非常低的總的材料成本建立強(qiáng)大的網(wǎng)絡(luò)節(jié)點(diǎn)。CC2530 結(jié)合了領(lǐng)先的RF 收發(fā)器的優(yōu)良性能,業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051 CPU,系統(tǒng)內(nèi)可編程閃存,8-KB RAM 和許多其它強(qiáng)大的功能。在本無線溫濕度采集系統(tǒng)中,我們

13、采用的是CC2530F256芯片,它結(jié)合了德州儀器的業(yè)界領(lǐng)先的黃金單元ZigBee 協(xié)議棧(Z-Stack),提供了一個(gè)強(qiáng)大和完整的ZigBee 解決方案。溫濕度傳感器SHT11采集到的溫濕度數(shù)據(jù),存儲(chǔ)在CC2530的FLASH ROM中,當(dāng)傳感節(jié)點(diǎn)接收到讀取溫濕度指令時(shí),就通過ZigBee協(xié)議棧將溫濕度數(shù)據(jù)發(fā)送出去。4.2 協(xié)調(diào)器節(jié)點(diǎn)網(wǎng)絡(luò)協(xié)調(diào)器主要負(fù)責(zé)網(wǎng)絡(luò)的建立,信息的接收、匯總、處理及控制指令的發(fā)送ZigBee 網(wǎng)絡(luò)最初由協(xié)調(diào)器發(fā)動(dòng)并建立。協(xié)調(diào)器通過主動(dòng)掃描選擇一個(gè)合適信道, 根據(jù)掃描的結(jié)果選擇自己的PANID 及0x0000 作為自己的短地址,其網(wǎng)絡(luò)層將通過向MAC 層發(fā)送ML

14、ME2START. request原語啟動(dòng)一個(gè)新的PAN 。協(xié)調(diào)器節(jié)點(diǎn)在建成網(wǎng)絡(luò)后,開始數(shù)據(jù)收發(fā)工作及各種操作指令的執(zhí)行。當(dāng)協(xié)調(diào)器收到數(shù)據(jù)時(shí),根據(jù)數(shù)據(jù)的串ID 來判斷傳送的數(shù)據(jù)是地址信息還是傳感器采集的數(shù)據(jù),根據(jù)不同的數(shù)據(jù)類型解析數(shù)據(jù)包提供給PC 機(jī)顯示和處理。5 系統(tǒng)軟件設(shè)計(jì)本系統(tǒng)的軟件設(shè)計(jì)是基于Ti 公司推出的跟CC2530 芯片配套的Z2STACK 協(xié)議棧和IAR 集成開發(fā)環(huán)境進(jìn)行設(shè)計(jì)的。ZSTACK 協(xié)議棧運(yùn)行在一個(gè)基于任務(wù)調(diào)度機(jī)制的OSAL 操作系統(tǒng)上,OSAL 通過觸發(fā)任務(wù)的事件來實(shí)現(xiàn)任務(wù)調(diào)度。OSAL 中的任務(wù)可以通過任API 將其添加到系統(tǒng)中,實(shí)現(xiàn)多任務(wù)機(jī)制。系統(tǒng)中傳感器節(jié)點(diǎn)由

15、CC2530 內(nèi)部的MCU(8051) 控制,定時(shí)向溫濕度傳感器SHT11 發(fā)送讀溫度和濕度指令,SHT11完成溫度和濕度轉(zhuǎn)換后會(huì)發(fā)出轉(zhuǎn)換完成信號(hào),MCU 在接收到轉(zhuǎn)換完成信號(hào)后,讀取溫濕度值,并將這些數(shù)據(jù)信號(hào)傳送給協(xié)調(diào)器。協(xié)調(diào)器通過串口RS232 和上位機(jī)( PC) 相連,通過人機(jī)交互的方式對(duì)整個(gè)區(qū)域的進(jìn)行檢測(cè)。為了實(shí)現(xiàn)這一功能,必須知道節(jié)點(diǎn)的長(zhǎng)短地址對(duì)應(yīng)表,這就需要節(jié)點(diǎn)在加入網(wǎng)絡(luò)后發(fā)送自己的長(zhǎng)短地址給協(xié)調(diào)器,協(xié)調(diào)器將長(zhǎng)短地址對(duì)應(yīng)列表存儲(chǔ)起來,以便用戶要求采集數(shù)據(jù)時(shí)依據(jù)地址表來采集每個(gè)傳感器的數(shù)據(jù)。傳感節(jié)點(diǎn)與協(xié)調(diào)器節(jié)點(diǎn)的溫濕度采集及通信流程圖如下圖1所示。圖1 傳感器節(jié)點(diǎn)與協(xié)調(diào)器節(jié)點(diǎn)的通信流

16、程圖6 系統(tǒng)測(cè)試驗(yàn)證本無線溫濕度采集系統(tǒng)設(shè)計(jì)完成后,進(jìn)行了一系列的測(cè)試工作,包括通信距離,穿墻能力,系統(tǒng)穩(wěn)定性以及數(shù)據(jù)準(zhǔn)確性等。經(jīng)過測(cè)試,系統(tǒng)通信距離200米左右(與發(fā)送功率有關(guān)),可以成功穿越一堵墻通信(與網(wǎng)絡(luò)拓?fù)湫问接嘘P(guān)),并可以穩(wěn)定工作,預(yù)計(jì)傳感器節(jié)點(diǎn)工作壽命可達(dá)1年。7 結(jié)束語本文設(shè)計(jì)的基于ZigBee技術(shù)的CC2530無線溫濕度采集系統(tǒng),其外圍設(shè)備簡(jiǎn)單、功耗低、傳輸無線化,而且精度高,可靠性好,提供了良好的人機(jī)交互界面,方便控制使用,在冷鏈物流,農(nóng)業(yè)生產(chǎn)以及食品保存等等領(lǐng)域都有很好的應(yīng)用前景。參考文獻(xiàn):1 王小強(qiáng),歐陽駿,黃寧淋,ZigBee無線傳感網(wǎng)絡(luò)設(shè)計(jì)與實(shí)現(xiàn),北京:化學(xué)工業(yè)出版

17、社,2012.5.2 高手瑋,吳燦陽. ZigBee技術(shù)實(shí)踐教程,北京:北京航空航天大學(xué)出版社,2009.63 瞿雷,劉盛德,胡咸斌. ZigBee技術(shù)及應(yīng)用,北京:北京航空航天大學(xué)出版社,2007.9.4 呂強(qiáng),劉玉華,劉志軍,王國(guó)勝. 基于ZigBee的無線溫濕度檢測(cè)終端設(shè)計(jì). 科學(xué)技術(shù)與工程, 2008.12; 8 (23) .5 Shahin Farahani. ZigBee Wireless Networks and Transceivers, Elsevier Ltd ,20086 Sensirion.SHT11Datasheet.http/ pdf7 X. Li , W. Dav

18、id. Combining the Best of Global2as2 View and Local2as2View for Data IntegrationC. PODS ,2004.8 A Cal , D Lembo , et al. Experimenting Data Inte2 gration with DISDISC . CAiSE 2004 , Lecture Notes in Computer Science ,2004 ,3084 ,9 :5166.附錄:實(shí)物圖及部分代碼1 實(shí)物圖傳感器節(jié)點(diǎn)實(shí)物 傳感器節(jié)點(diǎn)外包裝手持讀寫器(協(xié)調(diào)器節(jié)點(diǎn))2 部分程序代碼2.1 終端節(jié)點(diǎn)(傳感

19、器節(jié)點(diǎn))部分代碼static void SerialApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg );static void SerialApp_HandleKeys( uint8 shift, uint8 keys );static void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt );static void SerialApp_Send(void);static void SerialApp_Resp(void);static void SerialApp_CallBack(uint8

20、 port, uint8 event);void SerialApp_ProcessHym8563(void); /處理時(shí)鐘芯片,得到時(shí)間數(shù)據(jù)void SerialApp_ProcessSht11(void); /處理溫濕度傳感器,得到溫濕度數(shù)據(jù)uint8 SerialApp_GetVoltage(void); /獲取電壓數(shù)據(jù)void SerialApp_MemoryTime(void); /存儲(chǔ)時(shí)間數(shù)據(jù)(一組時(shí)間以及第一組溫濕度數(shù)據(jù))void SerialApp_MemoryTemp_Humi(void); /存儲(chǔ)溫濕度數(shù)據(jù)(第二組到第十七組溫濕度數(shù)據(jù))void SerialApp_LowP

21、ower(void); /低功耗處理函數(shù)if ( events & SERIALAPP_MEM_TIME_EVT ) PktNum+; /存儲(chǔ)時(shí)間事件發(fā)生,溫濕度組數(shù)加1 SerialApp_ProcessHym8563(); SerialApp_ProcessSht11(); SerialApp_GetVoltage(); SerialApp_MemoryTime(); osal_start_timerEx( SerialApp_TaskID, SERIALAPP_MEM_TEMP_HUMI_EVT, 10000 ); /一組時(shí)間數(shù)據(jù)和第一組溫濕度數(shù)據(jù)存儲(chǔ)好后,等待10秒,觸發(fā)溫濕度

22、存儲(chǔ)事件,存儲(chǔ)第二到第十七組溫濕度 /注意:此處時(shí)間最大為65536毫秒,因此為了方便,最多我們可以設(shè)置1分鐘的延時(shí),即60000 return ( events SERIALAPP_MEM_TIME_EVT ); if ( events & SERIALAPP_MEM_TEMP_HUMI_EVT ) if(PktNum > 1 && PktNum <= 17) /溫濕度數(shù)據(jù)的組數(shù)小于17時(shí),依次每10秒存一組溫濕度數(shù)據(jù) /SerialApp_ProcessHym8563(); SerialApp_ProcessSht11(); SerialApp_Memo

23、ryTemp_Humi(); PktNum+; /存一組溫濕度,其組數(shù)加1 osal_start_timerEx( SerialApp_TaskID, SERIALAPP_MEM_TEMP_HUMI_EVT, 10000 ); /每10秒存儲(chǔ)一組,同上最長(zhǎng)延時(shí)為65536毫秒,為方便,可最多設(shè)置為一分鐘 if(PktNum = 18) /當(dāng)存滿17組溫濕度數(shù)據(jù)時(shí),NV條目自動(dòng)加1,溫濕度數(shù)據(jù)組數(shù)重新歸1,并再次注冊(cè)存儲(chǔ)時(shí)間任務(wù) PktNum = 1 ; CCLD_NV = CCLD_NV + 1 ; offset = 5 ; osal_start_timerEx( SerialApp_Task

24、ID, SERIALAPP_MEM_TIME_EVT, 100 ); return ( events SERIALAPP_MEM_TEMP_HUMI_EVT ); void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt ) uint8 buffer20; uint8 Temp_Humi_Read70 ; /存放讀取的溫濕度數(shù)據(jù) uint8 Time_Read5; /存放讀取的時(shí)間數(shù)據(jù) uint8 Data_Package80; /存放要發(fā)給協(xié)調(diào)器的數(shù)據(jù)包 uint8 delay; uint8 i,ReturnValue1,ReturnV

25、alue2; switch ( pkt->clusterId ) / A message with a serial data block to be transmitted on the serial port. case SERIALAPP_CLUSTERID1: / Store the address for sending and retrying. osal_memcpy(&SerialApp_RxAddr, &(pkt->srcAddr), sizeof( afAddrType_t ); if(pkt->cmd.Data3 = 0x00) /讀溫濕

26、度指令 CCLD_NV = 0x0400 + pkt->cmd.Data4; /將選擇讀取的數(shù)據(jù)包與NV條目對(duì)應(yīng)起來 ReturnValue1 = osal_nv_read(CCLD_NV,0,5,Time_Read); /讀時(shí)間數(shù)據(jù) ReturnValue2 = osal_nv_read(CCLD_NV,5,68,Temp_Humi_Read); /讀17組溫濕度數(shù)據(jù) if(ReturnValue1 = ZSUCCESS && ReturnValue2 = ZSUCCESS && osal_nv_item_len(CCLD_NV) )/讀取成功,返回相應(yīng)

27、數(shù)據(jù) Data_Package0 = pkt->cmd.Data0 ; /前綴 Data_Package1 = pkt->cmd.Data1 ; /讀寫器ID Data_Package2 = pkt->cmd.Data2 ; /TagID Data_Package3 = pkt->cmd.Data3 ; /功能位,讀溫濕度 Data_Package4 = 0xFF ; /狀態(tài)位 Data_Package5 = Time_Read0; /時(shí)間 Data_Package6 = Time_Read1; Data_Package7 = Time_Read2; Data_Pack

28、age8 = Time_Read3; Data_Package9 = Time_Read4; for(i=10;i<78;i+) /將17組溫濕度的有效數(shù)據(jù)提取出來 Data_Packagei = Temp_Humi_Readi-10; /溫濕度 if(Data_Packagei = 0xFF)break; /NV條目初始化后全為FF,故當(dāng)讀到的溫濕度數(shù)據(jù)為FF時(shí),說明實(shí)際溫濕度已經(jīng)讀完,該處沒有存溫濕度 SerialApp_TxAddr.addrMode = (afAddrMode_t)Addr16Bit; /單播發(fā)送 SerialApp_TxAddr.addr.shortAddr =

29、 0x0000; /協(xié)調(diào)器地址 SerialApp_TxAddr.endPoint = SERIALAPP_ENDPOINT; /發(fā)送端口 AF_DataRequest(&SerialApp_TxAddr, (endPointDesc_t *)&SerialApp_epDesc, SERIALAPP_CLUSTERID1, i, Data_Package, &SerialApp_MsgID, 0, AF_DEFAULT_RADIUS); else /讀取失敗,則返回下面數(shù)據(jù) Data_Package0 = pkt->cmd.Data0 ; /前綴 Data_Pac

30、kage1 = pkt->cmd.Data1 ; /讀寫器ID Data_Package2 = pkt->cmd.Data2 ; /TagID Data_Package3 = pkt->cmd.Data3 ; /功能位,讀溫濕度 Data_Package4 = 0xFE ; /狀態(tài)位 SerialApp_TxAddr.addrMode = (afAddrMode_t)Addr16Bit; SerialApp_TxAddr.addr.shortAddr = 0x0000; SerialApp_TxAddr.endPoint = SERIALAPP_ENDPOINT; AF_Da

31、taRequest(&SerialApp_TxAddr, (endPointDesc_t *)&SerialApp_epDesc, SERIALAPP_CLUSTERID1, 5, Data_Package, &SerialApp_MsgID, 0, AF_DEFAULT_RADIUS); if(pkt->cmd.Data3 = 0x01) /設(shè)定冷鏈標(biāo)簽時(shí)間,通常設(shè)定為當(dāng)前時(shí)間 extern uint8 seconds,minute,hour,date,week,month,years; minute = pkt->cmd.Data8; /設(shè)定時(shí)間,將協(xié)調(diào)

32、器發(fā)送過來的年月時(shí)分秒分別對(duì)應(yīng)賦給年月時(shí)分秒 hour = pkt->cmd.Data7; date = pkt->cmd.Data6; month = pkt->cmd.Data5; years = pkt->cmd.Data4; HYM8653_Init(); /時(shí)鐘芯片初始化 HYM8563_Write_time(); /將設(shè)定的時(shí)間寫入時(shí)鐘 buffer0 = pkt->cmd.Data0; /前綴 buffer1 = pkt->cmd.Data1; /讀寫器ID buffer2 = pkt->cmd.Data2; /TagID buffer3

33、 = pkt->cmd.Data3; /功能位,設(shè)定時(shí)間 if(date != 0x00) /通過日期來判定時(shí)間是否設(shè)定成功,日期等于0,設(shè)定失敗,否則成功 buffer4 = 0xFF; else buffer4 = 0xFE; SerialApp_TxAddr.addrMode = (afAddrMode_t)Addr16Bit; SerialApp_TxAddr.addr.shortAddr = 0x0000; SerialApp_TxAddr.endPoint = SERIALAPP_ENDPOINT; AF_DataRequest(&SerialApp_TxAddr,

34、(endPointDesc_t *)&SerialApp_epDesc, SERIALAPP_CLUSTERID1, 5, buffer, &SerialApp_MsgID, 0, AF_DEFAULT_RADIUS); if(pkt->cmd.Data3 = 0x02) /讀取冷鏈標(biāo)簽時(shí)間數(shù)據(jù)(不一定是當(dāng)前時(shí)間) uint8 Tx_Len; /要發(fā)送的數(shù)據(jù)長(zhǎng)度(字節(jié)數(shù)) buffer0 = pkt->cmd.Data0; /前綴 buffer1 = pkt->cmd.Data1; /讀寫器ID buffer2 = pkt->cmd.Data2; /Ta

35、gID buffer3 = pkt->cmd.Data3; /功能位,讀取時(shí)間 buffer5 = TimeBuf0; /時(shí)間數(shù)據(jù) buffer6 = TimeBuf1; buffer7 = TimeBuf2; buffer8 = TimeBuf3; buffer9 = TimeBuf4; if(buffer7 != 0x00) /通過日期來判斷是否讀到時(shí)間,因?yàn)槿掌谑遣豢赡転?的 buffer4 = 0xFF; Tx_Len = 10 ; else buffer4 = 0xFE; Tx_Len = 5 ; SerialApp_TxAddr.addrMode = (afAddrMode_

36、t)Addr16Bit; SerialApp_TxAddr.addr.shortAddr = 0x0000; SerialApp_TxAddr.endPoint = SERIALAPP_ENDPOINT; AF_DataRequest(&SerialApp_TxAddr, (endPointDesc_t *)&SerialApp_epDesc, SERIALAPP_CLUSTERID1, Tx_Len, buffer, &SerialApp_MsgID, 0, AF_DEFAULT_RADIUS); if(pkt->cmd.Data3 = 0x03) /復(fù)雜指令

37、/osal_stop_timerEx(SerialApp_TaskID, SERIALAPP_MEM_TIME_EVT); /收到此指令時(shí),停止存儲(chǔ)數(shù)據(jù) /osal_stop_timerEx(SerialApp_TaskID, SERIALAPP_MEM_TEMP_HUMI_EVT); uint8 DataBuf80; uint8 T_H80; uint8 i=0 ; osal_nv_read(CCLD_NV,0,73,DataBuf); /讀取最后一個(gè)數(shù)據(jù)包的數(shù)據(jù) for(i=0;i<73;i+) T_Hi = DataBufi; if(T_Hi = 0xFF)break; /獲取最后

38、一個(gè)數(shù)據(jù)包的有效數(shù)據(jù) buffer0 = pkt->cmd.Data0; buffer1 = pkt->cmd.Data1; buffer2 = pkt->cmd.Data2; buffer3 = pkt->cmd.Data3; buffer4 = 0xFF; buffer5 = SerialApp_GetVoltage(); /電壓 buffer6 = Total_Pkt_Num; /總的數(shù)據(jù)包數(shù) buffer7 = (i-5)/4; /最后一個(gè)數(shù)據(jù)包的溫濕度數(shù)據(jù)組數(shù) buffer8 = pkt->rssi; /RSSI值 SerialApp_TxAddr.ad

39、drMode = (afAddrMode_t)Addr16Bit; SerialApp_TxAddr.addr.shortAddr = 0x0000; SerialApp_TxAddr.endPoint = SERIALAPP_ENDPOINT; AF_DataRequest(&SerialApp_TxAddr, (endPointDesc_t *)&SerialApp_epDesc, SERIALAPP_CLUSTERID1, 9, buffer, &SerialApp_MsgID, 0, AF_DEFAULT_RADIUS); break;2.2 協(xié)調(diào)器節(jié)點(diǎn)部分代碼

40、void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt ) uint8 BUF100; uint8 Frame_Buf100; uint8 i; uint8 delay; switch ( pkt->clusterId ) / A message with a serial data block to be transmitted on the serial port. case SERIALAPP_CLUSTERID1: / Store the address for sending and retrying. osal_mem

41、cpy(&SerialApp_RxAddr, &(pkt->srcAddr), sizeof( afAddrType_t ); osal_memcpy(BUF, pkt->cmd.Data, pkt->cmd.DataLength); if(BUF3 = 0x00) /讀溫濕度 if(BUF4 = 0xFF) /讀取成功 Frame_Buf0 = pkt->cmd.DataLength + 2 ; /總的數(shù)據(jù)長(zhǎng)度 Frame_Buf1 = SerialApp_RxAddr.addr.shortAddr >> 8 ; /冷鏈標(biāo)簽的地址高8位 F

42、rame_Buf2 = SerialApp_RxAddr.addr.shortAddr ; /冷鏈標(biāo)簽的地址低8位 Frame_Buf3 = BUF2; /TagID Frame_Buf4 = BUF3; /功能位 Frame_Buf5 = BUF4; /狀態(tài)位 Frame_Buf6 = SerialApp_TxBuf4; /數(shù)據(jù)包的序號(hào) for(i=7;i<pkt->cmd.DataLength + 2 ;i+) /溫濕度數(shù)據(jù) Frame_Bufi = BUFi-2; HalUARTWrite(SERIAL_APP_PORT, Frame_Buf, pkt->cmd.Dat

43、aLength + 2 ); if(BUF4 = 0xFE) Frame_Buf0 = pkt->cmd.DataLength + 1 ; Frame_Buf1 = SerialApp_RxAddr.addr.shortAddr >> 8 ; Frame_Buf2 = SerialApp_RxAddr.addr.shortAddr ; Frame_Buf3 = BUF2; Frame_Buf4 = BUF3; Frame_Buf5 = BUF4; HalUARTWrite(SERIAL_APP_PORT, Frame_Buf, pkt->cmd.DataLength +

44、 1 ); if(BUF3 = 0x01) /設(shè)置冷鏈標(biāo)簽時(shí)間 Frame_Buf0 = pkt->cmd.DataLength + 1 ; Frame_Buf1 = SerialApp_RxAddr.addr.shortAddr >> 8 ; Frame_Buf2 = SerialApp_RxAddr.addr.shortAddr ; for(i=3;i<pkt->cmd.DataLength + 1 ;i+) Frame_Bufi = BUFi-1; HalUARTWrite(SERIAL_APP_PORT, Frame_Buf, pkt->cmd.Da

45、taLength + 1 ); if(BUF3 = 0x02) /讀冷鏈標(biāo)簽的時(shí)間(不一定是當(dāng)前時(shí)間) Frame_Buf0 = pkt->cmd.DataLength + 1 ; /總的數(shù)據(jù)長(zhǎng)度 Frame_Buf1 = SerialApp_RxAddr.addr.shortAddr >> 8 ; Frame_Buf2 = SerialApp_RxAddr.addr.shortAddr ; for(i=3;i<pkt->cmd.DataLength + 1 ;i+) Frame_Bufi = BUFi-1; HalUARTWrite(SERIAL_APP_POR

46、T, Frame_Buf, pkt->cmd.DataLength + 1 ); if(BUF3 = 0x03) /復(fù)雜指令 Frame_Buf0 = pkt->cmd.DataLength + 1 ; Frame_Buf1 = SerialApp_RxAddr.addr.shortAddr >> 8 ; Frame_Buf2 = SerialApp_RxAddr.addr.shortAddr ; for(i=3;i<pkt->cmd.DataLength + 1 ;i+) Frame_Bufi = BUFi-1; HalUARTWrite(SERIAL_A

47、PP_PORT, Frame_Buf, pkt->cmd.DataLength + 1 ); if(BUF3 = 0x04) /檢查協(xié)調(diào)器的工作狀態(tài) Frame_Buf0 = pkt->cmd.DataLength + 2 ; Frame_Buf1 = SerialApp_RxAddr.addr.shortAddr >> 8 ; Frame_Buf2 = SerialApp_RxAddr.addr.shortAddr ; Frame_Buf3 = SerialApp_TxBuf2; Frame_Buf4 = SerialApp_TxBuf3; Frame_Buf5 =

48、0xFF; HalUARTWrite(SERIAL_APP_PORT, Frame_Buf, pkt->cmd.DataLength + 2 ); if(BUF3 = 0x05) /設(shè)置發(fā)送功率 /uint8 T3; uint8 Return_Value ; void *Tx_Value ; uint8 TransmissionPower ; TransmissionPower = SerialApp_TxBuf4; Tx_Value = &TransmissionPower; Return_Value = MAC_MlmeSetReq(MAC_PHY_TRANSMIT_POWER_SIGNED,Tx_Value); /T0 = macPhyTxPower; /HalUARTWrite(SERIAL_APP_PORT, T, 1 ); Frame_Buf0 = pkt->cmd.DataLen

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論