二 ,兩臺zigbee設備之間完成通信,主要有一下幾種方式: 1,廣播發送,這種方式不需要知道目標設備的16位網絡地址,因爲網絡中的所有設備都會收到信息,相應的,
此方式對系統的開銷(比如耗電量)也是最大 的 ; 2 ,單播發送,這種方式對系統的開銷最小,也最常用。要實現單播發送,兩臺設備必須先綁定或者匹配(類似綁定的操作);其實綁定操作和匹配操作的區別並不大,說實話我也不知道這兩者的具體區別,先不管吧,只要學會綁定就夠用了。下面是綁定的具體步驟:
A爲協調器,B和C是需要建立綁定的兩個EndDevice。
節點B和C分別通過按鍵機制調用函數ZDP_EndDeviceBindReq,這個函數將會向協調器發出綁定請求,如果在16S內兩個節點都執行了此函數,協調器就會協助實現綁定。綁定表放在OutCluster那邊,即綁定表存放在輸出控制命令的那邊。
注意:
# 節點B和C需具有互補性,即B的outcluster是C的incluster。
# 綁定後只能是outcluster節點B給incluster節點C發送控制命令,因爲只有B中保存C的信息(綁定表),不能反過來控制。
# 規定的時間
這個時間由參數APS_DEFAULT_MAXBINDING_TIME決定,默認爲16秒。
綁定成功之後,兩臺設備就可以發送消息了,但是只能是outcluster節點B給incluster節點C發送控制命令,而且B向C發送控制消息時,並不需要知道C設備的16位網絡地址,那消息怎麼傳送到C設備呢?答案是通過ep描述符和ClusterID ,舉例如下:
發送參數中afAddrType_t *dstAddr如下:
dstAddr.addrMode = afAddrNotPresent;
dstAddr.endPoint = 註冊的EP號;
dstAddr.addr.shortAddr = 可以忽略;
endPointDesc_t *srcEP 爲註冊的EP描述
uint16 cID 爲註冊的命令號如TOGGLE_LIGHT_CMD_ID //ClusterID
其它參數正常
3 ,組播發送,這種發送介於單播發送和廣播發送之間,可靈活控制目標設備的數量,即只向指定組裏面的設備發送,想接受消息的設備只需要在本地創建組,並向aps註冊組即可,舉例如下:
SampleApp_Group.ID = 0x0001;
osal_memcpy( SampleApp_Group.name, "Group 1", 7 );
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );