zigbee实验报告.docx

上传人:b****3 文档编号:4674864 上传时间:2022-12-07 格式:DOCX 页数:11 大小:268.76KB
下载 相关 举报
zigbee实验报告.docx_第1页
第1页 / 共11页
zigbee实验报告.docx_第2页
第2页 / 共11页
zigbee实验报告.docx_第3页
第3页 / 共11页
zigbee实验报告.docx_第4页
第4页 / 共11页
zigbee实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

zigbee实验报告.docx

《zigbee实验报告.docx》由会员分享,可在线阅读,更多相关《zigbee实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

zigbee实验报告.docx

zigbee实验报告

《接入技术课题报告》

学院:

计算机与信息学院

 

专业班级:

通信工程一班

 

课题名称:

Zigbee实现树状网络

日期:

2014年5月9日

 

课题任务:

1.用zigbee开发套件实现zigbee设备的组网;

2.了解PAN协调器的启动过程;

3.了解路由器与设备加入网络的过程;

4.通过zigbee网络传输温度与湿度的数据;

5.理解Z-stack的协议架构;

6.用抓包器分析MAC帧的内容。

课题结果:

任务1:

用zigbee开发套件实现zigbee设备的组网

Zigbee组网就是调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加

入。

组网可有多种方案而且还有不同的拓扑结构,如任务4中我们所建立的数据传输网络也是其中的一部分。

详见任务4。

任务2:

了解PAN协调器的启动过程

建立网络是一个自动的过程,协调器在应用指定的网络信道范围内进行能量扫描,通过在各个信道上进行监听,获取各信道能量水平。

协调器会选择一个干扰和冲突最少的信道建立网络。

确定了工作信道后,设备可以进一步设置其余网络参数,包括PAN标识,网络地址,扩展PAN标识等。

应用层通过NLME-NETWORK-FORMATION.request触发网络层进行网络建立过程。

原语包括扫描信道,扫描时间,信标阶,超帧阶,电池寿命扩展标志等参数。

网络建立的具体过程:

调用MAC层MLME-SCAN原语先后进行能量扫描和主动扫描,在选择好信道、PAN标识等参数后调用NLME-SET原语先后对参数进行设置,最后通过MLME-START原语启动协调器。

具体过程如下:

ZSEGintmain(void)

{

……

//初始化操作系统

osal_init_system();

……

}

OSAL.c

byteosal_init_system(void)

{

……

//初始化系统的任务

osalInitTasks();

……

}

OSAL_SampleApp.c

voidosalInitTasks(void)

{

……

ZDApp_Init(taskID++);

SampleApp_Init(taskID);

}

ZDApp.c

voidZDApp_Init(bytetask_id)

{

ZDAppTaskID=task_id;

//InitializetheZDOglobaldeviceshortaddressstorage

ZDAppNwkAddr.addrMode=Addr16Bit;//地址模式为16bit短地址

ZDAppNwkAddr.addr.shortAddr=INVALID_NODE_ADDR;//短地址=0xFFFE

(void)NLME_GetExtAddr();//API函数,用于得到64bitIEEE地址

//InitializeZDOitemsandsetupthedevice-typeofdevicetocreate.

ZDO_Init();

afRegister((endPointDesc_t*)&ZDApp_epDesc);//为设备注册端点0描述符

//Startthedevice?

if(devState!

=DEV_HOLD)//无HOLD_AUTO_START此项预编译,所以devState=DEV_INIT

{

ZDOInitDevice(0);

}

ZDApp_RegisterCBs();

}

ZDApp.c

uint8ZDOInitDevice(uint16startDelay)

{

uint8networkStateNV=ZDO_INITDEV_NEW_NETWORK_STATE;//0x01,初始化该设备新的网络状态

devState=DEV_INIT;//无连接

ZDAppDetermineDeviceType();//确定该设备的类型

extendedDelay=(uint16)((NWK_START_DELAY+startDelay)

+(osal_rand()&EXTENDED_JOINING_RANDOM_MASK));//加入网络的时延

ZDApp_NetworkInit(extendedDelay);//开始形成网络

}

ZDApp.c

voidZDApp_NetworkInit(uint16delay)

{

if(delay)

{

//Waitawhilebeforestartingthedevice

osal_start_timerEx(ZDAppTaskID,ZDO_NETWORK_INIT,delay);

}

else

{

osal_set_event(ZDAppTaskID,ZDO_NETWORK_INIT);

}

}

UINT16ZDApp_event_loop(bytetask_id,UINT16events)

