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 APP

osal_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

}

时间: 2024-12-29 06:45:59

TI Zigbee中协调器和其他设备固定PANID通信,设置PANID的相关文章

ZigBee中协调器如何向子节点发消息?

注意:以下所有内容均以TI公司的CC2530和Z-Stack为硬软件平台为实验背景讲述. 在一般的ZigBee教程中,子节点如何向协调器发送消息已经被描述的非常清楚了:即子节点直接使用API向地址为0x0000的协调器发送消息即可.用到的函数如下: afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,uint16 cID, uint16 len, uint8 *buf, uint8 *transID,ui

运行中修改协调器PAN ID和Channel,协调器广播至所有的设备重启加入新建后的网络

从飞比论坛那边看到一个问题,记录下: 一个ZigBee网络运行中,协调器通过串口与上位机连接,上位机设置协调器的PAN ID和Channel,协调器收到配置信息后, 首先将PAN ID和Channel广播发送至网络中的所有节点,然后协调器自身重启,加入新网络.部分代码如下: //PAN ID uint16 panId = BUILD_UINT16(msg[LOCDONGLE_CONFIG_PANID_LO_IDX], msg[LOCDONGLE_CONFIG_PANID_HI_IDX]); //

Zigbee协议栈是怎样分别执行协调器、路由器、终端的任务的?

这个问题虽然简单,却困扰了差不多一个星期,归根结底还是自己对协议栈的不熟悉. 废话不多说! 假如组网后,协调器需要执行的任务是:组播,终端要执行的任务是:单播.那协议栈是怎么做到协调器只执行组播的任务,而不知执行单播的任务,终端又是怎样只执行单播的任务而不执行组播的任务呢? 下面是官方给出的代码 1 // Received whenever the device changes state in the network 2 case ZDO_STATE_CHANGE://网络状态发生改变 3 S

读取cc2530节点的设备类型、协调器、路由器、终端。

建立网络.加入网络流程分析 协调器节点:在1-10  实验8 网络通信实验2 组播通信中 while(MSGpkt) { switch(MSGpkt->hdr.event) { case ZDO_STATE_CHANGE:  //建立网络后,设置事件 GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//??????? if(GenericApp_NwkState==DEV_ZB_COORD)//把该节点已初始化为协调器,则执行下面的

无线传感网CC2530终应端、路由以及协调器系统用

要做到目视千里,耳听八方是人类长久的梦想,现代卫星技术的出现虽然使人们离这目标又进了一步,但卫星高高在上,洞察全局在行,明察细微就不管用了.这个时候,本文的主角—无线传感器网络就排上用场了.将大量的传感器节点遍撒指定区域,数据通过无线电波传回监控中心,监控区域内的所有信息就会尽收观察者的眼中了. 闲话不说,直接进入正题.想让传感数据回来,总得有一套可以“采集传感器数据,打包发送数据给上层”的系统,这里就程序简单说明一下该系统的实现. 主开发程序在/ZStack-CC2530-2.3.0-1.4.

zigbee中profile,cluster的认识【转】

在zigbee规范中,引入了profile, cluster的概念.具体说来,假设规范一个profile(可以理解成一套规定),这个profile用来规范智能家居领域的相关产品都要满足那些要求,那么home automation public profile就规定了智能家居都要做什么.当然了,你可以自己规范一个自己的profile,称为provite profile,而zigbee联盟则已经规范了一些profile,比如home automation, smart energy,building

Storm-kafka【接口实现】4-1:ZKCoordinator: ZK协调器

阅读背景:您需要对Zk,Kafka有基础的了解 本章主题:详尽的梳理ZkCoordinator的过程 package com.mixbox.storm.kafka; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mixbox.storm.kafka.trident.GlobalPartitionInformation; import java.util.*; import static com.mixbox

SqlServer &amp; Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

原文:SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC) 在可更新订阅中,在订阅设置更新方法,将 "排队更新" 设置为 "立即更新" 接着在订阅数据库更新表数据,出错: 消息 21079,级别 16,状态 1,过程 sp_getpublisherlink,第 52 行 没有发布服务器的 RPC 安全信息,或该信息无效.请用 sp_link_publication 指定该信息. 消息 20512,级别 16,状态 1,

Kafka 核心组件之协调器

1.消费者与消费者组 假设某 topic 有4个分区,消费者组中只有一个消费者,那么这个消费者将消费全部 partition 中的数据. 如果消费者组中有两个消费者,那么每个消费者消费两个 partition. 如果消费者组中有4个消费者,那么每个消费者消费一个partition. 如果消费者组中有5个消费者,那么有一个消费者就是空闲的. 注意:在同一个消费者组中,不要让消费者的数量大于分区的数量 多个消费者组之间不会互相影响. 2.协调器 在 kafka-0.10 版本,Kafka 在服务端引