概述
1.组网后,怎样获取新加入的Endpoint的地址?
答:
现在有一个最常见的场景,我有一个100个节点的网络同时发送数据给协调器,我很想知道那个地址对应那个节点。其实楼上的就想知道那个,以前老板也经常问我这个问题。即使知道了某个节点的IEEE地址还是不知道是某个节点,除非你事先知道那个节点的地址。你不可能一个一个节点上电在轮询获得地址吧?如果那样的话,我还不如直接加下NV_RESTORE之后断电一个一个标
终端在给协调器发送的数据包中就包含自己的地址信息就可以了,这样协调器即不用浪费自己的RAM空间来保存所有节点的地址信息,也不用花时间来查询了。
因为MAC地址是唯一的,所以可以用MAC地址
还记得毛子在太空用铅笔的典故么?这里有个笨办法,在批量烧写CC2530的时候,就把它的IEEE地址读出来,然后贴在标签上。
A:
请问zigbee 怎么通过mac地址获得网络中挂在路由下的节点的短地址,用APSME_LookupNwkAddr得到短地址时,只能查找协调器儿子节点,对孙子节点不可访问,
afStatus_t ZDP_NwkAddrReq( byte *IEEEAddress, byte ReqType,
byte StartIndex, byte SecurityEnable )
根据已知网络地址查询远程设备物理地址,作为一个广播信息发送给网络中的所有设备:这个函数也是知道IEEE地址,对短地址进行寻找,这个不存在上面所说的限制,但是这个短地址放在那里呢,我怎么获得这个短地址呢?
。
B:
请使用函数:
afStatus_t ZDP_NwkAddrReq( uint8 *IEEEAddress, byte ReqType,byte StartIndex, byte SecurityEnable )
2问题:
请问调用这个函数获得的地址放在那里呢?
答:
会有callback函数上来的,对应的处理事件是
#define NWK_addr_rsp (NWK_addr_req | ZDO_RESPONSE_BIT)
void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t *inMsg )
的switch case下面做添加就可以,然后去处理获得的地址
3问题:
ZigBee网络中协调器分配网络地址在哪?如何查看设备的网络地址?
答:
协调器的短地址是0x0000,当设备加入成功后,会产生一个ZDO_STATE_CHANGE_EVT事件,这个事件就是设备加入网络成功后,并在网络中的身份确定后产生的一个事件,我们可以在这里处理,一些初始化,比如可以发送终端的短地址,IEEE地址等,这里协调器接收到以后,可以提取出终端的短地址,其实在终端给协调器发送的每个数据包中,都含有其自身的短地址,如结构体当中的afAddrType_t srcAddr;协调器在接收到短地址后,就可以知道自己下面管辖的终端节点,或者路由节点有哪些了?协调器提取到的短地址可以存放到一个非易失性的存储器中。
两种方法,
1)节点在入网的时候都会发送Device Announce,这个Device Announce是广播数据,所以每个设备的Device Announce,Coordinator都能收到,而且在Device Announce 都带有这个设备的短地址,那么你的Coordinator也就可以获得所有终端设备的短地址了。
2)如果错过了Device Announce,那么在协议栈里面有现成的API ZDP_IEEEAddrReq()函数也可以使用获得终端设备的地址,具体参考附件的文档。
问题:
怎样将ZigBee自组织网络的数据传到服务器?
答:
zigbee gprs网关实现ZigBee采集数据上传到服务器。
4问题:
怎样利用移动终端设备(手机)去控制发送数据来操控ZigBee网络中的节点动作?
答:
手机通过GPRS将数据发送到服务器,然后由服务器转化给ZigBee网络的协调器。
5问题:
显示数组时,如果数组的值是程序运行过程中外部赋予的,那么在液晶或者OLED显示时,其尾部会有乱码,怎样处理该问题?
答:
在给数组的最后一个有效数字后面的元素赋值'