ZigBee无线传感器网络拓朴结构获取实验.docx

上传人:b****2 文档编号:1863250 上传时间:2022-10-24 格式:DOCX 页数:13 大小:214.12KB
下载 相关 举报
ZigBee无线传感器网络拓朴结构获取实验.docx_第1页
第1页 / 共13页
ZigBee无线传感器网络拓朴结构获取实验.docx_第2页
第2页 / 共13页
ZigBee无线传感器网络拓朴结构获取实验.docx_第3页
第3页 / 共13页
ZigBee无线传感器网络拓朴结构获取实验.docx_第4页
第4页 / 共13页
ZigBee无线传感器网络拓朴结构获取实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

ZigBee无线传感器网络拓朴结构获取实验.docx

《ZigBee无线传感器网络拓朴结构获取实验.docx》由会员分享,可在线阅读,更多相关《ZigBee无线传感器网络拓朴结构获取实验.docx(13页珍藏版)》请在冰豆网上搜索。

ZigBee无线传感器网络拓朴结构获取实验.docx

ZigBee无线传感器网络拓朴结构获取实验

 

实验报告

(201/201学年第学期)

 

实验名称

ZigBee无线传感器网络获取网络拓扑结构实验

实验时间

2015年11月-2015年12月

指导单位

计算机学院

指导教师

李洋

 

学生姓名

张智超

班级学号

B14040923

学院(系)

计算机学院

专业

软件工程

 

实验报告

实验名称

ZigBee无线传感器网络获取网络拓扑结构实验

指导教师

李洋

实验类型

自行设计(科研型)

实验学时

16

实验时间

2015.11-2015.12

一、实验目的和要求

1.实验目的

了解网络地址的分配方法,掌握获取节点地址的方法,掌握无线传感器网络的拓扑结构。

2.实验内容

(一)设计指标:

1、编写程序建立无线传感器网络;

2、编写程序将自身的网络地址以及父节点网络地址发送给协调器;

3、编写程序实现串口控制命令;

4、编写程序将各个节点的网络地址以及父节点的网络地址显示在PC机上;

(二)实验要求:

1、设计不同拓扑结构的无线传感器网络;

2、设计串口回调函数实现串口对网络控制;

3、设计网络地址获取程序;

4、设计各个节点的数据处理函数;

5、设计协调节点与上位机的串口通信程序;

二、实验环境(实验设备)

硬件:

PC机,CC2530传感器,IAR开发环境

三、实验架构和原理及实验步骤:

1.实验原理

(1)ZigBee按照网络节点功能划分可分为终端节点(ep)、路由器节点(rp)和协调器节点(cp)3种。

其中,协调器(coordinator)是整个网络的核心,主要作用是启动网络,其方法是选择一个相对空闲的信道,形成一个PANID。

协助建立网络中的安全层及处理应用层的绑定。

当整个网络启动和配置完成之后,它的功能退化成一个协调器。

路由器(router)主要功能是提供接力作用,能扩展信号的传输范围,因此一般情况下他应该一直处于活动状态,不应休眠。

终端节点(end-device)加入已建立的网络即可,终端节点不具有网络维护功能。

(2)ZigBee无线传感器网络组网过程包括两个步骤:

主节点举起网络和子节点申请加入网络。

采用的是分布式分配机制:

协调器在建立网络之后使用0x0000作为自己的网络地址。

在路由器和终端加入网络以后,设备会自动给他分配16位的网络地址。

(3)获取拓扑结构的大致思路为:

(4)可能用到的函数

uint16NLME_GetShortAddr(void)

该函数返回该节点的网络地址

byte*NLME_GetExtAddr(void)

获取设备自身IEEE地址

uint16NLME_GetCoordShortAddr(void)

获取父设备网络地址 

voidNLME_GetCoordExtAddr(byte*buf)

获取父设备IEEE地址

3.实验步骤:

(1)修改PAN_id。

网络编号,用于区分不同的ZigBee网络。

在文件f8wConfig.cfg中找到

-DZDAPP_CONFIG_PAN_ID=0xFFFF,将0xFFFF修改为本组编号0x2008。

(2)获取当前节点代码的网络地址以及其父节点的网络地址的代码

staticvoidBroadcast_SendBackMessage()

