




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
測誤碼率實驗一、實驗原理二、重點代碼解析三、數據發送標題四、數據接收一、實驗原理——功能描述
實驗效果:兩塊WeBee模塊通信,一個模塊作發射,另外一個模塊接收,接收模塊通過串口不在PC機上顯示當前的誤包率、RSSI值和接收到數據包的個數。
實驗目的::PER(誤包率檢測)實驗是BasicRF的第二個實驗,和無線點燈一樣是沒有使用協議棧的點對點通訊。通過無線點燈大家應該對zigbee的發射和接收有個感性的認識,本次實驗講解不會像無線點燈一樣講得那么詳細,因為接收發射的過程基本上是一樣的,但也希望初學者能自己認真學習一下這個實驗,相信會對無線傳輸會有一個更清晰的認識。一、實驗原理——實驗現象由于距離比較近,所以掉包不明顯的,有興趣的可以把發送節點拿到較遠的地方,然后觀察掉包率。或者先打開發送模塊,打開接收模塊來測試掉包,會顯示出掉包情況。二、重點代碼解析1.首先還是要先找到main.c
main.c做了哪些事情:①一大堆的初始化(都是必須的);②
設置信道,發射和接收模塊的信道必須一致;③選擇為發射或者接收模式。發射函數defineMODE_SEND則進入appTransmitter();接收函數沒有
defineMODE_SEND則進入appReceiver()二、重點代碼解析2.為了獲取傳輸的性能參數,接收器中包含了如下幾個數據(包含在rxStats變量中,其類型為perRxStats_t)參數含義rxStats.expectedSeqNum預計下一個數據包的序號,其值等于“成功接收的數據包”+“丟失的數據包”+1rxStats.rssiSum上32個數據包的RSSI值的和rxStats.rcvdPkts每次PER測試中,成功接收到的數據包的個數rxStats.lostPkts丟失數據包的個數三、數據發送appTransmitter函數完成的任務:①初始化BasicRF②設置發射功率③設定測試的數據包量④配置定時器和IO⑤初始化數據包載荷⑥進行循環函數,不斷地發送數據包,每發送完一次,下一個數據包的序列號自加1再發送;四、數據接收
接收函數appReceiver的作用:①串口在此初始化②初始化BasicRF③不斷地接收數據包,并檢查數據包序號是否為期望值,作出相應處理④串口打印出,接收包的個數\誤包率及上32個數據包的RSSI值的平均值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_DstAddr.addr.shortAddr=0x0000;AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,osal_strlen(theMessageData)+1,theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);HalLedSet(HAL_LED_2,HAL_LED_MODE_TOGGLE);}向協調器發送單播數據,注意加粗字體部分的代碼實現的是單播通信。注意:HalLedSet()函數可以設置LED的狀態進行翻轉。三、實驗結果驗證--終端節點的串口發送設置好串口調試助手,打開協調器電源,然后打開兩個終端節點的電源,此時可以看到如下實驗現象:①每隔5S,終端節點的串口顯示一個字符串"Coordinatorsend!"②同時終端節點的LED每隔5S點亮一次。三、實驗結果驗證--協調器節點的串口發送設置好串口調試租手,打開協調器電源,然后打開兩個終端節點的電源,此時可以看到如下實驗現象:①每隔5S,串口會顯示三個字符串"EndDevicereceived!";②同時終端節點的LED每隔5S點亮一次。ZigBee協議棧實驗:組播實驗主講:張老師一、實驗原理二、重點代碼解析三、實驗結果驗證標題四、數據接收一、實驗原理--加入組的流程
當應用程序需要將數據包發送給網絡上的一組設備時,使用組播模式。地址模式設置為afAddrGroup,并且addr.shortAddr設置為組ID。使用組播的方式需要加入特定的組。加入組的流程如下:①首先聲明一個組對象aps_Group_tSampleApp_Groupaps_Group_t結構體的定義:typedefstruct{
uint16ID;
//Uniquetothistable
uint8
name[APS_GROUP_NAME_LEN];//#defineAPS_GROUP_NAME_LEN
16}aps_Group_t;每個組有個特定的ID跟組名,組名存放在name數組中,name數組的第一個元素是組名的長度,第二個元素開始存放組名字符串。一、實驗原理--加入組的流程
②對SampleApp_Group賦值//Bydefault,alldevicesstartoutinGroup1SampleApp_Group.ID=0x0003;
//初始化組IDosal_memcpy(SampleApp_G,"Group3",7);
//將組名的長度寫入name數組的第一個元素位置處。
③在本任務里將端點加入到組中aps_AddGroup(SAMPLEAPP_ENDPOINT,&SampleApp_Group);一、實驗原理--加入組的流程
④設定通信的目標地址及模式//Setupfortheflashcommand'sdestinationaddress-Group1SampleApp_Flash_DstAddr.addrMode=(afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr=SampleApp_Group.ID;通信時候,發送設備的輸出cluster設定為接收設備的輸入cluster,另外profileID設定相同,即可通信。一、實驗原理--加入組的流程⑤若要把一個設備加入到組中的端點從組中移除,調用aps_RemoveGroup:aps_Group_t*grp;grp=aps_FindGroup(SAMPLEAPP_ENDPOINT,SAMPLEAPP_FLASH_GROUP);if(grp){
//Removefromthegroupaps_RemoveGroup(SAMPLEAPP_ENDPOINT,SAMPLEAPP_FLASH_GROUP);}注意組可以用來關聯間接尋址。再綁定表中找到的目標地址可能是是單點傳送或者是一個組地址。另外,廣播發送可以看做是一個組尋址的特例。一、實驗原理——實驗效果及原理圖協調器周期性的以組播的形式向路由器發送數據路由器收到數據后,使開發板上的LED狀態翻轉,同時向協調器發送字符串“Routerreceived!",協調器收到路由器發回的數據后,通過串口輸出到PC機,用戶可以通過串口調試助手查看該信息。在路由器編程時,將兩個路由器和協調器加到一個組中,剩余一個路由器不加入該組,觀察實驗現象。一、實驗原理——工作流程組播通信實驗協調器程序流程圖組播通信實驗路由器程序流程圖二、重點代碼解析--協調器程序設計#include"aps_groups.h"http://使用加入組函數aps_AddGroup()函數,需要包含頭文件aps_Group_tGenericApp_Group;aps_Group_tGenericApp_Group;voidGenericApp_Init(bytetask_id){。。。GenericApp_Group.ID=0x0001;GenericApp_G[0]=6;osal_memcpy(&(GenericApp_G[1]),"Group1",6);}以上代碼是任務初始化代碼,主要完成端口初始化和組號的初始化。二、重點代碼解析--協調器程序設計UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){。。。caseZDO_STATE_CHANGE:GenericApp_Nwkstate=(devStates_t)(MSGpkt->hdr.status);if(GenericApp_Nwkstate==DEV_ZB_COORD)//建立網絡后,加入組
{aps_AddGroup(GENERICAPP_ENDPOINT,&GenericApp_Group);
osal_set_event(GenericApp_TaskID,SEND_TO_ALL_EVENT);}。。。
if(events&SEND_TO_ALL_EVENT)//發送組播數據,每次發送完就定時5秒
{GenericApp_SendTheMessage();osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);return(events^SEND_TO_ALL_EVENT);}}二、重點代碼解析--協調器程序設計voidGenericApp_SendTheMessage(void){char*theMessageData="Coordinatorsend!";afAddrType_tmy_DstAddr;my_DstAddr.addrMode=(afAddrMode_t)AddrGroup;my_DstAddr.endPoint=GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr=GenericApp_Group.ID;AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,osal_strlen(theMessageData)+1,theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);}上述函數實現了組播發送,此時地址模式設置為AddrGroup,網絡地址設置為組ID,即GenericApp_Group.ID。二、重點代碼解析--協調器程序設計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;二、重點代碼解析—路由器節點程序設計UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){。。。caseZDO_STATE_CHANGE:GenericAPP_NwkState=(devStates_t)(MSGpkt->hdr.status);if(GenericAPP_NwkState==DEV_ROUTER){aps_AddGroup(GENERICAPP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年蘭州市第十中學招聘筆試真題
- 2024年北京大學醫學人文學院教輔崗位招聘筆試真題
- 小學教師教學經驗總結:成功案例與反思
- 生產工藝與設備改造與升級管理
- 飛鏢項目組織與服務行業直播電商戰略研究報告
- 升降花灑企業制定與實施新質生產力戰略研究報告
- 銥金筆企業制定與實施新質生產力戰略研究報告
- 皮或革制籃球行業直播電商戰略研究報告
- 家庭裝飾裝修企業制定與實施新質生產力戰略研究報告
- 梯形銅排行業直播電商戰略研究報告
- 防塵天幕施工方案
- 公路工程道路保通施工安全專項方案(3篇)
- 人工智能訓練師(中級)職業技能鑒定參考題庫-上(單選題)
- 斷絕父子關系協議書
- 西方現代思想講義
- 第-71-講-原子分數坐標和晶胞投影問題(課件)
- 2024年水泵維修合同模板
- 醫療手術室物品清點課件
- AQ∕T 3001-2021 加油(氣)站油(氣)儲存罐體阻隔防爆技術要求
- 道路交通肇事逃逸案件查緝預案
- 2024年全國高中生物聯賽競賽試題和答案
評論
0/150
提交評論