版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于ZigBee的無線溫濕度采集系統(tǒng)摘要:針對傳統(tǒng)溫濕度檢測存在的問題,結合無線傳感器網(wǎng)絡技術,本文提出一種基于ZigBee技術的無線溫濕度采集系統(tǒng)的設計方法。設計采用CC2530射頻芯片及SHT11數(shù)字溫濕度傳感器,在ZigBee協(xié)議棧的根底上進行應用開發(fā)。闡述了ZigBee技術,系統(tǒng)組成及工作原理,系統(tǒng)軟硬件設計等內容,并通過實驗測試說明,該無線溫濕度采集系統(tǒng)能夠穩(wěn)定可靠的運行,并且具有組網(wǎng)簡單、功耗低,本錢低等優(yōu)點,具有十分好的實用價值和經(jīng)濟效益。關鍵字:ZigBee,溫濕度,CC2530,協(xié)議棧WirelesstemperatureandhumidityacquisitionsystembasedonZigBeetechnologyAbstract:Accordingtotheproblemsexistingintemperatureandhumiditydetectingoftraditionalways,combiningwithwirelesssensornetworktechnology,thispaperputsforwardanewdesignoftemperatureandhumidityacquisitionsystembasedonZigBeetechnology.ThedesignwascarriedoutbasedontheZigBeeprotocol,adoptingCC2530RFchipanddigitalhumidityandtemperaturesensorSHT11.PaperintroducesZigBeetechnology,theoveralldesignofthesystem,hardwareandsoftwaredesignofthenodesandsoforth.Finally,theexperimentaltestshaveprovedthatthewirelesstemperatureandhumidityacquisitionsystemwasstableandcredible,withtheadvantagesofsimplenetworking,lowcostandlowpower,andithasaverygoodpracticalvalueandeconomicbenefits.Keywords:ZigBee,Temperatureandhumidity,CC2530,Protocol1引言在冷鏈物流、農(nóng)業(yè)生產(chǎn)、倉庫管理以及食品保存等領域,溫度和濕度控制顯得十分重要,但傳統(tǒng)的方法采用測試器材來測量溫度和濕度,通過人工進行檢測,這種人工測試方法費時費力、效率低,而且測試的溫度及濕度的誤差大,隨機性大。因此,開發(fā)一種全新的溫濕度采集系統(tǒng)就顯得十分迫切和重要了。本文設計了一種采用無線傳感器網(wǎng)絡技術進行溫度和濕度的采集系統(tǒng)。無線傳感器網(wǎng)絡不需要較高的傳輸帶寬,但需要較低的傳輸時延和較低的功率消耗。ZigBee是一種新興的短距離、低功耗、低數(shù)據(jù)速率、低本錢、低復雜度的無線網(wǎng)絡技術,它的出現(xiàn)正好滿足了這個要求。2ZigBee技術ZigBee是一種標準,該標準定義了短距離、低數(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é)議棧中,每一層通過使用下層提供的效勞完成自己的功能,同時對上層提供效勞,網(wǎng)絡中的通信在對等的層次上進行。ZigBee網(wǎng)絡含三種類型的節(jié)點,即協(xié)調器、路由器和終端設備,其中協(xié)調器和路由器均為全功能設備(FFD),而終端設備選用精簡功能設備(RFD)。一個ZigBee網(wǎng)絡有且僅有一個協(xié)調器,該設備負責啟動網(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協(xié)調器和多個終端設備組成。只存在PAN協(xié)調器與終端設備的通信,終端設備間的通信都需通過PAN協(xié)調器的轉發(fā);樹狀網(wǎng)絡由一個協(xié)調器和一個或多個星狀結構連接而成,設備除了能與自己的父節(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)絡如Internet、Ethernet,實現(xiàn)遠程監(jiān)控。3系統(tǒng)結構和原理基于ZigBee的無線溫濕度采集系統(tǒng)采用ZigBee星型拓撲組網(wǎng)方式,多個具有簡單功能的設備和傳感器構成傳感器節(jié)點〔終端設備〕,一臺具有完整功能的設備作為中心節(jié)點〔協(xié)調器節(jié)點〕,中心節(jié)點與中心控制計算機〔PC機〕相連,中心控制計算機通過上位機軟件可以實現(xiàn)對整個系統(tǒng)節(jié)點的監(jiān)測和控制。整個系統(tǒng)工作時,傳感器節(jié)點負責現(xiàn)場溫濕度數(shù)據(jù)的采集,將采集到數(shù)據(jù)一定的數(shù)據(jù)格式存儲起來,當上位機需要讀取溫濕度時,就發(fā)送相應指令給協(xié)調器,協(xié)調器將指令翻譯后發(fā)送給傳感器節(jié)點,傳感器節(jié)點接收到指令,就將溫濕度數(shù)據(jù)無線發(fā)送給協(xié)調器,協(xié)調器通過串口RS232將數(shù)據(jù)發(fā)送給PC機,PC機就可以對溫濕度數(shù)據(jù)進行顯示、分析和處理,從而實現(xiàn)了溫濕度全程的無線采集和監(jiān)測工作。此外,整個溫濕度采集系統(tǒng)還可以實現(xiàn)協(xié)調器自檢、發(fā)送功率設置、終端節(jié)點地址設定、時間讀取和設置、低功耗設置、拍照等其它功能。4系統(tǒng)硬件設計4.1傳感器節(jié)點無線傳感器節(jié)點由數(shù)據(jù)采集、數(shù)據(jù)處理、無線通信和能量供給四個模塊組成。數(shù)據(jù)采集模塊由數(shù)字傳感器或者模擬傳感器加A/D轉換器組成,負責區(qū)域內的溫濕度信息采集和數(shù)據(jù)轉換;數(shù)據(jù)處理模塊由微控制器組成,負責控制整個傳感器節(jié)點的操作和數(shù)據(jù)存儲;無線通信模塊由無線收發(fā)器組成,負責與其他傳感器節(jié)點進行通信,能量供給模塊為系統(tǒng)其他的三個局部提供能量。傳感器節(jié)點由瑞溫濕度傳感器SHT11檢測得到溫濕度信息,并轉化為數(shù)字信號,傳輸至CC2530,由CC2530負責對信號進行處理發(fā)送。節(jié)點電源局部使用兩節(jié)五號電池為整個節(jié)點供電。為了使系統(tǒng)工作時間持續(xù)長,節(jié)點通常在閑置時快速進入休眠模式,其外設模塊進入休眠狀態(tài),或者電源管理局部不對這些外設模塊供電。SHT11是瑞士Sensirion公司推出的基于CMOSensTM技術的新型溫濕度傳感器。SHT11將溫濕度傳感器、信號放大調理、A/D轉換、I2C總線接口全部集成于一個芯片上,該芯片包括一個電容性聚合體濕度敏感元件和一個用能隙材料制成的溫度敏感元件。這兩個敏感元件分別將濕度和溫度轉換成電信號,該電信號首先進入微弱信號放大器進行放大器;然后進入一個14位的A/D轉換器;最后經(jīng)過二線串行數(shù)字接口輸出數(shù)字信號。SHT11通過DATA數(shù)據(jù)總線輸出的是相對濕度,需要進行線性補償和溫度補償后才能得到較為準確的濕度值。CC2530芯片是用于2.4-GHz、ZigBee和RF4CE應用的一個真正的片上系統(tǒng)〔SoC〕解決方案。它能夠以非常低的總的材料本錢建立強大的網(wǎng)絡節(jié)點。CC2530結合了領先的RF收發(fā)器的優(yōu)良性能,業(yè)界標準的增強型8051CPU,系統(tǒng)內可編程閃存,8-KBRAM和許多其它強大的功能。在本無線溫濕度采集系統(tǒng)中,我們采用的是CC2530F256芯片,它結合了德州儀器的業(yè)界領先的黃金單元ZigBee
協(xié)議?!瞆-Stack?〕,提供了一個強大和完整的ZigBee解決方案。溫濕度傳感器SHT11采集到的溫濕度數(shù)據(jù),存儲在CC2530的FLASHROM中,當傳感節(jié)點接收到讀取溫濕度指令時,就通過ZigBee協(xié)議棧將溫濕度數(shù)據(jù)發(fā)送出去。4.2協(xié)調器節(jié)點網(wǎng)絡協(xié)調器主要負責網(wǎng)絡的建立,信息的接收、匯總、處理及控制指令的發(fā)送ZigBee網(wǎng)絡最初由協(xié)調器發(fā)動并建立。協(xié)調器通過主動掃描選擇一個適宜信道,根據(jù)掃描的結果選擇自己的PANID及0x0000作為自己的短地址,其網(wǎng)絡層將通過向MAC層發(fā)送MLME2START.request原語啟動一個新的PAN。協(xié)調器節(jié)點在建成網(wǎng)絡后,開始數(shù)據(jù)收發(fā)工作及各種操作指令的執(zhí)行。當協(xié)調器收到數(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é)議棧運行在一個基于任務調度機制的OSAL操作系統(tǒng)上,OSAL通過觸發(fā)任務的事件來實現(xiàn)任務調度。OSAL中的任務可以通過任API將其添加到系統(tǒng)中,實現(xiàn)多任務機制。系統(tǒng)中傳感器節(jié)點由CC2530內部的MCU(8051)控制,定時向溫濕度傳感器SHT11發(fā)送讀溫度和濕度指令,SHT11完成溫度和濕度轉換后會發(fā)出轉換完成信號,MCU在接收到轉換完成信號后,讀取溫濕度值,并將這些數(shù)據(jù)信號傳送給協(xié)調器。協(xié)調器通過串口RS232和上位機(PC)相連,通過人機交互的方式對整個區(qū)域的進行檢測。為了實現(xiàn)這一功能,必須知道節(jié)點的長短地址對應表,這就需要節(jié)點在參加網(wǎng)絡后發(fā)送自己的長短地址給協(xié)調器,協(xié)調器將長短地址對應列表存儲起來,以便用戶要求采集數(shù)據(jù)時依據(jù)地址表來采集每個傳感器的數(shù)據(jù)。傳感節(jié)點與協(xié)調器節(jié)點的溫濕度采集及通信流程圖如下列圖1所示。圖1傳感器節(jié)點與協(xié)調器節(jié)點的通信流程圖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)以及食品保存等等領域都有很好的應用前景。參考文獻:王小強,歐陽駿,黃寧淋,ZigBee無線傳感網(wǎng)絡設計與實現(xiàn),北京:化學工業(yè)出版社,2023.5.高手瑋,吳燦陽.ZigBee技術實踐教程,北京:北京航空航天大學出版社,2023.6瞿雷,劉盛德,胡咸斌.ZigBee技術及應用,北京:北京航空航天大學出版社,2007.9.呂強,劉玉華,劉志軍,王國勝.基于ZigBee的無線溫濕度檢測終端設計.科學技術與工程,2023.12;8(23).ShahinFarahani.ZigBeeWirelessNetworksandTransceivers,ElsevierLtd,2023Sensirion.SHT11/Datasheet2SHT1x2SHT7x.pdfX.Li,W.David.CombiningtheBestofGlobal2as2ViewandLocal2as2ViewforDataIntegration[C].PODS,2004.ACal,DLembo,etal.ExperimentingDataInte2grationwithDIS@DIS[C].CAiSE2004,LectureNotesinComputerScience,2004,3084,9:51~66.附錄:實物圖及局部代碼1實物圖傳感器節(jié)點實物傳感器節(jié)點外包裝手持讀寫器〔協(xié)調器節(jié)點〕2局部程序代碼2.1終端節(jié)點〔傳感器節(jié)點〕局部代碼staticvoidSerialApp_ProcessZDOMsgs(zdoIncomingMsg_t*inMsg);staticvoidSerialApp_HandleKeys(uint8shift,uint8keys);staticvoidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt);staticvoidSerialApp_Send(void);staticvoidSerialApp_Resp(void);staticvoidSerialApp_CallBack(uint8port,uint8event);voidSerialApp_ProcessHym8563(void);//處理時鐘芯片,得到時間數(shù)據(jù)voidSerialApp_ProcessSht11(void);//處理溫濕度傳感器,得到溫濕度數(shù)據(jù)uint8SerialApp_GetVoltage(void);//獲取電壓數(shù)據(jù)voidSerialApp_MemoryTime(void);//存儲時間數(shù)據(jù)〔一組時間以及第一組溫濕度數(shù)據(jù)〕voidSerialApp_MemoryTemp_Humi(void);//存儲溫濕度數(shù)據(jù)〔第二組到第十七組溫濕度數(shù)據(jù)〕voidSerialApp_LowPower(void);//低功耗處理函數(shù)if(events&SERIALAPP_MEM_TIME_EVT){PktNum++;//存儲時間事件發(fā)生,溫濕度組數(shù)加1SerialApp_ProcessHym8563();SerialApp_ProcessSht11();SerialApp_GetVoltage();SerialApp_MemoryTime();osal_start_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TEMP_HUMI_EVT,10000);//一組時間數(shù)據(jù)和第一組溫濕度數(shù)據(jù)存儲好后,等待10秒,觸發(fā)溫濕度存儲事件,存儲第二到第十七組溫濕度//注意:此處時間最大為65536毫秒,因此為了方便,最多我們可以設置1分鐘的延時,即60000return(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_MemoryTemp_Humi();PktNum++;//存一組溫濕度,其組數(shù)加1osal_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_TaskID,SERIALAPP_MEM_TIME_EVT,100);}return(events^SERIALAPP_MEM_TEMP_HUMI_EVT);}voidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt){uint8buffer[20];uint8Temp_Humi_Read[70];//存放讀取的溫濕度數(shù)據(jù)uint8Time_Read[5];//存放讀取的時間數(shù)據(jù)uint8Data_Package[80];//存放要發(fā)給協(xié)調器的數(shù)據(jù)包uint8delay;uint8i,ReturnValue1,ReturnValue2;switch(pkt->clusterId){//Amessagewithaserialdatablocktobetransmittedontheserialport.caseSERIALAPP_CLUSTERID1://Storetheaddressforsendingandretrying.osal_memcpy(&SerialApp_RxAddr,&(pkt->srcAddr),sizeof(afAddrType_t));if(pkt->cmd.Data[3]==0x00)//讀溫濕度指令{CCLD_NV=0x0400+pkt->cmd.Data[4];//將選擇讀取的數(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))//讀取成功,返回相應數(shù)據(jù){Data_Package[0]=pkt->cmd.Data[0];//前綴Data_Package[1]=pkt->cmd.Data[1];//讀寫器IDData_Package[2]=pkt->cmd.Data[2];//TagIDData_Package[3]=pkt->cmd.Data[3];//功能位,讀溫濕度Data_Package[4]=0xFF;//狀態(tài)位Data_Package[5]=Time_Read[0];//時間Data_Package[6]=Time_Read[1];Data_Package[7]=Time_Read[2];Data_Package[8]=Time_Read[3];Data_Package[9]=Time_Read[4];for(i=10;i<78;i++)//將17組溫濕度的有效數(shù)據(jù)提取出來{Data_Package[i]=Temp_Humi_Read[i-10];//溫濕度if(Data_Package[i]==0xFF)break;//NV條目初始化后全為FF,故當讀到的溫濕度數(shù)據(jù)為FF時,說明實際溫濕度已經(jīng)讀完,該處沒有存溫濕度}SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;//單播發(fā)送SerialApp_TxAddr.addr.shortAddr=0x0000;//協(xié)調器地址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_Package[0]=pkt->cmd.Data[0];//前綴Data_Package[1]=pkt->cmd.Data[1];//讀寫器IDData_Package[2]=pkt->cmd.Data[2];//TagIDData_Package[3]=pkt->cmd.Data[3];//功能位,讀溫濕度Data_Package[4]=0xFE;//狀態(tài)位SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;SerialApp_TxAddr.addr.shortAddr=0x0000;SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;AF_DataRequest(&SerialApp_TxAddr,(endPointDesc_t*)&SerialApp_epDesc,SERIALAPP_CLUSTERID1,5,Data_Package,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);}}if(pkt->cmd.Data[3]==0x01)//設定冷鏈標簽時間,通常設定為當前時間{externuint8seconds,minute,hour,date,week,month,years;minute=pkt->cmd.Data[8];//設定時間,將協(xié)調器發(fā)送過來的年月時分秒分別對應賦給年月時分秒hour=pkt->cmd.Data[7];date=pkt->cmd.Data[6];month=pkt->cmd.Data[5];years=pkt->cmd.Data[4];HYM8653_Init();//時鐘芯片初始化HYM8563_Write_time();//將設定的時間寫入時鐘buffer[0]=pkt->cmd.Data[0];//前綴buffer[1]=pkt->cmd.Data[1];//讀寫器IDbuffer[2]=pkt->cmd.Data[2];//TagIDbuffer[3]=pkt->cmd.Data[3];//功能位,設定時間if(date!=0x00)//通過日期來判定時間是否設定成功,日期等于0,設定失敗,否那么成功{buffer[4]=0xFF;}else{buffer[4]=0xFE;}SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;SerialApp_TxAddr.addr.shortAddr=0x0000;SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;AF_DataRequest(&SerialApp_TxAddr,(endPointDesc_t*)&SerialApp_epDesc,SERIALAPP_CLUSTERID1,5,buffer,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);}if(pkt->cmd.Data[3]==0x02)//讀取冷鏈標簽時間數(shù)據(jù)〔不一定是當前時間〕{uint8Tx_Len;//要發(fā)送的數(shù)據(jù)長度〔字節(jié)數(shù)〕buffer[0]=pkt->cmd.Data[0];//前綴buffer[1]=pkt->cmd.Data[1];//讀寫器IDbuffer[2]=pkt->cmd.Data[2];//TagIDbuffer[3]=pkt->cmd.Data[3];//功能位,讀取時間buffer[5]=TimeBuf[0];//時間數(shù)據(jù)buffer[6]=TimeBuf[1];buffer[7]=TimeBuf[2];buffer[8]=TimeBuf[3];buffer[9]=TimeBuf[4];if(buffer[7]!=0x00)//通過日期來判斷是否讀到時間,因為日期是不可能為0的{buffer[4]=0xFF;Tx_Len=10;}else{buffer[4]=0xFE;Tx_Len=5;}SerialApp_TxAddr.addrMode=(afAddrMode_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.Data[3]==0x03)//復雜指令{//osal_stop_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TIME_EVT);//收到此指令時,停止存儲數(shù)據(jù)//osal_stop_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TEMP_HUMI_EVT);uint8DataBuf[80];uint8T_H[80];uint8i=0;osal_nv_read(CCLD_NV,0,73,DataBuf);//讀取最后一個數(shù)據(jù)包的數(shù)據(jù)for(i=0;i<73;i++){T_H[i]=DataBuf[i];if(T_H[i]==0xFF)break;//獲取最后一個數(shù)據(jù)包的有效數(shù)據(jù)}buffer[0]=pkt->cmd.Data[0];buffer[1]=pkt->cmd.Data[1];buffer[2]=pkt->cmd.Data[2];buffer[3]=pkt->cmd.Data[3];buffer[4]=0xFF;buffer[5]=SerialApp_GetVoltage();//電壓buffer[6]=Total_Pkt_Num;//總的數(shù)據(jù)包數(shù)buffer[7]=(i-5)/4;//最后一個數(shù)據(jù)包的溫濕度數(shù)據(jù)組數(shù)buffer[8]=pkt->rssi;//RSSI值SerialApp_TxAddr.addrMode=(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é)調器節(jié)點局部代碼voidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt){uint8BUF[100];uint8Frame_Buf[100];uint8i;uint8delay;switch(pkt->clusterId){//Amessagewithaserialdatablocktobetransmittedontheserialport.caseSERIALAPP_CLUSTERID1://Storetheaddressforsendingandretrying.osal_memcpy(&SerialApp_RxAddr,&(pkt->srcAddr),sizeof(afAddrType_t));osal_memcpy(BUF,pkt->cmd.Data,pkt->cmd.DataLength);if(BUF[3]==0x00)//讀溫濕度{if(BUF[4]==0xFF)//讀取成功{Frame_Buf[0]=pkt->cmd.DataLength+2;//總的數(shù)據(jù)長度Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;//冷鏈標簽的地址高8位Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;//冷鏈標簽的地址低8位Frame_Buf[3]=BUF[2];//TagIDFrame_Buf[4]=BUF[3];//功能位Frame_Buf[5]=BUF[4];//狀態(tài)位Frame_Buf[6]=SerialApp_TxBuf[4];//數(shù)據(jù)包的序號for(i=7;i<pkt->cmd.DataLength+2;i++)//溫濕度數(shù)據(jù){Frame_Buf[i]=BUF[i-2];}HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+2);}if(BUF[4]==0xFE){Frame_Buf[0]=pkt->cmd.DataLength+1;Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;Frame_Buf[3]=BUF[2];Frame_Buf[4]=BUF[3];Frame_Buf[5]=BUF[4];HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+1);}}if(BUF[3]==0x01)//設置冷鏈標簽時間{Frame_Buf[0]=pkt->cmd.DataLength+1;Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;for(i=3;i<pkt->cmd.DataLength+1;i++){Frame_Buf[i]=BUF[i-1];}HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+1);}if(BUF[3]==0x02)//讀冷鏈標簽的時間〔不一定是當前時間〕{Frame_Buf[0]=pkt->cmd.DataLength+1;//總的數(shù)據(jù)長度Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;for(i=3;i<pkt->cmd.DataLength+1;i++){Frame_Buf[i]=BUF[i-1];}HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+1);}if(BUF[3]==0x03)//復雜指令{Frame_Buf[0]=pkt->cmd.DataLength+1;Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;for(i=3;i<pkt->cmd.DataLength+1;i++){Frame_Buf[i]=BUF[i-1];}HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+1);}if(BUF[3]==0x04)//檢查協(xié)調器的工作狀態(tài){Frame_Buf[0]=pkt->cmd.DataLength+2;Frame_Buf[1]=SerialApp_RxAddr.addr.shortAddr>>8;Frame_Buf[2]=SerialApp_RxAddr.addr.shortAddr;Frame_Buf[3]=SerialApp_TxBuf[2];Frame_Buf[4]=SerialApp_TxBuf[3];Frame_Buf[5]=0xFF;HalUARTWrite(SERIAL_APP_PORT,Frame_Buf,pkt->cmd.DataLength+2);}if(BUF[3]==0x05)//設置發(fā)送功率{//uint8T[3];uint8Return_Value;void*Tx_Value;uint8TransmissionPower;TransmissionPower=SerialApp_TxBuf[4];Tx_Value=&TransmissionPower;Return_Value=MAC_MlmeSetReq(MAC_PHY_TRANSMIT_POWER_SIGNED,Tx_Value);//T[0]=macPhyTxPower;//HalUARTWrite(SERIAL_APP_PORT,T,1);Frame_Buf[0]=pkt->cmd.DataLength+2;Frame_Buf[1]=SerialApp_RxAddr.addr.s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年藝術品私人展覽策劃與運營合同3篇
- 2025年度個人門面房出租合同(含家具贈送及經(jīng)營指導服務協(xié)議)3篇
- 2025年旅游服務售后保障及投訴處理協(xié)議3篇
- 二零二五年度集資房購房合同解除及終止協(xié)議3篇
- 2025年度個人股權激勵方案設計與轉讓合同3篇
- 2025年校車租賃與駕駛員健康管理合同3篇
- 陽臺土豆打頂施工方案
- 2025年度個人教育培訓貸款合同及課程安排4篇
- 鉆井工程課程設計英文
- 2024年學校人事檔案管理制度
- 割接方案的要點、難點及采取的相應措施
- 2025年副護士長競聘演講稿(3篇)
- 2025至2031年中國臺式燃氣灶行業(yè)投資前景及策略咨詢研究報告
- 原發(fā)性腎病綜合征護理
- (一模)株洲市2025屆高三教學質量統(tǒng)一檢測 英語試卷
- 第三章第一節(jié)《多變的天氣》說課稿2023-2024學年人教版地理七年級上冊
- 2025年中國電科集團春季招聘高頻重點提升(共500題)附帶答案詳解
- 2025年度建筑施工現(xiàn)場安全管理合同2篇
- 建筑垃圾回收利用標準方案
- 2024年考研英語一閱讀理解80篇解析
- 樣板間合作協(xié)議
評論
0/150
提交評論