{

if(events&ZDO_NETWORK_INIT)//网络初始化事件处理

{

//Initializeappsandstartthenetwork

devState=DEV_INIT;

ZDO_StartDevice((uint8)ZDO_Config_Node_Descriptor.LogicalType,devStartMode,

DEFAULT_BEACON_ORDER,DEFAULT_SUPERFRAME_ORDER);

HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);//点亮LED1表示网络初始化完成。

ZDObject.c

voidZDO_StartDevice(bytelogicalType,devStartModes_tstartMode,bytebeaconOrder,bytesuperframeOrder)

{

devState=DEV_COORD_STARTING;

ret=NLME_NetworkFormationRequest(zgConfigPANID,zgDefaultChannelList,

zgDefaultStartingScanDuration,beaconOrder,superframeOrder,false);

……

}

任务3:

了解路由器与设备加入网络的过程

zigbee协调器设备建立网络后,路由器设备或者终端设备,可以加入协调器建立的网络,具体加入网络有两种方式,一种是通过关联方式,就是待加入的设备发起加入网络,具体实现方式后面讨论,另一中是直接方式,就是待加入的设备具体加入到那个设备下,作为该设备的子节点,由以前网络中的设备,想待加入的设备作为其子设备决定。

由于我们一般都用方式一所以我们只了解方式一。

加入一个设备,是两个设备的事,即子设备和待定父设备,对于子设备,首先子设备调用NLME-NETWORK-DISCOVERY.request原语,设定待扫描的信道,以及每个信道扫描的时间,网络层收到这个原语,将要求MAC层执行被动或主动扫描。

 具体发送到设备外的是一个beconrequest帧,当在这个信道中的设备收到该帧,将会发送becon帧,这是子设备通过BEACON-NOTIFY.indication原语,告知该设备的MAC层,该becon帧包含了发送该帧的地址信息,以及是否允许其他设备以其子节点的方式加入。

待加入的设备,在网络层,将检查该becon帧协议ID是否是zigbeeID。

如果不是,将忽略;如果是,该设备将复制收到每个becon帧的相关信息到其关联表中(neighbortable)。

一旦MAC层完成了扫描,将发送MLME-SCAN.confirm原语,告知网络层,网络层将发送NLME-NETWORK-DISCOVERY.confirm原语,告知应用层。

 应用层收到该原语,应用层将根据情况,要么重新要求扫描,或者从关联表中选择所发现的网络加入。

调用NLME-JOIN.request原语,原语中各个参数的设置参看协议。

如果在关联表中找不到合适的准父节点,将调用原语告知应用层,如果由多个设备可以满足要求,将选择到协调器节点深度最低的设备,如果有几个设备的深度相同,且都是最小深度,将从中随机选择一个。

 一旦潜在的父节点确定,网络层将调用MLME-ASSOCIATE.request原语到MAC层。

具体设置参看协议相关部分,连接状态将通过MLME-ASSOCIATE.confirm原语反馈。

 如果试图加入不成功,网络层将收到MAC层通过MLME-ASSOCIATE.confirm告知的加入失败,如果收到的是潜在父节点拒绝该设备加入,这时候,网络层将会在关联表中,把该潜在父节点的相应部分,潜在父节点位(potentialparentbit)置为零,确保网络层,不再给这个设备二次发送加入请求。

 如果一次加入没成功,将选择另一个潜在的父节点加入,指导找到一个合适的设备加入或者所有的设备都不适合。

如果加入成功,网络层收到的MLME-ASSOCIATE.confirm原语,将含有该设备可用的16唯一的逻辑地址,网络层将在关联表中设置与其父节点的关系,同时,这个父节点也会在其关联表中加入这个新设备。

 如果是以路由器(router)形式成功加入网络,该设备的应用层将发送NLME-STAT_ROUTER. request原语,网络层将发送MLME-STAT.request 原语到MAC层。

收到了MLME-START.confirm原语,网络层将发送 NLME-START-ROUTER.confirm原语,含有同样的状态值。

对于父节点设备:

 只有协调器或路由器,可以加入设备,进行该操作,首先从MAC层开始,MAC接收到一帧(ASSOCIATE)数据 ,通过MLME_ASSOCIATE.indication原语传到网罗层,潜在的父节点收到这帧数据,首先判断该设备是否已经存在其关联表中,如果找到,NLME将获取相应的16位网络地址,并发送association response到MAC层,如果没有找到,将分配一个在这个网络中唯一的地址给待加入的设备,如果潜在父节点已经用完了地址分配,NLME将中止,通过MLME-ASSOCIATE.reponse原语,告知该设备,不能接收子设备了,在多跳网络中,其他的设备还可以接收。

 如果设备加入得到许可,这时候,将在关联表中创建一个表项,作为其子节点,并通过MLME-ASSOCIATE.reponse原语,告知该设备,已经成功加入网络。

代码:

路由器入网

ZDObject.c

voidZDO_StartDevice(bytelogicalType,devStartModes_tstartMode,bytebeaconOrder,bytesuperframeOrder)

{

devState=DEV_NWK_DISC;

ret=NLME_NetworkDiscoveryRequest(zgDefaultChannelList,zgDefaultStartingScanDuration);

……

}

终端设备入网

ZDObject.c

voidZDO_StartDevice(bytelogicalType,devStartModes_tstartMode,bytebeaconOrder,bytesuperframeOrder)

{

devState=DEV_NWK_DISC;

ret=NLME_NetworkDiscoveryRequest(zgDefaultChannelList,zgDefaultStartingScanDuration);

……

}

任务4:

通过zigbee网络传输温度与湿度的数据

代码如下:

#include

#include

#include"UART.H"

#include"DHT11.H"

voidmain(void)

{

Delay_ms(1000);//让设备稳定

InitUart();//串口初始化

while

(1)

{

DHT11();//获取温湿度

P0DIR|=0x40;//IO口需要重新配置

/******温湿度的ASC码转换*******/

temp[0]=wendu_shi+0x30;

temp[1]=wendu_ge+0x30;

humidity[0]=shidu_shi+0x30;

humidity[1]=shidu_ge+0x30;

/*******信息通过串口打印********/

Uart_Send_String(temp1,5);

Uart_Send_String(temp,2);

Uart_Send_String("\n",1);

Uart_Send_String(humidity1,9);

Uart_Send_String(humidity,2);

Uart_Send_String("\n",1);

Delay_ms(2000);//延时,使周期性2S读取1次

}

}

实验结果如图:

吹气前的结果:

对着温湿度传感器吹气的结果

显然可见吹气后所得到的温度和湿度数据明显变化,且之种变化也是符合常理的。

任务5:

理解Z-stack的协议架构

Z-Stack采用分层的软件结构,目的是为了使各层相对独立,每一层都提供一些服务,服务由协议定义,程序员只需关心与他的工作直接相关的那些层的协议,它们向高层提供服务,并由低层提供服务。

硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O接口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集。

操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。

用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现。

整个Z-Stack协议栈结构如图

Z-Stack在项目中的目录结构:

1.APP:

应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了

应用层的内容和用户创建项目的主要内容,在协议栈里面是以操作系统的任务实

现的"

2.HAL:

硬件层目录,包含有与硬件相关的配置和驱动及操作函数"

3.MAC:

MAC层目录,包含了MAC层的参数配置文件及其MAC的LIB库的

函数接口文件"

4.MT:

监制调试层目录,该目录下的文件主要用于调试目的,即实现通过串口调试各层,与各层进行直接交互。

5.NWK:

网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS

层库的函数接口"

6.OSAL:

协议栈的操作系统"

7.Profile:

AF层目录,ApplicationFarmework应用框架,包含AF层处理函数接口文件。

8.Seeurity:

安全层目录,安全层处理函数

9.Services:

ZigBee和802.15.4设备地址处理函数目录,包括地址模式的定义及地址处理函数

10.Tools:

工作配置目录,包括空间划分及Z-Stack相关配置信息

11.ZDO:

指ZigBee设备对象,可认为是一种公共的功能集,文件用户用自定义的对象调用APS子层的服务和NWK层的服务

12.ZMac:

MAC层目录,包括MAC层参数配置及MAC层LIB库函数回调处理

函数"

13.ZMain:

主函数目录,包括入口函数及硬件配置文件

14.Output:

输出文件目录

任务6:

用抓包器分析MAC帧的内容

用PacketSniffer软件来分析MAC帧的内容,实验结果如下

总结:

通过此次作业的练习,学习到了很多东西。

第一是对Zigbee有了进一步的了解,;第二是加强了在资料的搜索与资料的筛选,;第三是一个小小的团队分工合作的重要性。

我们这个作业所涉及的内容很多,而且我和我的队友事先对我们这次的作业也没有太多的了解,很多东西都得自己去慢慢查阅和筛选资料,我和我队友进行分工合作,直到最后把作业完成。

参考文献:

FS_ZigBee协议栈实验指导书锋硕电子科技有限公司王锋

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

当前位置:首页 > 高中教育 > 理化生

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

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