ZigBee组网实验

ZigBee组网实验
ZigBee组网实验

ZigBee组网实验

修订记录

版本修订说明修订者修订日期V1.0 初稿xux 2014-03-26

南京未来星传感技术有限公司

2014年3月

实验二十一节点无线聊天实验

前言:节点无线聊天即传统的串口透传,这个名词相信大家在看ZigBee相关资料时经常会看到,透传到底是什么呢?电脑A和电脑B通过串口相连,相互发送信息,现在我们将电脑A和B连接Zigbee模块,再用串口收发信息,ZigBee的作用就相当于把有线信号转化成无线信号。这样我们电脑前面操作一样的,但是已经变成无线传输了,这就是串口透传!如图所示:

实验平台:未来星CC2530模块及功能底板个两块(一个协调器,一个终端)

实验现象:两台不同的PC机通过串口连接到未来星开发板,打开串口调试助手,设置好波特率等参数。相互收发信息。没有2台电脑也可以同一台电脑的不同串口进行试验。

实验讲解:试验使用我们熟悉的SampleApp.eww工行来进行。在前面我们曾做过串口实验和数据无线传输,这次试验是这两个试验的一个结合。不过协议栈的串口接收有特定的格式,我们得了解一下它的传输机制。先理清我们要实现这个功能的流程:由于2台PC机所带的模块地位是相等的,所以两个模块的程序流程也一样:

1、zigBee模块接收到从PC机发送信息,然后无线发送出去

2、ZigBee模块接收到其它ZigBee模块发来的信息,然后发送给PC机

我们打开Z-stack目录Projects\zstack\Samples\SampleApp\CC2530DB 里面的SampleApp.eww工程。这次试验我们基于协议栈的SampleApp来进行。

打开工程后,我们只要关注App ,这也是我们用户添加自己代码的地方,主要在SampleApp.c 和

SampleApp.h

1、 ZigBee 模块接收到从PC 机发送信息,然后无线发送出去 以前我们做的都是CC2530给PC 机串口发送信息,还没接触过PC 机发送给CC2530,现在我们就来完成这个任务。其主要代码在MT_UART.C 中。我们之前协议栈串口实验对串口初始化时候已经有所了解了。

我们在这个文件里找到串口初始化函数void MT_UartInit(),找到下面代码:

#if defined (ZTOOL_P1) || defined (ZTOOL_P2)

uartConfig.callBackFunc = MT_UartProcessZToolData;

#elif defined (ZAPP_P1) || defined (ZAPP_P2)

uartConfig.callBackFunc = MT_UartProcessZAppData;

#else

uartConfig.callBackFunc = NULL;

#endif

我们定义了ZTOOL_P1,古协议栈数据处理函数MT_UartProcessZToolData,进入这个函数定义。下边是对函数关键地方的解释。

/* 这个函数很长,具体说来就是把串口发来的数据包进行打包,校验,生

成一个消息,发给处理数据包的任务。如果你看过M T 的文档,应该知道如

果用Z TOOL 通过串口来沟通协议栈,那么发过来的串口数据具有以下格式:0xFE, DataLength, CM0, CM1, Data payload, FCS

翻译:0xFE:数据帧头

DataLength:Datapayload 的数据长度,以字节计,低字节在前;

CM0:命令低字节;

CM1:命令高字节;(ZTOOL 软件就是通过发送一系列命令给M T 实现和

协议栈交互)

Data payload:数据帧具体的数据,这个长度是可变的,但是要和

DataLength 一

致;

FCS :校验和,从D ataLength 字节开始到Data payload 最后一个字节

所有字节的异或按字节操作;

也就是说,如果PC机想通过串口发送信息给CC2530,由于是使用默认的串口函数,所以您必须按上面的格式发送,否则CC2530是收不到任何东西的,

这也是我们大家在调试串口接收时一直打圈的地方。尽管这个机制是非常完善的,也能校验串口数据,但是很明显,我们需要的是 CC2530 能直接接收到串口

信息,然后一成不变的发成出去,相信你在聊 QQ 的时候也不希望在每句话前面加 FE .. ..的特定字符吧,而且还要自己计算校验码。

于是我们就来个偷龙转凤,把改函数换成我们自己的串口处理函数,是不是很酷?当然,不过前提我们先要了解自带的这个函数。

Void MT_UartProcessZToolData ( uint8 port, uint8 event )

{

while (Hal_UART_RxBufLen(port))

/*查询缓冲区读信息,也成了这里信息是否接收完的标志*/

