TI Zigbee中协调器和其他设备固定PANID通信,设置PANID

最近一直在研究zigbee,因为有通过固定PANID通信的需求,因此做了大量的实验,上了很多论坛,我想我必须总结一下,以免大家再走一遍我这样的路。

非常感谢很多写下技术文档和在TI论坛上积极回复的工程师。

一. 通过配置文件设置PANID

最简单的方式是修改

f8wConfig.cfg中的-DZDAPP_CONFIG_PAN_ID

另外预定义NV_RESTORE和NV_INIT.

但有两个问题:

1.当协调器断电之后,重新上电时,周围已经有另一协调器也是这个PANID,则设备无法与原协调器连接上。

2. 要更换PANID,,只能重新修改f8wConfig.cfg

二. 代码修改:

这是我的按键sw3的代码,供大家参考,通信时,真正起作用的是_NIB.nwkPanId。

当附近有其他协调器时,其PANID会自动加1,而不会按照代码设置的PANID进行设置,即_NIB.nwkPanId=设置的PANID值+1;协调器组网之后,可以读取_NIB.nwkPanId的值,以其他方式设置到路由器和终端设备。

if ( keys & HAL_KEY_SW_3 ) { // set specific PANID#if HOME_AUTO_SET_PANID uint16 panID; zb_ReadConfiguration( ZCD_NV_PANID, sizeof(uint16), &panID );if(panIDSetValue==panID-1)panIDSetValue=panID+1; if(_NIB.nwkPanId != panIDSetValue||panID!=panIDSetValue){ panID=panIDSetValue;panIDSetValue++;if(panIDSetValue==0x3FFF)panIDSetValue=0x0001;//save the panid value for APPosal_nv_write( ZD_NV_REMOTE_CONTROL_STUDYNUM,0, sizeof(uint16), &panIDSetValue );//save the panid value for Zigbee Stack zb_WriteConfiguration( ZCD_NV_PANID, sizeof(uint16), &panID ); _NIB.nwkPanId = panID; NLME_UpdateNV(NWK_NV_NIB_ENABLE);#ifdef LCD_SUPPORTED HalLcdWriteStringValue("New PANID",panID,16, lcdLineCounter ); lcdLineCounter++; lcdLineCounter=((lcdLineCounter%8)<3)?(3):(lcdLineCounter%8);#endif //for Router, can not connetct cordevice, after cordevice’s PANID has modify zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE); SystemResetSoft(); }#endif }

临行之前,面对太多的疑问和不解:

TI Zigbee中协调器和其他设备固定PANID通信,设置PANID

相关文章:

你感兴趣的文章:

标签云: