11 ZigBee協議棧實驗:廣播與單播實驗_第1頁
11 ZigBee協議棧實驗:廣播與單播實驗_第2頁
11 ZigBee協議棧實驗:廣播與單播實驗_第3頁
11 ZigBee協議棧實驗:廣播與單播實驗_第4頁
11 ZigBee協議棧實驗:廣播與單播實驗_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

ZigBee協議棧實驗:廣播與單播實驗主講:張老師一、實驗原理二、重點代碼解析三、實驗結果驗證標題四、數據接收一、實驗原理——基礎知識儲備Zigbee網絡中進行數據通信主要有三種類型:廣播、單播、組播。一、實驗原理——通信方式的協議棧實現參數1:afAddrType_t*dstAddr該參數包含了目的節點的網絡地址、端點號及數據傳送的模式,如單播、廣播或多播等。typedefstruct

{

Union

{

uint16shortAddr;

//用于標識該節點網絡地址的變量

}addr;afAddrMode_taddrMode;

//用于指定數據傳送模式,單播、多播還是廣播

byteendPoint;

//端點號

}afAddrType_t;

//

其定義在AF.h中afAddrType_t是個結構體如下:一、實驗原理——通信方式的協議棧實現

ZigBee協議棧將數據通信過程高度抽象,使用一個函數完成數據的發送,以不同的參數來選擇數據發送方式(廣播、組播還是單播)。afStatus_tAF_DataRequest(afAddrType_t*dstAddr,//目的地址指針endPointDesc_t*srcEP,

//發送節點的端點描述符指針uint16cID,

//ClusID簇ID號uint16len,

//發送數據的長度uint8*buf,

//指向存放發送數據的緩沖區指針uint8*transID,//傳輸序列號,該序列號隨著信息的發送而增加

uint8options,//發送選項uint8radius

//最大傳輸半徑(發送的跳數)

)ZigBee協議棧中數據發送函數原型如下:一、實驗原理——通信方式的協議棧實現

上述結構體中的afAddrMode_taddrMode就是用于指定數據傳送模式,是個枚舉類型,可以設置為以下幾個值。typedefenum{

afAddrNotPresent=AddrNotPresent,

//表示通過綁定關系指定目的地址

afAddr16Bit=Addr16Bit,

//單播發送

afAddrGroup=AddrGroup,

//組播

afAddrBroadcast=AddrBroadcast//廣播}afAddrMode_t;Enum{

AddrNotPresent=0,

AddrGroup=1,

Addr16Bit=2,

Addr64Bit=3,

AddrBroadcast=15};一、實驗原理——單播注意,其實單播有兩種方式一種是綁定傳輸,一種是目標地址的單播傳輸。my_DstAddr.addrMode=(afAddrMode_t)AddrNotPresent,一種是直接指定目標地址的單播傳輸,比如協調器就是0x0000。①單播綁定傳輸my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;

//單播發送my_DstAddr.endPoint=GENERICAPP_ENDPOINT;

//目的端口號my_DstAddr.addr.shortAddr=0;

//按照綁定的方式進行單播,不需要指定目標地址,需要先將兩個設備綁定,將兩個設備綁定后即可通信②直接指定目標地址的單播傳輸:是標準尋址模式,它將數據包發送給一個已經知道網絡地址的網絡設備,將afAddrMode設置為Addr16Bit并且在數據包中攜帶目標設備地址。my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;

//單播發送my_DstAddr.endPoint=GENERICAPP_ENDPOINT;

//目的端口號my_DstAddr.addr.shortAddr=0x0000;

//目標設備網絡地址一、實驗原理——廣播當應用程序需要將數據包發送給網絡的每一個設備時,使用這種模式。地址模式設置為AddrBroadcast。目標地址my_DstAddr.addr.shortAddr可以根據需求設置為下面廣播地址的一種。NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——數據包將被傳送到網絡上的所有設備,包括睡眠中的設備。對于睡眠中的設備,數據包將被保留在其父親節點直到查詢到它,或者消息超時(NWK_INDIRECT_MSG_TIMEOUT在f8wConifg.cfg中)。NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——數據包將被傳送到網絡上的所有在空閑時打開接收的設備(RXONWHENIDLE),也就是說,除了睡眠中的所有設備。NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——數據包發送給所有的路由器,包括協調器。my_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;//廣播發送my_DstAddr.endPoint=GENERICAPP_ENDPOINT;

