版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于ZigBee的無線溫濕度采集系統(tǒng) 17基于ZigBee的無線溫濕度采集系統(tǒng)摘要:針對傳統(tǒng)溫濕度檢測存在的問題,結合無線傳感器網絡技術,本文提出一種基于ZigBee 技術的無線溫濕度采集系統(tǒng)的設計方法。設計采用CC2530 射頻芯片及SHT11 數字溫濕度傳感器,在ZigBee 協議棧的基礎上進行應用開發(fā)。闡述了ZigBee技術,系統(tǒng)組成及工作原理,系統(tǒng)軟硬件設計等內容,并通過實驗測試表明,該無線溫濕度采集系統(tǒng)能夠穩(wěn)定可靠的運行,并且具有組網簡單、功耗低,成本低等優(yōu)點,具有十分好的實用價值和經濟效益。關鍵字:ZigBee,溫濕度,CC2530,協議棧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 引言在冷鏈物流、農業(yè)生產、倉庫管理以及食品保存等領域,溫度和濕度控制顯得十分重要,但傳統(tǒng)的方法采用測試器材來測量溫度和濕度,通過人工進行檢測,這種人工測試方法費時費力、效率低,而且測試的溫度及濕度的誤差大,隨機性大。因此,開發(fā)一種全新的溫濕度采集系統(tǒng)就顯得十分迫切和重要了。本文設計了一種采用無線傳感器網絡技術進行溫度和濕度的采集系統(tǒng)。無線傳感器網絡不需要較高的傳輸帶寬,但需要較低的傳輸時延和較低的功率消耗。ZigBee 是一種新興的短距離、低功耗、低數據速率、低成本、低復雜度的無線網絡技術,它的出現正好滿足了這個要求。2 ZigBee技術ZigBee是一種標準,該標準定義了短距離
6、、低數據傳輸速率無線通信所需要的一系列通信協議,它擁有一套完整的協議層次結構,由IEEE802. 15. 4 和ZigBee 聯盟共同制定完成。其工作頻段分別是868MHz(歐洲)、915MHz(北美)、2. 4GHz(全球)3個頻段,可以應用于不同的場合,諸如家庭自動化網絡、工業(yè)控制網絡、交互式玩具、遠程檢測等。完整的ZigBee 協議棧包括物理層(PHY) 、媒體訪問控制層(MAC) 、網絡層(NWK) 和應用層(APL)。其中,ZigBee 的應用層由應用支持子層(APS) 、ZigBee 設備對象(ZDO) 和制造商定義的應用對象組成。在ZigBee 協議棧中,每一層通過使用下層提供的
7、服務完成自己的功能,同時對上層提供服務,網絡中的通信在對等的層次上進行。ZigBee 網絡含三種類型的節(jié)點,即協調器、路由器和終端設備,其中協調器和路由器均為全功能設備(FFD),而終端設備選用精簡功能設備(RFD) 。一個ZigBee 網絡有且僅有一個協調器,該設備負責啟動網絡,配置網絡成員地址,維護網絡,維護節(jié)點的綁定關系表等,需要最多的存儲空間和計算能力,它可以看作是一個PAN 的網關節(jié)點。路由器主要實現擴展網絡及路由消息的功能,終端設備則負責與實際的監(jiān)控對象相連,實現具體功能的單元。無線傳感器網絡中可以根據不同的需要組成星型、簇型網和網狀型三種不同的網絡拓撲結構。星狀網絡由一個PAN
8、協調器和多個終端設備組成。只存在PAN 協調器與終端設備的通信,終端設備間的通信都需通過PAN 協調器的轉發(fā);樹狀網絡由一個協調器和一個或多個星狀結構連接而成,設備除了能與自己的父節(jié)點或子節(jié)點進行點對點直接通訊外,其他只能通過樹狀路由完成消息傳輸;網狀網絡是樹狀網絡基礎上實現的,與樹狀網絡不同的是,它允許網絡中所有具有路由功能的節(jié)點直接互連,由路由器中的路由表配合實現消息的網狀路由。一個ZigBee 網絡最多可含有65000 多個子節(jié)點,通過無線網絡數據從一個節(jié)點傳送到另一個節(jié)點,最終傳送到控制中心。另外,它可以與其他的無線網絡如GPRS 和CDMA 等兼容,也可以接入有線網絡如Interne
9、t 、Ethernet ,實現遠程監(jiān)控。3 系統(tǒng)結構和原理基于ZigBee的無線溫濕度采集系統(tǒng)采用ZigBee星型拓撲組網方式,多個具有簡單功能的設備和傳感器構成傳感器節(jié)點(終端設備),一臺具有完整功能的設備作為中心節(jié)點(協調器節(jié)點),中心節(jié)點與中心控制計算機(PC機)相連,中心控制計算機通過上位機軟件可以實現對整個系統(tǒng)節(jié)點的監(jiān)測和控制。整個系統(tǒng)工作時,傳感器節(jié)點負責現場溫濕度數據的采集,將采集到數據一定的數據格式存儲起來,當上位機需要讀取溫濕度時,就發(fā)送相應指令給協調器,協調器將指令翻譯后發(fā)送給傳感器節(jié)點,傳感器節(jié)點接收到指令,就將溫濕度數據無線發(fā)送給協調器,協調器通過串口RS232 將數據
10、發(fā)送給PC 機,PC機就可以對溫濕度數據進行顯示、分析和處理,從而實現了溫濕度全程的無線采集和監(jiān)測工作。此外,整個溫濕度采集系統(tǒng)還可以實現協調器自檢、發(fā)送功率設置、終端節(jié)點地址設定、時間讀取和設置、低功耗設置、拍照等其它功能。4 系統(tǒng)硬件設計4.1 傳感器節(jié)點無線傳感器節(jié)點由數據采集、數據處理、無線通信和能量供應四個模塊組成。數據采集模塊由數字傳感器或者模擬傳感器加A/ D 轉換器組成,負責區(qū)域內的溫濕度信息采集和數據轉換;數據處理模塊由微控制器組成,負責控制整個傳感器節(jié)點的操作和數據存儲;無線通信模塊由無線收發(fā)器組成,負責與其他傳感器節(jié)點進行通信,能量供應模塊為系統(tǒng)其他的三個部分提供能量。傳
11、感器節(jié)點由瑞溫濕度傳感器SHT11 檢測得到溫濕度信息,并轉化為數字信號,傳輸至CC2530,由CC2530負責對信號進行處理發(fā)送。節(jié)點電源部分使用兩節(jié)五號電池為整個節(jié)點供電。為了使系統(tǒng)工作時間持續(xù)長,節(jié)點通常在閑置時快速進入休眠模式,其外設模塊進入休眠狀態(tài),或者電源管理部分不對這些外設模塊供電。SHT11是瑞士Sensirion 公司推出的基于CMOSensTM 技術的新型溫濕度傳感器。SHT11將溫濕度傳感器、信號放大調理、A/ D 轉換、I2C 總線接口全部集成于一個芯片上,該芯片包括一個電容性聚合體濕度敏感元件和一個用能隙材料制成的溫度敏感元件。這兩個敏感元件分別將濕度和溫度轉換成電信
12、號,該電信號首先進入微弱信號放大器進行放大器;然后進入一個14 位的A/ D 轉換器;最后經過二線串行數字接口輸出數字信號。SHT11 通過DA TA 數據總線輸出的是相對濕度,需要進行線性補償和溫度補償后才能得到較為準確的濕度值。CC2530芯片是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 應用的一個真正的片上系統(tǒng)(SoC)解決方案。它能夠以非常低的總的材料成本建立強大的網絡節(jié)點。CC2530 結合了領先的RF 收發(fā)器的優(yōu)良性能,業(yè)界標準的增強型8051 CPU,系統(tǒng)內可編程閃存,8-KB RAM 和許多其它強大的功能。在本無線溫濕度采集系統(tǒng)中,我們
13、采用的是CC2530F256芯片,它結合了德州儀器的業(yè)界領先的黃金單元ZigBee 協議棧(Z-Stack),提供了一個強大和完整的ZigBee 解決方案。溫濕度傳感器SHT11采集到的溫濕度數據,存儲在CC2530的FLASH ROM中,當傳感節(jié)點接收到讀取溫濕度指令時,就通過ZigBee協議棧將溫濕度數據發(fā)送出去。4.2 協調器節(jié)點網絡協調器主要負責網絡的建立,信息的接收、匯總、處理及控制指令的發(fā)送ZigBee 網絡最初由協調器發(fā)動并建立。協調器通過主動掃描選擇一個合適信道, 根據掃描的結果選擇自己的PANID 及0x0000 作為自己的短地址,其網絡層將通過向MAC 層發(fā)送ML
14、ME2START. request原語啟動一個新的PAN 。協調器節(jié)點在建成網絡后,開始數據收發(fā)工作及各種操作指令的執(zhí)行。當協調器收到數據時,根據數據的串ID 來判斷傳送的數據是地址信息還是傳感器采集的數據,根據不同的數據類型解析數據包提供給PC 機顯示和處理。5 系統(tǒng)軟件設計本系統(tǒng)的軟件設計是基于Ti 公司推出的跟CC2530 芯片配套的Z2STACK 協議棧和IAR 集成開發(fā)環(huán)境進行設計的。ZSTACK 協議棧運行在一個基于任務調度機制的OSAL 操作系統(tǒng)上,OSAL 通過觸發(fā)任務的事件來實現任務調度。OSAL 中的任務可以通過任API 將其添加到系統(tǒng)中,實現多任務機制。系統(tǒng)中傳感器節(jié)點由
15、CC2530 內部的MCU(8051) 控制,定時向溫濕度傳感器SHT11 發(fā)送讀溫度和濕度指令,SHT11完成溫度和濕度轉換后會發(fā)出轉換完成信號,MCU 在接收到轉換完成信號后,讀取溫濕度值,并將這些數據信號傳送給協調器。協調器通過串口RS232 和上位機( PC) 相連,通過人機交互的方式對整個區(qū)域的進行檢測。為了實現這一功能,必須知道節(jié)點的長短地址對應表,這就需要節(jié)點在加入網絡后發(fā)送自己的長短地址給協調器,協調器將長短地址對應列表存儲起來,以便用戶要求采集數據時依據地址表來采集每個傳感器的數據。傳感節(jié)點與協調器節(jié)點的溫濕度采集及通信流程圖如下圖1所示。圖1 傳感器節(jié)點與協調器節(jié)點的通信流
16、程圖6 系統(tǒng)測試驗證本無線溫濕度采集系統(tǒng)設計完成后,進行了一系列的測試工作,包括通信距離,穿墻能力,系統(tǒng)穩(wěn)定性以及數據準確性等。經過測試,系統(tǒng)通信距離200米左右(與發(fā)送功率有關),可以成功穿越一堵墻通信(與網絡拓撲形式有關),并可以穩(wěn)定工作,預計傳感器節(jié)點工作壽命可達1年。7 結束語本文設計的基于ZigBee技術的CC2530無線溫濕度采集系統(tǒng),其外圍設備簡單、功耗低、傳輸無線化,而且精度高,可靠性好,提供了良好的人機交互界面,方便控制使用,在冷鏈物流,農業(yè)生產以及食品保存等等領域都有很好的應用前景。參考文獻:1 王小強,歐陽駿,黃寧淋,ZigBee無線傳感網絡設計與實現,北京:化學工業(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é)點外包裝手持讀寫器(協調器節(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); /處理時鐘芯片,得到時間數據void SerialApp_ProcessSht11(void); /處理溫濕度傳感器,得到溫濕度數據uint8 SerialApp_GetVoltage(void); /獲取電壓數據void SerialApp_MemoryTime(void); /存儲時間數據(一組時間以及第一組溫濕度數據)void SerialApp_MemoryTemp_Humi(void); /存儲溫濕度數據(第二組到第十七組溫濕度數據)void SerialApp_LowP
21、ower(void); /低功耗處理函數if ( events & SERIALAPP_MEM_TIME_EVT ) PktNum+; /存儲時間事件發(fā)生,溫濕度組數加1 SerialApp_ProcessHym8563(); SerialApp_ProcessSht11(); SerialApp_GetVoltage(); SerialApp_MemoryTime(); osal_start_timerEx( SerialApp_TaskID, SERIALAPP_MEM_TEMP_HUMI_EVT, 10000 ); /一組時間數據和第一組溫濕度數據存儲好后,等待10秒,觸發(fā)溫濕度
22、存儲事件,存儲第二到第十七組溫濕度 /注意:此處時間最大為65536毫秒,因此為了方便,最多我們可以設置1分鐘的延時,即60000 return ( events SERIALAPP_MEM_TIME_EVT ); if ( events & SERIALAPP_MEM_TEMP_HUMI_EVT ) if(PktNum > 1 && PktNum <= 17) /溫濕度數據的組數小于17時,依次每10秒存一組溫濕度數據 /SerialApp_ProcessHym8563(); SerialApp_ProcessSht11(); SerialApp_Memo
23、ryTemp_Humi(); PktNum+; /存一組溫濕度,其組數加1 osal_start_timerEx( SerialApp_TaskID, SERIALAPP_MEM_TEMP_HUMI_EVT, 10000 ); /每10秒存儲一組,同上最長延時為65536毫秒,為方便,可最多設置為一分鐘 if(PktNum = 18) /當存滿17組溫濕度數據時,NV條目自動加1,溫濕度數據組數重新歸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 ; /存放讀取的溫濕度數據 uint8 Time_Read5; /存放讀取的時間數據 uint8 Data_Package80; /存放要發(fā)給協調器的數據包 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; /將選擇讀取的數據包與NV條目對應起來 ReturnValue1 = osal_nv_read(CCLD_NV,0,5,Time_Read); /讀時間數據 ReturnValue2 = osal_nv_read(CCLD_NV,5,68,Temp_Humi_Read); /讀17組溫濕度數據 if(ReturnValue1 = ZSUCCESS && ReturnValue2 = ZSUCCESS && osal_nv_item_len(CCLD_NV) )/讀取成功,返回相應
27、數據 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組溫濕度的有效數據提取出來 Data_Packagei = Temp_Humi_Readi-10; /溫濕度 if(Data_Packagei = 0xFF)break; /NV條目初始化后全為FF,故當讀到的溫濕度數據為FF時,說明實際溫濕度已經讀完,該處沒有存溫濕度 SerialApp_TxAddr.addrMode = (afAddrMode_t)Addr16Bit; /單播發(fā)送 SerialApp_TxAddr.addr.shortAddr =
29、 0x0000; /協調器地址 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 /讀取失敗,則返回下面數據 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; /設定時間,將協調
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) /讀取冷鏈標簽時間數據(不一定是當前時間) uint8 Tx_Len; /要發(fā)送的數據長度(字節(jié)數) buffer0 = pkt->cmd.Data0; /前綴 buffer1 = pkt->cmd.Data1; /讀寫器ID buffer2 = pkt->cmd.Data2; /Ta
35、gID buffer3 = pkt->cmd.Data3; /功能位,讀取時間 buffer5 = TimeBuf0; /時間數據 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); /收到此指令時,停止存儲數據 /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); /讀取最后一個數據包的數據 for(i=0;i<73;i+) T_Hi = DataBufi; if(T_Hi = 0xFF)break; /獲取最后
38、一個數據包的有效數據 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; /總的數據包數 buffer7 = (i-5)/4; /最后一個數據包的溫濕度數據組數 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 協調器節(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 ; /總的數據長度 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; /數據包的序號 for(i=7;i<pkt->cmd.DataLength + 2 ;i+) /溫濕度數據 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 ; /總的數據長度 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) /檢查協調器的工作狀態(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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南生物機電職業(yè)技術學院《酒店營銷實務》2023-2024學年第一學期期末試卷
- 【物理】《同一直線上二力的合成》(教學設計)-2024-2025學年人教版(2024)初中物理八年級下冊
- 高考物理總復習《計算題》專項測試卷含答案
- 重慶醫(yī)藥高等??茖W?!毒G色設計》2023-2024學年第一學期期末試卷
- 重慶公共運輸職業(yè)學院《算法分析與設計A》2023-2024學年第一學期期末試卷
- 鄭州電子商務職業(yè)學院《人文地理學實踐》2023-2024學年第一學期期末試卷
- 浙江科技學院《工程地質與地基基礎》2023-2024學年第一學期期末試卷
- 中國青年政治學院《第二外語日語》2023-2024學年第一學期期末試卷
- 鄭州汽車工程職業(yè)學院《走近微電子》2023-2024學年第一學期期末試卷
- 小學“三定一聘”工作實施方案
- 臨時用電拆除方案
- 詩經研究課程教學大綱
- 垂體瘤診療規(guī)范內科學診療規(guī)范診療指南2023版
- 三年級道德與法治教學工作總結
- 托卡馬克等離子體約束
- 各級各類護理人員崗位職責
- 狂犬病與破傷風的同意告知書
- FZ/T 81013-2016寵物狗服裝
- PPVT幼兒語言能力測試題附答案
- JB∕T 14089-2020 袋式除塵器 濾袋運行維護技術規(guī)范
- 陜西省寶雞市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
評論
0/150
提交評論