{

unsignedchar*theMessageData,s[200];

uint16i=0,n=0;

uint16mod=0;

uint16FaAdd,a;

if(Broadcast_NwkState==DEV_END_DEVICE)

{

unsignedchars1[10],s2[10];//存储当前节点以及父节点的地址

FaAdd=NLME_GetCoordShortAddr();//获取十进制的父节点地址

a=NLME_GetShortAddr();//十进制的当前节点地址

strcpy(s,"END_DEVICE:

");

while(a)//将当前节点地址转化为字符串

{

mod=a%16;

if(mod<=9)

*(s1+i)=mod+'0';

else

*(s1+i)=mod+55;

i++;

a/=16;

}

s1[i]='\0';

n=strlen(s1);

if(n<=3)

strcat(s1,"0");

for(i=0;i

{

chart;

t=s1[i];

s1[i]=s1[n-1-i];

s1[n-1-i]=t;

}

strcat(s,s1);

i=0;

if(!

FaAdd)//将父节点地址转化为字符串

{

strcpy(s2,"0000");

i=4;

}

while(FaAdd)

{

mod=FaAdd%16;

if(mod<=9)

*(s2+i)=mod+'0';

else

*(s2+i)=mod+55;

i++;

FaAdd/=16;

}

s2[i]='\0';

n=strlen(s2);

if(n<=3)

strcat(s2,"0");

for(i=0;i

{

chart;

t=s2[i];

s2[i]=s2[n-1-i];

s2[n-1-i]=t;

}

strcat(s,"Father:

");

strcat(s,s2);

}

if(Broadcast_NwkState==DEV_ROUTER)

{

unsignedchars1[20],s2[20];

strcpy(s,"ROUTER:

");

FaAdd=NLME_GetCoordShortAddr();

a=NLME_GetShortAddr();

while(a)

{

mod=a%16;

if(mod<=9)

*(s1+i)=mod+'0';

else

*(s1+i)=mod+55;

i++;

a/=16;

}

s1[i]='\0';

n=strlen(s1);

if(n<=3)

strcat(s1,"0");

for(i=0;i

{

chart;

t=s1[i];

s1[i]=s1[n-1-i];

s1[n-1-i]=t;

}

strcat(s,s1);

i=0;

if(!

FaAdd)

{

strcpy(s2,"0000");

i=4;

}

while(FaAdd)

{

mod=a%16;

if(mod<=9)

*(s2+i)=mod+'0';

else

*(s2+i)=mod+55;

i++;

FaAdd/=16;

}

s2[i]='\0';

n=strlen(s2);

if(n<=3)

strcat(s2,"0");

for(i=0;i

{

chart;

t=s2[i];

s2[i]=s2[n-1-i];

s2[n-1-i]=t;

}

strcat(s,"Father:

");

strcat(s,s2);

}

theMessageData=s;

afAddrType_tmy_DstAddr;

my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;

my_DstAddr.endPoint=BROADCAST_ENDPOINT;

my_DstAddr.addr.shortAddr=0X0000;

if(AF_DataRequest(&my_DstAddr,&Broadcast_epDesc,

BROADCAST_BACK_CLUSTERID,

(byte)osal_strlen(theMessageData),

theMessageData,

&Broadcast_TransID,

AF_DISCV_ROUTE,AF_DEFAULT_RADIUS)==afStatus_SUCCESS)

{

//Successfullyrequestedtobesent.

HalLedBlink(HAL_LED_2,4,50,100);

}

else

{

//Erroroccurredinrequesttosend.

}

}

(3)无线数据发送函数

staticvoidBroadcast_SendTheMessage(void)

{

uint8*theMessageData="CoordinatorSend!

";

afAddrType_tmy_DstAddr;

my_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;

my_DstAddr.endPoint=BROADCAST_ENDPOINT;

my_DstAddr.addr.shortAddr=0XFFFF;

if(AF_DataRequest(&my_DstAddr,&Broadcast_epDesc,

BROADCAST_CLUSTERID,

(byte)osal_strlen(theMessageData),

theMessageData,

&Broadcast_TransID,

AF_DISCV_ROUTE,AF_DEFAULT_RADIUS)==afStatus_SUCCESS)

{

//Successfullyrequestedtobesent.

HalLedBlink(HAL_LED_1,4,50,1000/4);//成功发送数据后红灯闪烁

}

else

{

//Erroroccurredinrequesttosend.

}

}

staticvoidBroadcast_MessageMSGCB(afIncomingMSGPacket_t*pkt)//将数据发送到串口

{

switch(pkt->clusterId)

{

caseBROADCAST_CLUSTERID:

if(osal_memcmp(pkt->cmd.Data,"CoordinatorSend!

",osal_strlen("CoordinatorSend!

")))

{

Broadcast_SendBackMessage();

}

break;

caseBROADCAST_BACK_CLUSTERID:

HalUARTWrite(0,pkt->cmd.Data,pkt->cmd.DataLength);

HalUARTWrite(0,"\r\n",2);

//Ha

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1