一 ,两台zigbee设备绑定成功的两个必要条件: 1,profileID相同 2,clusterID对应(即一个设备的输出 和输入分别等于另一台设备的输入和输出)
二 ,两台zigbee设备之间完成通信,主要有一下几种方式: 1,广播发送,这种方式不需要知道目标设备的16位网络地址,因为网络中的所有设备都会收到信息,相应的,
此方式对系统的开销(比如耗电量)也是最大 的 ; 2 ,单播发送,这种方式对系统的开销最小,也最常用。要实现单播发送,两台设备必须先绑定或者匹配(类似绑定的操作);其实绑定操作和匹配操作的区别并不大,说实话我也不知道这两者的具体区别,先不管吧,只要学会绑定就够用了。下面是绑定的具体步骤:
绑定成功之后,两台设备就可以发送消息了,但是 只能是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 );
二 ,两台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 );