//目的端口號my_DstAddr.addr.shortAddr=0xFFFF;

//協調器網絡地址一、實驗原理——實驗效果及原理圖

實驗效果預設為:協調器周期性以廣播的形式向終端節點發送數據,終端節點收到數據后,使開發板上的LED狀態翻轉,同時向協調器發送字符串“EndDevicereceived!”,協調器收到終端節點發回的數據后,通過串口輸出到PC機,用戶可以通過串口調試助手查看該信息。一、實驗原理——協調器工作流程協調器周期性以廣播的形式向終端節點發送數據,如何實現周期性地發送數據呢?這里又需要用定時函數osal_start-timcrEx0,定時5s,定時時間達到后,向終端節點發送數據,發送完數據再定時5s,這樣就實現了周期性地發送數據。一、實驗原理——終端節點工作流程終端節點上電后,會進行硬件電路的初始化,然后搜索是否有ZigBee無線網絡,如果有ZigBee無線網絡再自動加入(這是最簡單的情況,當然可以控制節點加入網絡時要符合編譯時確定的網絡號等),然后判斷是否收到協調器發送的數據,若收到,則將LED狀態取反,然后發送數據到協調器,否則繼續等待接收數據。二、重點代碼解析--協調器程序設計if(events&SEND_TO_ALL_EVENT)//數據發送事件處理{GenericApp_SendTheMessage();osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);return(events^SEND_TO_ALL_EVENT);}

當網絡狀態發生變化時,啟動定時器定時5S,定時時間到達后,設置SEND_TO_ALL_EVENT事件,在SEND_TO_ALL_EVENT事件處理函數中,調用發送數據函數GenericApp_SendTheMessage(),發送完數據后,再次啟動定時器,定時5S……二、重點代碼解析--協調器程序設計if(events&SEND_TO_ALL_EVENT)//數據發送事件處理{GenericApp_SendTheMessage();osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);return(events^SEND_TO_ALL_EVENT);}

當網絡狀態發生變化時,啟動定時器定時5S,定時時間到達后,設置SEND_TO_ALL_EVENT事件,在SEND_TO_ALL_EVENT事件處理函數中,調用發送數據函數GenericApp_SendTheMessage(),發送完數據后,再次啟動定時器,定時5S……二、重點代碼解析--協調器程序設計voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){unsignedcharbuf[20];unsignedcharbuffer[2]={0x0A,0x0D};switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(buf,pkt->cmd.Data,20);HalUARTWrite(0,buf,20);HalUARTWrite(0,buffer,2);break;}}當收到終端節點發回的數據后,讀取該數據,然后發送到串口。二、重點代碼解析--協調器程序設計voidGenericApp_SendTheMessage(void){unsignedchar*theMessageData="Coordinatorsend!";afAddrType_tmy_DstAddr;my_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;my_DstAddr.endPoint=GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr=0xFFFF;AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,osal_strlen(theMessageData)+1,theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);}使用廣播方式發送數據,注意,此時發送模式是廣播,如下代碼所示:my_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;相應的網絡地址可以設為0xFFFF,如下代碼所示:my_DstAddr.addr.shortAddr=0xFFFF;二、重點代碼解析—終端節點程序設計voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){char*recvbuf;unsignedcharbuffer[2]={0x0A,0x0D};switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(recvbuf,pkt->cmd.Data,osal_strlen("Coordinatorsend!")+1);if(osal_memcmp(recvbuf,"Coordinatorsend!",osal_strlen("Coordinatorsend!")+1)){HalUARTWrite(0,recvbuf,18);

HalUARTWrite(0,buffer,2);GenericApp_SendTheMessage();}}}上述代碼是對接收到的數據進行處理,當正確接收到協調器發送的字符串"Coordinatorsend!"時,調用函數GenericApp_SendTheMessage()發送返回消息。二、重點代碼解析—終端節點程序設計voidGenericApp_SendTheMessage(void){unsignedchar*theMessageData="EndDevicereceived!";afAddrType_tmy_DstAddr;my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;my_DstAddr.endPoint=GENERICAPP_ENDPOINT;my_Dst

溫馨提示

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

評論

0/150

提交評論