ZigBee无线传感器网络拓朴结构获取实验Word格式文档下载.docx
- 文档编号:13162952
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:13
- 大小:169.86KB
ZigBee无线传感器网络拓朴结构获取实验Word格式文档下载.docx
《ZigBee无线传感器网络拓朴结构获取实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ZigBee无线传感器网络拓朴结构获取实验Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
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<
n/2;
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;
*(s2+i)=mod+'
*(s2+i)=mod+55;
FaAdd/=16;
s2[i]='
n=strlen(s2);
strcat(s2,"
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];
ROUTER:
FaAdd=NLME_GetCoordShortAddr();
while(a)
{
strcat(s,s1);
i=0;
if(!
FaAdd)
while(FaAdd)
{
mod=a%16;
}
s2[i]='
strcat(s,"
Father:
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(&
BROADCAST_CLUSTERID,
(byte)osal_strlen(theMessageData),
theMessageData,
&
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,"
osal_strlen("
)))
{
Broadc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ZigBee 无线 传感器 网络 拓朴 结构 获取 实验