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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、基于ZigBee的無線溫濕度采集系統(tǒng) 17基于ZigBee的無線溫濕度采集系統(tǒng)摘要:針對傳統(tǒng)溫濕度檢測存在的問題,結合無線傳感器網(wǎng)絡技術,本文提出一種基于ZigBee 技術的無線溫濕度采集系統(tǒng)的設計方法。設計采用CC2530 射頻芯片及SHT11 數(shù)字溫濕度傳感器,在ZigBee 協(xié)議棧的基礎上進行應用開發(fā)。闡述了ZigBee技術,系統(tǒng)組成及工作原理,系統(tǒng)軟硬件設計等內(nèi)容,并通過實驗測試表明,該無線溫濕度采集系統(tǒng)能夠穩(wěn)定可靠的運行,并且具有組網(wǎng)簡單、功耗低,成本低等優(yōu)點,具有十分好的實用價值和經(jīng)濟效益。關鍵字: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)、倉庫管理以及食品保存等領域,溫度和濕度控制顯得十分重要,但傳統(tǒng)的方法采用測試器材來測量溫度和濕度,通過人工進行檢測,這種人工測試方法費時費力、效率低,而且測試的溫度及濕度的誤差大,隨機性大。因此,開發(fā)一種全新的溫濕度采集系統(tǒng)就顯得十分迫切和重要了。本文設計了一種采用無線傳感器網(wǎng)絡技術進行溫度和濕度的采集系統(tǒng)。無線傳感器網(wǎng)絡不需要較高的傳輸帶寬,但需要較低的傳輸時延和較低的功率消耗。ZigBee 是一種新興的短距離、低功耗、低數(shù)據(jù)速率、低成本、低復雜度的無線網(wǎng)絡技術,它的出現(xiàn)正好滿足了這個要求。2 ZigBee技術ZigBee是一種標準,該標準定義了短距離

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

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

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

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

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

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

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

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

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

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

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

17、社,2012.5.2 高手瑋,吳燦陽. ZigBee技術實踐教程,北京:北京航空航天大學出版社,2009.63 瞿雷,劉盛德,胡咸斌. ZigBee技術及應用,北京:北京航空航天大學出版社,2007.9.4 呂強,劉玉華,劉志軍,王國勝. 基于ZigBee的無線溫濕度檢測終端設計. 科學技術與工程, 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.附錄:實物圖及部分代碼1 實物圖傳感器節(jié)點實物 傳感器節(jié)點外包裝手持讀寫器(協(xié)調(diào)器節(jié)點)2 部分程序代碼2.1 終端節(jié)點(傳感

19、器節(jié)點)部分代碼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ù)據(jù)void SerialApp_ProcessSht11(void); /處理溫濕度傳感器,得到溫濕度數(shù)據(jù)uint8 SerialApp_GetVoltage(void); /獲取電壓數(shù)據(jù)void SerialApp_MemoryTime(void); /存儲時間數(shù)據(jù)(一組時間以及第一組溫濕度數(shù)據(jù))void SerialApp_MemoryTemp_Humi(void); /存儲溫濕度數(shù)據(jù)(第二組到第十七組溫濕度數(shù)據(jù))void SerialApp_LowP

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

22、存儲事件,存儲第二到第十七組溫濕度 /注意:此處時間最大為65536毫秒,因此為了方便,最多我們可以設置1分鐘的延時,即60000 return ( events SERIALAPP_MEM_TIME_EVT ); if ( events & SERIALAPP_MEM_TEMP_HUMI_EVT ) if(PktNum > 1 && PktNum <= 17) /溫濕度數(shù)據(jù)的組數(shù)小于17時,依次每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秒存儲一組,同上最長延時為65536毫秒,為方便,可最多設置為一分鐘 if(PktNum = 18) /當存滿17組溫濕度數(shù)據(jù)時,NV條目自動加1,溫濕度數(shù)據(jù)組數(shù)重新歸1,并再次注冊存儲時間任務 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ù)據(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條目對應起來 ReturnValue1 = osal_nv_read(CCLD_NV,0,5,Time_Read); /讀時間數(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) )/讀取成功,返回相應

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; /時間 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,故當讀到的溫濕度數(shù)據(jù)為FF時,說明實際溫濕度已經(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) /設定冷鏈標簽時間,通常設定為當前時間 extern uint8 seconds,minute,hour,date,week,month,years; minute = pkt->cmd.Data8; /設定時間,將協(xié)調(diào)

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

33、 = pkt->cmd.Data3; /功能位,設定時間 if(date != 0x00) /通過日期來判定時間是否設定成功,日期等于0,設定失敗,否則成功 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) /讀取冷鏈標簽時間數(shù)據(jù)(不一定是當前時間) uint8 Tx_Len; /要發(fā)送的數(shù)據(jù)長度(字節(jié)數(shù)) buffer0 = pkt->cmd.Data0; /前綴 buffer1 = pkt->cmd.Data1; /讀寫器ID buffer2 = pkt->cmd.Data2; /Ta

35、gID buffer3 = pkt->cmd.Data3; /功能位,讀取時間 buffer5 = TimeBuf0; /時間數(shù)據(jù) buffer6 = TimeBuf1; buffer7 = TimeBuf2; buffer8 = TimeBuf3; buffer9 = TimeBuf4; if(buffer7 != 0x00) /通過日期來判斷是否讀到時間,因為日期是不可能為0的 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) /復雜指令

37、/osal_stop_timerEx(SerialApp_TaskID, SERIALAPP_MEM_TIME_EVT); /收到此指令時,停止存儲數(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); /讀取最后一個數(shù)據(jù)包的數(shù)據(jù) for(i=0;i<73;i+) T_Hi = DataBufi; if(T_Hi = 0xFF)break; /獲取最后

38、一個數(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; /最后一個數(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é)點部分代碼

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ù)長度 Frame_Buf1 = SerialApp_RxAddr.addr.shortAddr >> 8 ; /冷鏈標簽的地址高8位 F

42、rame_Buf2 = SerialApp_RxAddr.addr.shortAddr ; /冷鏈標簽的地址低8位 Frame_Buf3 = BUF2; /TagID Frame_Buf4 = BUF3; /功能位 Frame_Buf5 = BUF4; /狀態(tài)位 Frame_Buf6 = SerialApp_TxBuf4; /數(shù)據(jù)包的序號 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) /設置冷鏈標簽時間 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) /讀冷鏈標簽的時間(不一定是當前時間) Frame_Buf0 = pkt->cmd.DataLength + 1 ; /總的數(shù)據(jù)長度 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) /復雜指令 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) /設置發(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論