ZigBee組播通訊原理
阿新 • • 發佈:2019-02-01
組播通訊原理
組播通訊:在Zigbee網路,模組可以分組來標記,傳送的模組如果組號和網路裡面標記模組的組號相對應,那麼這些模組就可以
拿到這些無線資料包。
組播的特點:
1,分組中的編號是兩個位元組(即組號是兩個位元組)
2,組號必須和已經定義了的端點相關聯。
即:組都是和模組裡已經定義了的端點相關聯,如果我們說一個模組標記為組0x01,那麼這個模組裡面至少有一個定義了的
端點與這個和組(0x01)相關聯
3,傳送模組必須指明發送給哪個組,哪個端點,簇編號,原則上,只要當接收模組的這三個引數匹配上了,才能拿到和處理這樣
一個無線資料包。
4,組標記中,同一個模組下的定義的一個組,可以關聯多個可用的端點,同一個端點也可以關聯多個組。
程式碼示例:
#define SAMPLEAPP_FLASH_CLUSTERID 2 //簇編號 #define SAMPLEAPP_FLASH_GROUP 0x0001 //組編號 afAddrType_t SampleApp_Flash_DstAddr; //組播 // Setup for the flash command's destination address - Group 1 SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;//注意這裡傳送模式為組播 SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;//注意這裡是接收模組的組編號 endPointDesc_t SampleApp_epDesc; SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;//模組的端點 SampleApp_epDesc.task_id = &SampleApp_TaskID;//指明資料由接收方的哪一個任務來處理 SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc; SampleApp_epDesc.latencyReq = noLatencyReqs; afRegister( &SampleApp_epDesc );//繫結 aps_Group_t SampleApp_Group; SampleApp_Group.ID = 0x0001; //接收模組的組編號 osal_memcpy( SampleApp_Group.name, "Group 1", 7 ); aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );//把組跟端點關聯,一定要端點關聯 uint8 SampleApp_TransID = 0; //傳送成功的幀條數,由底層負責更新 uint8 buffer[3]; uint16 flashTime = 856;//組播的資料 buffer[0] = (uint8)(SampleAppFlashCounter++); buffer[1] = LO_UINT16( flashTime ); buffer[2] = HI_UINT16( flashTime ); if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc, SAMPLEAPP_FLASH_CLUSTERID, 3, buffer, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { }
程式碼很簡單,有以下幾點需要說明一下:
1,在使用上廣播沒有什麼區別,僅僅是地址模式、地址內容不一樣
2,可以呼叫aps_RemoveGroup方法解除關聯。
2,協調器用到了組,要引入#include "aps_groups.h" 標頭檔案。