ZigBee无线传感器网络拓朴结构获取实验.docx
- 文档编号:1863250
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:13
- 大小:214.12KB
ZigBee无线传感器网络拓朴结构获取实验.docx
《ZigBee无线传感器网络拓朴结构获取实验.docx》由会员分享,可在线阅读,更多相关《ZigBee无线传感器网络拓朴结构获取实验.docx(13页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ZigBee 无线 传感器 网络 拓朴 结构 获取 实验