{

HalUARTRead (port, &ch, 1);

/*一个一个地读,读完一个缓冲区就清1 个了,?为什么这样呢,往下看*/ switch (state)

/*用上状态机了*/

{

case SOP_STATE:

if (ch == MT_UART_SOF) /* MT_UART_SOF 的值默认是0xFE,所以数

据必须F E 格式开始发送才能进入下

一个状态,不然永远在这里转圈*/ state = LEN_STATE;

break;

case LEN_STATE:

LEN_Token = ch;

tempDataLen = 0;

/* Allocate memory for the data */

pMsg = (mtOSALSerialData_t *)osal_msg_allocate( sizeof ( mtOSALSerialData_t ) +MT_RPC_FRAME_HDR_SZ + LEN_Token );

/* 分配内存空间*/

if (pMsg) /* 如果分配成功

*/

{

/* Fill up what we can */

pMsg->hdr.event = CMD_SERIAL_MSG;

/* 注册事件号C MD_SERIAL_MSG;,很有用*/

pMsg->msg = (uint8*)(pMsg+1);

/*定位数据位置*/

/* Make sure it’s correct */

tmp=MT_UartCalcFCS((uint8*)&pMsg->msg[0], MT_RPC_FRAME_HDR_SZ + LEN_Token);

if (tmp == FSC_Token) /*数据校验*/

{

osal_msg_send( App_TaskID, (byte *)pMsg );

/*把数据包发送到OSAL 层,很很重要*/

}

else

{

/* deallocate the msg */

osal_msg_deallocate ( (uint8 *)pMsg );

/*清申请的内存空间*/

}

/* Reset the state, send or discard the buffers at this point */ state = SOP_STATE; /*状态机一周期完成*/

简单看了一下代码,串口从P C 机接收到信息会做如下处理:

1、接收串口数据,判断起始码是否为0xFE

2、得到数据长度然后给数据包pMsg 分配内存

3、给数据包pMsg 装数据

4、打包成任务发给上层OSAL 待处理

5、释放数据包内存

我们要做的是简化再简化。流程变成:

1、接收到数据

2、判断长度然后然后给数据包pMsg 分配内存

3、打包发送给上层OSAL 待处理

4、释放内存

修改后的程序:

void MT_UartProcessZToolData ( uint8 port, uint8 event )

{

uint8 flag=0,I,j=0;//flag 是判断有没有收到数据,j 记录数据长度

uint8 buf[128];//串口b uffer 最大缓冲默认是128,我们这里用128.

(void)event;// Intentionally unreferenced parameter

while (Hal_UART_RxBufLen(port)) //检测串口数据是否接收完成

{

HalUARTRead (port,&buf[j], 1); //把数据接收放到buf 中

j++; //记录字符数

flag=1; //已经从串口接收到信息

}

if(flag==1) //已经从串口接收到信息

{ /* Allocate memory for the data */

//分配内存空间,为机构体内容+数据内容+1 个记录长度的数据

pMsg = (mtOSALSerialData_t *)osal_msg_allocate( sizeof

( mtOSALSerialData_t )+j+1);

//事件号用原来的CMD_SERIAL_MSG

pMsg->hdr.event = CMD_SERIAL_MSG;

pMsg->msg = (uint8*)(pMsg+1); // 把数据定位到结构体数据部分

pMsg->msg [0]= j; //给上层的数据第一个是长度

for(i=0;i

pMsg->msg [i+1]= buf[i];

osal_msg_send( App_TaskID, (byte *)pMsg ); //登记任务,发往上层

/* deallocate the msg */

osal_msg_deallocate ( (uint8 *)pMsg ); //释放内存

}

}

从代码可知,数据包中数据部分的格式是:

datalen + data

到这里,数据接收的处理函数已经完成了,接下来我们要做的就是怎么在任务中处理这个包内容呢?很简单,因为串口初始化是在 SampleApp 中进行的,任务号也是 SampleApp 的 ID,所以当然是在 SampleApp.C 里面进行了。在 SampleApp.C 找到任务处理函数:

uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ),加入下

面红色代码:

uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )

{

afIncomingMSGPacket_t *MSGpkt;

(void)task_id; // Intentionally unreferenced parameter

if ( events & SYS_EVENT_MSG )

{

MSGpkt(afIncomingMSGPacket_t*)osal_msg_receive( SampleApp_TaskID );

while ( MSGpkt )

{

switch ( MSGpkt->hdr.event )

{

case CMD_SERIAL_MSG: //串口收到数据后由 MT_UART 层传递过来的

数据,用上面方法接收,编译时不定义 MT

相关内容,

SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt);

break;

解释:串口收到信息后,事件号C MD_SERIAL_MSG 就会被登记,便进入case CMD_SERIAL_MSG:

执行SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt);大家是不是很奇怪怎么在协议栈里找不到这个函数,当然了,我们那边只把他打包了,然后登记任务,这个包是我们自己的,想怎么处理当然由自己来搞掂。大家应该想到这个函数应该要把信息无线发送出去吧,想到这个的话你的悟性还挺高的。下面贴上参考代码,用户也可以自己完成。

void SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg)

{

uint8 I,len,*str=NULL; //len 有用数据长度

str=cmdMsg->msg; //指向数据开头

len=*str; //msg 里的第1个字节代表后面的数据长度

/********打印出串口接收到的数据,用于提示*********/

for(i=1;i<=len;i++)

HalUARTWrite(0,str+I,1 );

HalUARTWrite(0,”\n”,1 );//换行

if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,

SAMPLEAPP_COM_CLUSTERID,//自己定义一个

len+1, // 数据长度

str, //数据内容

&SampleApp_TransID,

AF_DISCV_ROUTE,

AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )

{

}

else

{

// Error occurred in request to send.

}

}

SAMPLEAPP_COM_CLUSTERID 这个自己定义的I D,用于接收方判别:如图

到这里,CC2530 从串口接收到信息到转发出去已经完成了,我们可以先下载程序到未来星开发板,然后可以看到随便发什么都可以打印出来提示了。也就是说C MD_SERIAL_MSG:事件和v oid SampleApp_SerialCMD (mtOSALSerialData_t

*cmdMsg )函数已经被成功执行了。

2. ZigBe 模块接收到其它Z igBee 模块发来的信息,然后发送给P C 机这里直接贴上代码,加上红色部分内容:

Void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

{

uint8 I,len;

switch ( pkt->153lustered )

{

case SAMPLEAPP_COM_CLUSTERID: //如果是串口透传的信息

len=pkt->cmd.Data[0];

for(i=0;i

HalUARTWrite(0,&pkt->cmd.Data[i+1],1);//发给P C 机

HalUARTWrite(0,”\n”,1); // 回车换行

break;

}

}

最后还要修改预编译,注释掉M T 层的内容。这里注意,选择了协调器、路由

器、或者终端编译时都要修改o ptions 的。

参考如下:如图所示ZIGBEEPRO

NWK_AUTO_POLL(需要自动重连时加入)

ZTOOL_P1

xMT_TASK

xMT_SYS_FUNC

xMT_ZDO_FUNC

至此,所有配置完成,万事俱备,只欠下载了,我们把程序分别下载到 2 个

模块,一个选择协调器(必需),一个选择终端(或路由)。通过USB 转串口或

其他串口连接到 2 台 PC 机。打开串口助手设置好参数(波特率

115200bps),可以聊天啦。没有 2 台 PC 机的可以用同一台 PC 的不同串口代

替。哈哈,赶快用串口聊天吧。

同一台P C 的2个不同串口演示

实验二十二节点无线电灯实验

前言:无线电灯,这是智能家居实验里一个很简单却很实用的一个例子,协议栈是一个高度封装的平台,我们只要调用协议栈提供的API即可容易的实现无线电灯实验。

实验平台:未来星CC2530模块及功能底板个两块(一个协调器,一个终端)

实验讲解:这个实验我们仍然基于我们熟悉的SampleApp.eww工程在实现,这个实验是按键实验和无线传输实验的结合。因为这个实验就是终端发送命令给协调器控制协调器上的灯的开与关。我们先来简单了解一下这个实验的工作流程:

1:终端节点发送命令给协调器,命令分为开灯和关灯

2:协调器收到无线数据后判断命令并控制灯的开关

同上一个实验我们打开SampleApp.eww工程,在APP层添加相应代码:1、终端节点发送命令给协调器,命令分为开灯和关灯

我们打开SampleApp.C这个文件找到SampleApp_HandleKeys这个函数:

我们直接在这个函数里面添加代码,添加红色的代码:

int Number_KeyPress=0; //记录按键按下的次数

void SampleApp_HandleKeys( uint8 shift, uint8 keys )

{

(void)shift; // Intentionally unreferenced parameter

if ( keys & HAL_KEY_SW_1 )

{

Number_KeyPress++;

if(Number_KeyPress%2) //奇数次按下点亮

{

SendData("KD",0x0000,2);

}

else //偶数次按下熄灭

{

SendData("GD",0x0000,2);

}

这里有一个函数SendData(),这是我们自己写的一个函数,是将协议栈里面的无线发送函数封装起来的,我们来看看这个函数:

//-------------------------------------------------------------------------

//发送一组数据

//-------------------------------------------------------------------------

uint8 SendData(uint8 *buf, UINT16 addr, uint8 Leng)

{

afAddrType_t SendDataAddr;

SendDataAddr.addrMode = (afAddrMode_t)Addr16Bit;

SendDataAddr.endPoint = SAMPLEAPP_ENDPOINT;

SendDataAddr.addr.shortAddr = addr;

if ( AF_DataRequest( &SendDataAddr, &SampleApp_epDesc,

2,//SAMPLEAPP_PERIODIC_CLUSTERID,

Leng,

buf,

&SampleApp_TransID,

AF_DISCV_ROUTE,

// AF_ACK_REQUEST,

AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )

{

return 1;

}

else

{

return 0;// Error occurred in request to send.

}

}

注意红色代码,看到了吧,我们是将这个函数进行封装,然后将数据发送出去,对于这个函数的使用请查阅相关API说明文档。

2:协调器收到无线数据后判断命令并控制灯的开关

协调器这块仍然是在SampleApp.eww这个工程里的SampleApp.C文件下添加相应的代码实现的,前面无线相关的实验也讲到了,当设备接收到无线数据后将会触发无线接收事件

AF_INCOMING_MSG_CMD,我们就在这个事件调用的函数里添加相关代码。

我们直接贴出相关的代码:

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) {

uint16 flashTime;

switch ( pkt->clusterId )

{ case 2: //因为发送端发送的簇ID是2

if(pkt->cmd.Data[1] == 'K')

HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);

else if(pkt->cmd.Data[1] == 'G')

HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);

break;

好了,这样就可以进行无线电灯了。抓紧烧进去看现象吧。

Zigbee组网流程——理论

星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。 一、协调器初始化网络 协调器建立一个新网络的流程如图1所示。 图1 协调器建立一个新网络 1、检测协调器 建立一个新的网络是通过原语NLME_NETWORK_FORMATION.request发起的,但发起NLME_NETWORK_FORMATION.request原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的NLME_NETWORK_FORMATION.confirm的原语来通知上层这是一个非法请求。 2、信道扫描 协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。 信道扫描包括能量扫描和主动扫描两个过程。首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内

的信道等待进一步处理。接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数仠为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。 3、配置网络参数 如果扫描到一个合适的信道,网络层管理实体将为新网络选择一个PAN描述符,该PAN 描述符可以是由设备随机选择的,也可以是在NLME_NETWORK_FORMATION.request里指定的,但必须满足PAN描述符小于或等于0x3fff,不等于0xffff,并且在所选信道内是唯一的PAN描述符,没有任何其它PAN描述符与之是重复的。如果没有符合条件的PAN 描述符可选择,进程将被终止,网络层管理实体通过参数值为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。确定好PAN 描述符后,网络层管理实体为协调器选择16位网络地址0x0000,MAC子层的macPANID 参数将被设置为PAN描述符的值,macShortAddress PIB参数设置为协调器的网络地址。 4、运行新网络 网络参数配置好后,网络层管理实体通过MLME_START.request原语通知MAC层启动并运行新网络,启动状态通过MLME_START.confirm原语通知网络层,网络层管理实体再通过NLME_NETWORK_FORMATION.confirm原语通知上层协调器初始化的状态。 5、允许设备加入网络 只有ZigBee协调器或路由器才能通过NLME_PERMIT_JOINING.request原语来设置节点处于允许设备加入网络的状态。当发起这个进程时,如果PermitDuration参数值为0x00,网络层管理实体将通过MLME_SET.request原语把MAC层的macAssociationPermit PIB 属性设置为FALSE,禁止节点处于允许设备加入网络的状态;如果PermitDuration参数值介于0x01和0xfe之间,网络层管理实体将通过MLME_SET.request原语把macAssociationPermit PIB属性设置为TRUE,并开启一个定时器,定时时间为PermitDuration,在这段时间内节点处于允许设备加入网络的状态,定时时间结束,网络层管理实体把MAC层的macAssociationPermit PIB属性设置为FALSE;如果PermitDuration参数的值为0xff,网络层管理实体将通过MLME_SET.request原语把macAssociationPermit PIB属性设置为TRUE,表示节点无限期处于允许设备加入网络的状态,除非有另外一个NLME_PERMIT_JOINING.request原语被发出。允许设备加入网络的流程如图2所示。

Zigbee组网实验之Sample App

Zigbee组网实验之Sample App https://www.360docs.net/doc/8412733046.html,/ 佳杰科技开发套件,最便宜、最详细、最好的Zigbee开发套件。 1.实验设备: Q2530SB开发底板(V1.1以上版本)2块 RF2530N射频板2块 天线(非必要,影响传输距离)2根 SmartRF04EB仿真器带USB线和仿真器接头线1个 电池盒有电池一个(负责供电) 2.硬件连接说明 射频板RF2530N分别连接底板Q2530SB 仿真器USB线连接电脑和其中一块底板 电池盒连接另外一块底板、保证系统都正常供电 3.实验步骤及效果 1.打开实验代码:在路径Texas Instruments\ZStack-CC2530- 2. 3.0-1. 4.0\Projects\zstack\ Samples\SampleApp\CC2530DB下鼠标双击打开文件SampleApp.eww 2.在应用层APP文件夹中找到SampleApp.c文件,找到函数SampleApp_HandleKeys并双 击打开。 3.将函数中的代码做以下修改 if ( keys & HAL_KEY_SW_1 ) { /* This key sends the Flash Command is sent to Group 1. * This device will not receive the Flash Command from this * device (even if it belongs to group 1). */ SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION ); } 改为 if ( keys==0x20 ) { /* This key sends the Flash Command is sent to Group 1. * This device will not receive the Flash Command from this * device (even if it belongs to group 1).

zigbee的系统结构和组网方式

简介 ZigBee是一种新兴的短距离、低功耗、低数据传输速率的无线网络技术,它是一种介于无线标记技术和蓝牙之间的技术方案。ZigBee是建立在IEEE802.15.4标准之上,它确定了可以在不同制造商之间共享的应用纲要。IEEE802.15.4标准定义了ZigBee协议的PHY层和MAC层。PHY层规范确定了在2.4GHz(全球通用的ISM频段)以250kb/s的基准传输率工作的低功耗展频无线电以及另有一些以更低数据传输率工作的915MHz(北美的ISM频段)和868MHz(欧洲的ISM频段)的实体层规范。MAC层规范定义了在同一区域工作的多个IEEE802.15.4无线电信号如何共享空中通道。 为了促进ZigBee技术的发展,2001年8月成立了ZigBee联盟,2002年下半年,英国Invensys公司、日本三菱电子公司、美国摩托罗拉公司以及荷兰飞利浦半导体公司四大巨头共同宣布,它们将加入“ZigBee联盟”,目前该联盟已经有150多家成员,以研发名为ZigBee的下一代无线通信标准。 正如前面所述,ZigBee不仅仅只是802.15.4的名字,IEEE802.15.4仅处理低级MAC层和PHY层协议,所以ZigBee联盟对其网络层协议和API进行了标准化,还开发了安全层,以保证这种便携设备不会意外泄漏其标识。 ZigBee的组成和构网方式 1.FFD和RFD 利用zigbee技术组件的无线个人区域网(WPAN)是一种低速率的无线个人区域网(LR WPAN),这种低速率个人区域网的网络结构简单、成本低廉,具有有限的功率和灵活的吞 吐量。 在一个LR WPAN网络中,可同时存在两种不同类型的设备,一种是具有完整功能的设备(FFD),另一种是简化功能的设备(RFD)。 在网络中,FFD通常有3中工作状态:(1)作为个人区域网络(PAN)的主协调器;(2) 作为一个普通协调器;(3)作为一个终端设备。FFD可以同时和多个RFD或其他FFD通信。 而RFD则只用一种工作状态即作为一个终端设备,并且一个RFD只能和一个FFD通信。2.ZigBee的体系结构 ZigBee体系结构主要有物理(PHY)层、媒体接入控制(MAC)层、网络/安全层以及应用框架层构成,如下图所示:

Zigbee组网流程

1、网络形成 组网开始时,网络层首先向MAC层请求分配协议所规定的信道,或者由PHY层进行有效信道扫描,网络层管理实体等待信道扫描结果,然后根据扫描结果选择可允许能量水平的信道。找到合适的信道后,为这个新的网络选择一个个域网标识符(PANID)。PANID可由网络形成请求时指定,也可以随机选择一个PANID(除广播PANID固定为0xFFFF外),PANID 在所选信道中应该是唯一的。PANID一旦选定,无线网关将选择16位网络地址0x0000作为自身短地址,同时进行相关设置。完成设置后,通过MAC层发出网络启动请求,返回网络形成状态。 2、网络维护 网络维护网络维护主要包括设备加入网络和离开网络过程。当网络形成后,通过网络管理实体设定MAC层连接许可标志来判断是否允许其他设备加设备初始化为协调器入网络。加入方式有联合方式和直接方式,在协议实现中采取直接加入网络方式。这种方式下由待加入的设备发送请求加入信标帧,网关接收到后,网络管理实体首先判断这个设备是否已存在于网络。存在,则使其加入网络;若不存在,则向设备发送信标帧,为这个设备分配一个网络中唯一的16位的短地址。这里的信标帧是由网关无线协议MAC层生成作为PHY层载荷,它包含PANID、加入时隙分配等信息。网内设备也可以请求断开网络。当网关收到设备断

开连接请求后,MAC层向网络层发送报告,开始执行断开流程,从设备列表中删除该设备相关信息。 网络层上层请求网络层发现当前在运行的网络: NLME NETWORK DISCOVERY.request(ScanChannels,ScanDuration) ScanChannels:高5为保留(b27~b31),低27为分别表示27个有效信道,该位为1,表示扫描;为0不扫描。 ScanDuration:扫描时间,aBaseSuperframeDuration*(2^n+1),n为ScanDuration值。 网络层在家收到该原语后,将通过检查ScanChannels参数发现网络,如果该设备为一个FFD 设备,则执行主动的扫描。如果为一个RFD设备,倘若设备实现主动扫描,那么他会执行主动的扫描,否则 一个合适的父节点需要满足三个条件:匹配的PAN标志符、链路成本最大为3、允许连接,为了寻找合适的父节点,NLME_JOIN.request原语请求网络层搜索它的邻居表,如果邻居表中不存在这样的父节点则通知上层,如果存在多个合适的父节点则选择具有最小深度的父节点,如果存在多个具有最小深度的合适的父节点则随机选择一个父节点。

ZigBee的工作原理

ZigBee 的工作原理_ZigBee 组网技术ZigBee 是一种高可靠的无线数传网络,类似于CDMA和GSM网络。ZigBee 数传模块类 似于移动网络基站。通讯距离从标准的75m到几百米、几公里,并且支持无限扩展。Zigbee 技术特点主要有低功耗、低成本、时延短、网络容量大、工作频段灵活、低速率、安全的数据传输等。其中低功耗是Zigbee 技术最重要的特点。由于Zigbee 的传输速率相对较低发射功率较小,使得Zig bee 设备很省电,这是Zigbee 技术能够广泛应用的基石。 ZigBee 协议适应无线传感器的低花费、低能量、高容错性等的要求。Zigbee 的基础是IEEE 802.15.4 。但IEEE仅处理低级MAC层和物理层协议,因此Zigbee 联盟扩展了IEEE,对其网络层协议和API 进行了标准化。Zigbee 是一种新兴的短距离、低速率的无线网络技术。主要用于近距离无线连接。它有自己的协议标准,在数千个微小的传感器之间相互协调实现通信。 ZigBee 组网概述 组建一个完整的zigbee 网状网络包括两个步骤:网络初始化、节点加入网络。其中节点加入网络又包括两个步骤:通过与协调器连接入网和通过已有父节点入网。 ZigBee 网络初始化预备 Zigbee 网络的建立是由网络协调器发起的,任何一个zigbee 节点要组建一个网络必须要满足以下两点要求: (1)节点是FFD节点,具备zigbee 协调器的能力; (2)节点还没有与其他网络连接,当节点已经与其他网络连接时,此节点只能作为该网络的子节点,因为一个zigbee 网络中有且只有一个网络协调器。 FFD:Full Func TIon Device 全功能节点 RFD:Reduced Func TI onDevice 半功能节点

Zigbee组网程序

SappleApp.c #include "OSAL.h" #include "ZGlobals.h" #include "AF.h" #include "aps_groups.h" #include "ZDApp.h" #include "SampleApp.h" #include "SampleAppHw.h" #include "OnBoard.h" /* HAL */ #include "hal_lcd.h" #include "hal_led.h" #include "hal_key.h" #include "string.h" #include "MT_UART.h" //#include "Lcd128X64.h" #include "UtOled.h" #include "sensor.h" #include "HAL_ADC.h" #include "exsensor.h" #include "lcd128_64.h" const cId_t SampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS] = { SAMPLEAPP_PERIODIC_CLUSTERID, SAMPLEAPP_FLASH_CLUSTERID }; const SimpleDescriptionFormat_t SampleApp_SimpleDesc = { SAMPLEAPP_ENDPOINT, // int Endpoint; SAMPLEAPP_PROFID, // uint16 AppProfId[2]; SAMPLEAPP_DEVICEID, // uint16 AppDeviceId[2]; SAMPLEAPP_DEVICE_VERSION, // int AppDevVer:4; SAMPLEAPP_FLAGS, // int AppFlags:4; SAMPLEAPP_MAX_CLUSTERS, // uint8 AppNumInClusters; (cId_t *)SampleApp_ClusterList, // uint8 *pAppInClusterList; SAMPLEAPP_MAX_CLUSTERS, // uint8 AppNumInClusters; (cId_t *)SampleApp_ClusterList // uint8 *pAppInClusterList; };

ZigBee的工作原理

ZigBee得工作原理_ZigBee组网技术ZigBee就是一种高可靠得无线数传网络,类似于CDMA与GSM网络。ZigBee数传模块类似于移动网络基站。通讯距离从标准得75m到几百米、几公里,并且支持无限扩展。Zig bee技术特点主要有低功耗、低成本、时延短、网络容量大、工作频段灵活、低速率、安全得数据传输等。其中低功耗就是Zigbee技术最重要得特点。由于 Zigbee得传输速率相对较低发射功率较小,使得Zig bee设备很省电,这就是 Zigbee技术能够广泛应用得基石。 ZigBee协议适应无线传感器得低花费、低能量、高容错性等得要求。Zigbee 得基础就是IEEE 802.15。4、但IEEE仅处理低级MAC层与物理层协议,因此Zigbee联盟扩展了IEEE,对其网络层协议与API进行了标准化。Zigbee就是一种新兴得短距离、低速率得无线网络技术。主要用于近距离无线连接。它有自己得协议标准,在数千个微小得传感器之间相互协调实现通信。 ZigBee组网概述 组建一个完整得zigbee网状网络包括两个步骤:网络初始化、节点加入网络。其中节点加入网络又包括两个步骤:通过与协调器连接入网与通过已有父节点入网。 ZigBee网络初始化预备 Zigbee网络得建立就是由网络协调器发起得,任何一个zigbee节点要组建一个网络必须要满足以下两点要求: (1)节点就是FFD节点,具备zigbee协调器得能力; (2)节点还没有与其她网络连接,当节点已经与其她网络连接时,此节点只能作为该网络得子节点,因为一个zigbee网络中有且只有一个网络协调器。 FFD:Full Func TI on Device 全功能节点 RFD:Reduced FuncTI onDevice半功能节点

ZigBee源码程序及解释

协议栈无线透传编程原理: 第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络 //第一步:Z-Stack 由 main()函数开始执行,main()函数共做了 2 件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统 int main( void ) { ....... // Initialize the operating system osal_init_system(); //第二步,操作系统初始化...... osal_start_system(); //初始化完系统任务事件后,正式开始执行操作系统 ...... } //第二步,进入 osal_init_system()函数,执行操作系统初始化 uint8 osal_init_system( void ) //初始化操作系统,其中最重要的是,初始化操作系统的任务 { // Initialize the Memory Allocation System osal_mem_init(); // Initialize the message queue osal_qHead = NULL; // Initialize the timers osalTimerInit(); // Initialize the Power Management System osal_pwrmgr_init(); // Initialize the system tasks. osalInitTasks(); //第三步,执行操作系统任务初始化函数 // Setup efficient search for the first free block of heap. osal_mem_kick(); return ( SUCCESS ); } //第三步,进入osalInitTasks()函数,执行操作系统任务初始化 void osalInitTasks( void ) //第三步,初始化操作系统任务 { uint8 taskID = 0; tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

Zigbee网络设备启动流程—协调器(自启动模式)

使用的协议栈版本信息: ZigBee2006\ZStack-1.4.3-1.2.1 Zigbee网络设备启动流程—协调器(自启动模式)—以SampleApp的协调器为例. 1、协调器预编译信息 通过project->options->c/c++compiler->extraOptions可以看到协调器所带的配置文件为: -f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg -f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wConfig.cfg 即编译了ZDO_COORDINATOR和RTR_NWK. 通过project->options->c/c++compiler->reprocessor->Defined symbols可以看到协调器预编译包含了: CC2430EB; ZTOOL_P1; MT_TASK; LCD_SUPPORTED=DEBUG; MANAGED_SCAN 没有编译HOLD_AUTO_START和SOFT_START. 2、具体流程 main()->osal_init_system()->osalInitTasks()->ZDApp_Init() 进入ZDApp_Init()函数: ************************************** void ZDApp_Init( byte task_id ) { uint8 capabilities; // Save the task ID ZDAppTaskID = task_id; // Initialize the ZDO global device short address storage ZDAppNwkAddr.addrMode = Addr16Bit; ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR; //0xFFFE (void)NLME_GetExtAddr(); // Load the saveExtAddr pointer. // Check for manual"Hold Auto Start" //检测到有手工设置SW_1则会设置devState = DEV_HOLD,从而避开网络初始化 ZDAppCheckForHoldKey(); // Initialize ZDO items and setup the device - type of device to create. ZDO_Init(); //通过判断预编译来开启一些函数功能 // Register the endpoint description with the AF // This task doesn't have a Simple description, but we still need // to register the endpoint. afRegister( (endPointDesc_t *)&ZDApp_epDesc ); #if defined( ZDO_USERDESC_RESPONSE ) ZDApp_InitUserDesc(); #endif // ZDO_USERDESC_RESPONSE // set broadcast address mask to support broadcast filtering NLME_GetRequest(nwkCapabilityInfo, 0, &capabilities); NLME_SetBroadcastFilter( capabilities ); // Start the device? if ( devState != DEV_HOLD ) { ZDOInitDevice( 0 ); }

zigbee网络建立过程简介(G1)知识讲解

z i g b e e网络建立过程 简介(G1)

星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。 一、协调器初始化网络 协调器建立一个新网络的流程如图1所示。 图1 协调器建立一个新网络 1、检测协调器 建立一个新的网络是通过原语NLME_NETWORK_FORMATION.request发起的,但发起 NLME_NETWORK_FORMATION.request原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的 NLME_NETWORK_FORMATION.confirm的原语来通知上层这是一个非法请求。 2、信道扫描 协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。信道扫描包括能量扫描和主动扫描两个过程。首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内的信道等待进一步处理。接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数仠为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。 3、配置网络参数

Zigbee组网实验报告

Zigbee组网实验 一.实验目的 1.了解zigbee网络 2.掌握zigbee节点程序下载方式 3.掌握如何组建zigbee星状网络 二.实验意义 通过实验了解zibee网络的特点,体会其组网及通信过程 三.实验环境 PC机一台(内安装IAR环境) 智能网关一个 ZigBee节点 ZigBee仿真器一套 四.实验原理 每一个星状网络中只有一个协调器,当协调器被激活后,它就会建立一个自己的网络。其它位于协调器附近的zigbee节点,如果与该协调器处于同一信道,则会自动加入到该网络当中。 五.实验步骤 一、认识实验设备以及下载设备连接 连接线路如图所示: 二、Zigbee网络组建

1、协调器下载 协调器在本套智能家居系统中担任信息收集与传输的工作,它和每个ZigBee模块进行无线通讯,并将信息传送给智能网关,同时也将网关的控制指令发送给各个模块。 我们首先将一个ZigBee模块下载成协调器,具体步骤如下: (1)打开“\实验程序\协调器\Projects\zstack\Samples\collector SimpleApp 1.25\ CC2430DB\SimpleApp.eww”。如图1-6所示: (2)不同的实验小组选择自己所分配的信道。点击左侧的文件导航栏,找到tools文件夹,打开其中的文件f8wConfig.cfg,找到自己小组的信道,将行的注释去掉,并且确认其他各个信道代码均为注释状态。 更改完信道之后,在菜单栏中选择Project\Rebuild All进行编译,编译完成后生成的HEX 文件保存在\实验程序\协调器 \Projects\zstack\Samples\collectorSimpleApp1.25\CC2430DB\SimpleCollectorEB\Exe 中。 (3)更改完信道之后,在菜单栏中选择Project\Rebuild All进行编译,编译完成后生成的HEX文件保存在\实验程序\协调器 \Projects\zstack\Samples\collectorSimpleApp1.25\CC2430DB\SimpleCollec torEB\Exe中; (4)打开smartRF下载软件,如图所示,按照图将下载设备的各个线连接好,之后按一下下载器(也就是白色盒子)上面的黑色按钮,则下载界面中将会识别到要与下载器相连接的zigbee模块芯片,如图所示,对相关条件进行勾选; 2.其它zigbee终端节点的下载 Zigbee终端节点在上电后自动加入到处于同一信道的zigbee协调器所组建的zigbee网络当中。

Zigbee整理培训资料

第一章 1. Zigbee的定义: Zigbee是一种近距离、低复杂度、低功耗、低成本的双向无线通信技术。 2. Zigbee的基础是IEEE802.15.4,但是IEEE802.15.4仅处理低级的MAC(媒体接入控制协议)层和物理层协议,Zigbee联盟对网络层协议和应用层协议进行了标准化。 3. Zigbee芯片为CC243X系列、MC1322X系列和CC253X系列 常见的CC2420、CC2430、CC2431、CC2530 4.无线传感器网络与Zigbee的关系 *从协议标准来讲,目前大多数无线传感器网络的物理层和MAC层都采用IEEE802.15.4的协议标准. IEEE802.15.4描述了低速率无线个人局域网的物理层和媒体接入控制(MAC)层协议,属于 IEEE802.15.4工作组,而Zigbee技术是基于IEEE802.15.4标准的无线技术。 *从应用上来讲,Zigbee适用于通信数据量不大、数据传输速率相对较低,成本较低的携带或移动设备。这些设备只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另外一个传感器,并能实现传感器之间的组网,实现无线传感器网络分布式、自组织和低功耗的特点。 5. Zigbee的技术特点:低功耗、低成本、大容量、可靠、延时短、灵活的网络拓扑结构 6. Zigbee支持星型、树型和网状型拓扑结构,既可以单跳,又可以通过路由实现多跳的数据传输。 7. CC253X系列芯片大致由三部分组成:CPU和内存相关模块、外设、时钟和电源管理相关模块,无线电相关模块。 8.32/64/125/256KB闪存块 9.常见的Zigbee协议栈分为3种:非开源的协议栈、半开源的协议栈和开源的协议栈。第二章

ZigBee协议栈初始化网络启动流程

ZigBee协议栈初始化网络启动流程 ZigBee的基本流程:由协调器的组网(创建PAN ID),终端设备和路由设备发现网络以及加入网络。 基本流程:main()->osal_init_system()->osalInitTasks()->ZDApp_Init(),进协议栈初始化函数ZDApp_Init()。 进入程序入口main()。 中 C++ Code int main( void ) { */ WatchDogEnable( WDTIMX ); #endif osal_start_system(); } ZDO_Init(); afRegister( (endPointDesc_t *)&ZDApp_epDesc ); #if defined( ZDO_USERDESC_RESPONSE ) ZDApp_InitUserDesc(); #endif zgInitItems( FALSE ); } ZDConfig_InitDescriptors(); zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );

} #if defined ( NV_RESTORE ) if ( HalKeyRead() == SW_BYPASS_NV ) networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; else { On these devices or routers that have If the zgDefaultChannelList = MAX_CHANNELS_24GHZ; } #endif If the PAN is not found, an scan should be completed // When devices rejoin the network and the PAN is not found from zgDefaultChannelList = MAX_CHANNELS_24GHZ; } #endif // ZIGBEE_COMMISSIONING #endif } else if ( startMode == MODE_RESUME ) { if ( logicalType == NODETYPE_ROUTER )

第8讲 ZigBee组网流程报告

ZigBee网络关键技术研究 0 引言 20世纪六七十年代,计算资源放在计算中心,计算机的体积庞大;80年代,个人计算机普及,借助网络通信,实现资源共享、信息互通;90年代随着无线电话的普及,无线通信技术得到发展。现在常见的几种近距离无线通信技术: (1)WiFi:即IEEE802.11x,提供无线局域网的接入 (2)蓝牙:工作在2.4GHz的频段 (3)红外线数据通信IrDA:利用红外线进行点对点通信 (4)ZigBee:近距离无线通信技术,以2.4GHz为主要频段,采用扩频技术 Zigbee是IEEE 802.15.4协议的代名词,是一种短距离、低功耗的无线通信技术。其特点是近距离、低复杂度、自组织、低功耗、低数据速率、低成本。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。 Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里。 1 ZigBee网络拓扑结构 Zigbee协议标准中定义了三种网络拓扑结构形式:星状结构,树状结构,网状结构。星形网络和树型网络可以看成是网状网络的一个特殊子集,网络拓扑结构是最常用的结构形式。如图1所示,

图1 ZigBee网络拓扑结构图 Zigbee网络只支持2种物理设备;全功能设备(FFD,Full Function Device)和精简功能设备(RFD,Reduced FunctionDevice), 其中FFD设备可提供全部服务,可充当任何Zigbee节点,不仅可以发送和接收数据,还具有路由功能,因此可以接收子节点;而RFD设备只提供部分服务,只能充当终端节点,不能充当协调器和路由节点,它只负责将采集的数据信息发送给协调器和路由节点,并不具备路由功能,因此不能接收子节点,并且RFD之间的通信必须通过FFD才能完成。Z igbee 标准在此基础上定义了三种节点:Zigbee协调点(Coordinator)、路由节点(Router)和终端节点(EndDevice)。 总结起来,可为协调点、路由节点必须为FFD设备,终端节点可为FFD设备也可为RFD 设备。 2 ZigBee模块的组网 Zigbee网络具有三种网络形态节点:Coordinator(中心协调器),Router(路由器),End Device(终端节点)。 Coordinator(中心协调器),用来创建一个Zigbee网络,当有节点加入时,分配地址给子节点,Coordinator通常定义为不能掉电的设备,没有低功耗状。每个Zigbee网络需要且仅需要一个Coordinator,不同网络的PAN ID(网络ID号)应该不一样,如果在同一空间存在二个Coordinator,如果它们初始的PAN ID一样,则后上电的Coordinator的PAN ID会自动加一,以免引起PAN ID冲突。

zigbee网络建立过程

芦苇地带 https://www.360docs.net/doc/8412733046.html,/ Blog Subject - 分 类 首页 相册 标签 FPGA 学习(12) 个人生活(16) C 语言(0) 网络转载(6) PCB(6) Verilog(1) ZigBee(18) STM32(2) New Log - 日 志 师兄毕业了,工作一帆风顺~ 为什么51系列单片机常用11.059 项目日志——ZigBee 通信模块测试 项目日志——ZigBee 天线研究【转 闲话生活——2011年开始了 闲话生活——平安夜不平安 项目日志——ZigBee 测试结果 闲话生活——年底了,该做总结了 STM32学习——Q-OS 的画图板应闲话生活——记录俺调试的CCD 板子和 Log Reply - 回 复 Re:闲话生活——年底了,该做总结了 Re:自学单片机四个月感想 Re:【转】FPGA 学习的一些误区 Re:【转】FPGA 学习的一些误区 Re:【转】FPGA 学习的一些误区 请教几个问题 Re:闲话生活——最近很喜欢的一 首歌 Re:闲话生活——最近很喜欢的一首歌 Re:[转]对FPGA 认识、学习和进 Re:[转]对FPGA 认识、学习和进 Blog Links - 链 接 项目日志——Z-STACK 网络建立过程 芦苇 发表于 - 2010-10-13 12:11:00 先看看Packet Sniffer 抓取的网络建立过程的图片,这里有一个Coordinator 和一个Router 。 从上面可以看到建立网络的整个过程如下 1.Coordinator 首先上电,完成网络的初始化,选择一个合适的信道,并且为自择一个PAN_ID(网络标识符),然后周期的向周围发生beacon request 的包。 2.这时间将Router 上电,这样Router 会首先向周围的环境做一个信道能量扫描选量比较合适的信道进行网络搜寻。这里需要注意的是信道能量是有一个等级的K 里面会有一个门限值,当这个能量低于这个门限会被认为没有网络,在这不我久。当信道选择好之后,Router 也会周期性的向周围发送beacon request 的包来dinator 的回复。 3.当Coordinator 接受到Router 的beacon request 包之后会发送一个包含自己IE 址的超帧。主要目的是为了将自己的MAC 地址(64位)交给Router ,以便后续的 4.Router 接受到超帧之后,将Coordinator 的MAC 地址保存,并利用这个地址向C 发生 个A i ti R t 的包 这个包目的是寻求加入网络 收到 C

ZigBee组网小实验1

ZigBee组网小实验1 (实验所用程序在SampleApp基础上修改) 终端经路由器入网: 首先把协调器和两个终端的天线拔掉,以大幅减小传输距离,把两个终端放到稍远或障碍物多的地方,使协调器数据传输不到终端。测试,两个终端入不了网。 然后把路由器放到协调器和终端中间某一处。启动协调器,启动路由器,最后再启动两终端,测试,两个终端入网成功,网络地址分别为0x1430和0x1431,路由器网络地址为0x0001,协调器串口广播发送数据,路由器和两个终端成功接收到。 最后,再把路由器关闭,数据发送不成功,并且两终端的灯已经一闪一闪,与网络断开了。 各串口依次为:协调器/路由器/其中一个终端(路由器执行两次扫描入网) 左那只:路由器右边两只:终端协调器:天线拔掉

终端未经路由器入网: 节点保持原来位置,但把协调器和两个终端的天线重新安上,以增加传输距离。 启动协调器,启动路由器,最后再启动两终端,测试,两终端入网成功,网络地址分别为0x796F和0x79 70,路由器网络地址为0x0001,协调器串口广播发送数据,路由器和两个终端成功接收到。 把路由器关闭,协调器串口广播发送数据,两终端同样成功接收。 各串口依次为:协调器/路由器/其中一个终端(路由器执行两次扫描入网)

用无线龙的网络监控软件来查看拓扑图,不过因为电脑上串口的原因,监控软件只有com1~com9,而我这小电脑上经常是com10+,因此调整下相应模块的节点类型,然后下载与其配套的的SampleApp例子再次组网,以下拓扑图不代表上面两种网络。协调器和绿色网络线连接的那个路由器都是无线龙的两块老板子,明显很扛的!~ 图1:两个终端经过路由器入网(把模块的天线拔了,信号强度明显下降,网络线呈红色)

ZigBee组网实验

ZigBee组网实验 修订记录 版本修订说明修订者修订日期V1.0 初稿xux 2014-03-26 南京未来星传感技术有限公司 2014年3月

实验二十一节点无线聊天实验 前言:节点无线聊天即传统的串口透传,这个名词相信大家在看ZigBee相关资料时经常会看到,透传到底是什么呢?电脑A和电脑B通过串口相连,相互发送信息,现在我们将电脑A和B连接Zigbee模块,再用串口收发信息,ZigBee的作用就相当于把有线信号转化成无线信号。这样我们电脑前面操作一样的,但是已经变成无线传输了,这就是串口透传!如图所示: 实验平台:未来星CC2530模块及功能底板个两块(一个协调器,一个终端) 实验现象:两台不同的PC机通过串口连接到未来星开发板,打开串口调试助手,设置好波特率等参数。相互收发信息。没有2台电脑也可以同一台电脑的不同串口进行试验。 实验讲解:试验使用我们熟悉的SampleApp.eww工行来进行。在前面我们曾做过串口实验和数据无线传输,这次试验是这两个试验的一个结合。不过协议栈的串口接收有特定的格式,我们得了解一下它的传输机制。先理清我们要实现这个功能的流程:由于2台PC机所带的模块地位是相等的,所以两个模块的程序流程也一样: 1、zigBee模块接收到从PC机发送信息,然后无线发送出去 2、ZigBee模块接收到其它ZigBee模块发来的信息,然后发送给PC机 我们打开Z-stack目录Projects\zstack\Samples\SampleApp\CC2530DB 里面的SampleApp.eww工程。这次试验我们基于协议栈的SampleApp来进行。

zigbee组网过程

int main( void ) { // Initialize the operating system osal_init_system(); //初始化操作系统 ... } OSAL.c uint8 osal_init_system( void ) { // Initialize the system tasks. osalInitTasks(); // 初始化任务 } OSAL_SampleLight.c void osalInitTasks( void ) { uint8 taskID = 0; ZDApp_Init( taskID++ ); zcl_Init( taskID++ ); zclSampleLight_Init( taskID++ ); } ZDApp.c void ZDApp_Init( uint8 task_id ) { ZDAppTaskID = task_id; ZDAppNwkAddr.addrMode = Addr16Bit;//地址模式为16bit短地址 ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;//短地址=0xFFFE (void)NLME_GetExtAddr(); //API函数,用于得到64bit IEEE地址 afRegister( (endPointDesc_t *)&ZDApp_epDesc ); //为设备注册端点0描述符 ZDO_Init(); //初始化ZDO 物件,并且设置设备 if ( devState != DEV_HOLD ) // 无HOLD_AUTO_START此项预编译,所以devState = DEV_INIT { ZDOInitDevice( 0 ); } ZDApp_RegisterCBs(); //注册ZDO 消息,只有注册了的消息才能以ZDO_CB_MSG 消息的形式发送给指定的任务}

相关文档
最新文档