版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ZigBee協(xié)議棧實(shí)驗(yàn):廣播與單播實(shí)驗(yàn)主講:張老師一、實(shí)驗(yàn)原理二、重點(diǎn)代碼解析三、實(shí)驗(yàn)結(jié)果驗(yàn)證標(biāo)題四、數(shù)據(jù)接收一、實(shí)驗(yàn)原理——基礎(chǔ)知識(shí)儲(chǔ)備Zigbee網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)通信主要有三種類型:廣播、單播、組播。一、實(shí)驗(yàn)原理——通信方式的協(xié)議棧實(shí)現(xiàn)參數(shù)1:afAddrType_t*dstAddr該參數(shù)包含了目的節(jié)點(diǎn)的網(wǎng)絡(luò)地址、端點(diǎn)號(hào)及數(shù)據(jù)傳送的模式,如單播、廣播或多播等。typedefstruct
{
Union
{
uint16shortAddr;
//用于標(biāo)識(shí)該節(jié)點(diǎn)網(wǎng)絡(luò)地址的變量
}addr;afAddrMode_taddrMode;
//用于指定數(shù)據(jù)傳送模式,單播、多播還是廣播
byteendPoint;
//端點(diǎn)號(hào)
}afAddrType_t;
//
其定義在AF.h中afAddrType_t是個(gè)結(jié)構(gòu)體如下:一、實(shí)驗(yàn)原理——通信方式的協(xié)議棧實(shí)現(xiàn)
ZigBee協(xié)議棧將數(shù)據(jù)通信過程高度抽象,使用一個(gè)函數(shù)完成數(shù)據(jù)的發(fā)送,以不同的參數(shù)來選擇數(shù)據(jù)發(fā)送方式(廣播、組播還是單播)。afStatus_tAF_DataRequest(afAddrType_t*dstAddr,//目的地址指針endPointDesc_t*srcEP,
//發(fā)送節(jié)點(diǎn)的端點(diǎn)描述符指針uint16cID,
//ClusID簇ID號(hào)uint16len,
//發(fā)送數(shù)據(jù)的長(zhǎng)度uint8*buf,
//指向存放發(fā)送數(shù)據(jù)的緩沖區(qū)指針uint8*transID,//傳輸序列號(hào),該序列號(hào)隨著信息的發(fā)送而增加
uint8options,//發(fā)送選項(xiàng)uint8radius
//最大傳輸半徑(發(fā)送的跳數(shù))
)ZigBee協(xié)議棧中數(shù)據(jù)發(fā)送函數(shù)原型如下:一、實(shí)驗(yàn)原理——通信方式的協(xié)議棧實(shí)現(xiàn)
上述結(jié)構(gòu)體中的afAddrMode_taddrMode就是用于指定數(shù)據(jù)傳送模式,是個(gè)枚舉類型,可以設(shè)置為以下幾個(gè)值。typedefenum{
afAddrNotPresent=AddrNotPresent,
//表示通過綁定關(guān)系指定目的地址
afAddr16Bit=Addr16Bit,
//單播發(fā)送
afAddrGroup=AddrGroup,
//組播
afAddrBroadcast=AddrBroadcast//廣播}afAddrMode_t;Enum{
AddrNotPresent=0,
AddrGroup=1,
Addr16Bit=2,
Addr64Bit=3,
AddrBroadcast=15};一、實(shí)驗(yàn)原理——單播注意,其實(shí)單播有兩種方式一種是綁定傳輸,一種是目標(biāo)地址的單播傳輸。my_DstAddr.addrMode=(afAddrMode_t)AddrNotPresent,一種是直接指定目標(biāo)地址的單播傳輸,比如協(xié)調(diào)器就是0x0000。①單播綁定傳輸my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;
//單播發(fā)送my_DstAddr.endPoint=GENERICAPP_ENDPOINT;
//目的端口號(hào)my_DstAddr.addr.shortAddr=0;
//按照綁定的方式進(jìn)行單播,不需要指定目標(biāo)地址,需要先將兩個(gè)設(shè)備綁定,將兩個(gè)設(shè)備綁定后即可通信②直接指定目標(biāo)地址的單播傳輸:是標(biāo)準(zhǔn)尋址模式,它將數(shù)據(jù)包發(fā)送給一個(gè)已經(jīng)知道網(wǎng)絡(luò)地址的網(wǎng)絡(luò)設(shè)備,將afAddrMode設(shè)置為Addr16Bit并且在數(shù)據(jù)包中攜帶目標(biāo)設(shè)備地址。my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;
//單播發(fā)送my_DstAddr.endPoint=GENERICAPP_ENDPOINT;
//目的端口號(hào)my_DstAddr.addr.shortAddr=0x0000;
//目標(biāo)設(shè)備網(wǎng)絡(luò)地址一、實(shí)驗(yàn)原理——廣播當(dāng)應(yīng)用程序需要將數(shù)據(jù)包發(fā)送給網(wǎng)絡(luò)的每一個(gè)設(shè)備時(shí),使用這種模式。地址模式設(shè)置為AddrBroadcast。目標(biāo)地址my_DstAddr.addr.shortAddr可以根據(jù)需求設(shè)置為下面廣播地址的一種。NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——數(shù)據(jù)包將被傳送到網(wǎng)絡(luò)上的所有設(shè)備,包括睡眠中的設(shè)備。對(duì)于睡眠中的設(shè)備,數(shù)據(jù)包將被保留在其父親節(jié)點(diǎn)直到查詢到它,或者消息超時(shí)(NWK_INDIRECT_MSG_TIMEOUT在f8wConifg.cfg中)。NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——數(shù)據(jù)包將被傳送到網(wǎng)絡(luò)上的所有在空閑時(shí)打開接收的設(shè)備(RXONWHENIDLE),也就是說,除了睡眠中的所有設(shè)備。NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——數(shù)據(jù)包發(fā)送給所有的路由器,包括協(xié)調(diào)器。my_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;//廣播發(fā)送my_DstAddr.endPoint=GENERICAPP_ENDPOINT;
//目的端口號(hào)my_DstAddr.addr.shortAddr=0xFFFF;
//協(xié)調(diào)器網(wǎng)絡(luò)地址一、實(shí)驗(yàn)原理——實(shí)驗(yàn)效果及原理圖
實(shí)驗(yàn)效果預(yù)設(shè)為:協(xié)調(diào)器周期性以廣播的形式向終端節(jié)點(diǎn)發(fā)送數(shù)據(jù),終端節(jié)點(diǎn)收到數(shù)據(jù)后,使開發(fā)板上的LED狀態(tài)翻轉(zhuǎn),同時(shí)向協(xié)調(diào)器發(fā)送字符串“EndDevicereceived!”,協(xié)調(diào)器收到終端節(jié)點(diǎn)發(fā)回的數(shù)據(jù)后,通過串口輸出到PC機(jī),用戶可以通過串口調(diào)試助手查看該信息。一、實(shí)驗(yàn)原理——協(xié)調(diào)器工作流程協(xié)調(diào)器周期性以廣播的形式向終端節(jié)點(diǎn)發(fā)送數(shù)據(jù),如何實(shí)現(xiàn)周期性地發(fā)送數(shù)據(jù)呢?這里又需要用定時(shí)函數(shù)osal_start-timcrEx0,定時(shí)5s,定時(shí)時(shí)間達(dá)到后,向終端節(jié)點(diǎn)發(fā)送數(shù)據(jù),發(fā)送完數(shù)據(jù)再定時(shí)5s,這樣就實(shí)現(xiàn)了周期性地發(fā)送數(shù)據(jù)。一、實(shí)驗(yàn)原理——終端節(jié)點(diǎn)工作流程終端節(jié)點(diǎn)上電后,會(huì)進(jìn)行硬件電路的初始化,然后搜索是否有ZigBee無線網(wǎng)絡(luò),如果有ZigBee無線網(wǎng)絡(luò)再自動(dòng)加入(這是最簡(jiǎn)單的情況,當(dāng)然可以控制節(jié)點(diǎn)加入網(wǎng)絡(luò)時(shí)要符合編譯時(shí)確定的網(wǎng)絡(luò)號(hào)等),然后判斷是否收到協(xié)調(diào)器發(fā)送的數(shù)據(jù),若收到,則將LED狀態(tài)取反,然后發(fā)送數(shù)據(jù)到協(xié)調(diào)器,否則繼續(xù)等待接收數(shù)據(jù)。二、重點(diǎn)代碼解析--協(xié)調(diào)器程序設(shè)計(jì)if(events&SEND_TO_ALL_EVENT)//數(shù)據(jù)發(fā)送事件處理{GenericApp_SendTheMessage();osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);return(events^SEND_TO_ALL_EVENT);}
當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化時(shí),啟動(dòng)定時(shí)器定時(shí)5S,定時(shí)時(shí)間到達(dá)后,設(shè)置SEND_TO_ALL_EVENT事件,在SEND_TO_ALL_EVENT事件處理函數(shù)中,調(diào)用發(fā)送數(shù)據(jù)函數(shù)GenericApp_SendTheMessage(),發(fā)送完數(shù)據(jù)后,再次啟動(dòng)定時(shí)器,定時(shí)5S……二、重點(diǎn)代碼解析--協(xié)調(diào)器程序設(shè)計(jì)if(events&SEND_TO_ALL_EVENT)//數(shù)據(jù)發(fā)送事件處理{GenericApp_SendTheMessage();osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);return(events^SEND_TO_ALL_EVENT);}
當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化時(shí),啟動(dòng)定時(shí)器定時(shí)5S,定時(shí)時(shí)間到達(dá)后,設(shè)置SEND_TO_ALL_EVENT事件,在SEND_TO_ALL_EVENT事件處理函數(shù)中,調(diào)用發(fā)送數(shù)據(jù)函數(shù)GenericApp_SendTheMessage(),發(fā)送完數(shù)據(jù)后,再次啟動(dòng)定時(shí)器,定時(shí)5S……二、重點(diǎn)代碼解析--協(xié)調(diào)器程序設(shè)計(jì)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;}}當(dāng)收到終端節(jié)點(diǎn)發(fā)回的數(shù)據(jù)后,讀取該數(shù)據(jù),然后發(fā)送到串口。二、重點(diǎn)代碼解析--協(xié)調(diào)器程序設(shè)計(jì)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);}使用廣播方式發(fā)送數(shù)據(jù),注意,此時(shí)發(fā)送模式是廣播,如下代碼所示:my_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;相應(yīng)的網(wǎng)絡(luò)地址可以設(shè)為0xFFFF,如下代碼所示:my_DstAddr.addr.shortAddr=0xFFFF;二、重點(diǎn)代碼解析—終端節(jié)點(diǎn)程序設(shè)計(jì)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();}}}上述代碼是對(duì)接收到的數(shù)據(jù)進(jìn)行處理,當(dāng)正確接收到協(xié)調(diào)器發(fā)送的字符串"Coordinatorsend!"時(shí),調(diào)用函數(shù)GenericApp_SendTheMessage()發(fā)送返回消息。二、重點(diǎn)代碼解析—終端節(jié)點(diǎn)程序設(shè)計(jì)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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版UPS設(shè)備質(zhì)保與支持服務(wù)協(xié)議版B版
- 專業(yè)技術(shù)服務(wù)勞務(wù)協(xié)議(2024版)版B版
- 2024年綠色屋頂設(shè)計(jì)與施工合同范本3篇
- 2024房地產(chǎn)融資合同范本
- 【放射科】精準(zhǔn)醫(yī)療幕后的先鋒團(tuán)隊(duì)
- 11-1《諫逐客書 》(說課稿)-2024-2025學(xué)年高一語(yǔ)文下學(xué)期同步教學(xué)說課稿專輯(統(tǒng)編版必修下冊(cè))
- 福建省南平市塔前中學(xué)2022年高二數(shù)學(xué)理聯(lián)考試題含解析
- 2024文化石礦山開采及加工合作合同范本3篇
- 雙十一旅行新品盛宴
- 2024港口物流信息化建設(shè)合同
- 2025年湖北省襄陽(yáng)某中學(xué)自主招生物理模擬試卷(附答案解析)
- 工程力學(xué)課后習(xí)題答案1
- 6S視覺管理之定置劃線顏色管理及標(biāo)準(zhǔn)樣式
- 提高病案質(zhì)量完善病案管理病案部年終工作總結(jié)
- 幼兒園大班語(yǔ)言活動(dòng)《新年禮物》課件
- 四年級(jí)數(shù)學(xué)(除數(shù)是兩位數(shù))計(jì)算題專項(xiàng)練習(xí)及答案
- 江蘇省如皋市2024-2025學(xué)年高二英語(yǔ)上學(xué)期期末教學(xué)質(zhì)量調(diào)研試題
- 2023遼寧公務(wù)員考試《行測(cè)》真題(含答案及解析)
- 2024-2030年鋁合金粉行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- JGJ106-2014建筑基樁檢測(cè)技術(shù)規(guī)范
- 中考字音字形練習(xí)題(含答案)-字音字形專項(xiàng)訓(xùn)練
評(píng)論
0/150
提交評(píng)論