1、zigbee实验报告接入技术课题报告学 院:计算机与信息学院专业班级:通信工程一班课题名称:Zigbee实现树状网络 日 期:2014年5月9日课题任务:1.用 zigbee 开发套件实现 zigbee 设备的组网;2.了解 PAN 协调器的启动过程;3.了解路由器与设备加入网络的过程;4.通过 zigbee 网络传输温度与湿度的数据;5.理解 Z-stack 的协议架构;6.用抓包器分析 MAC 帧的内容。课题结果:任务1:用 zigbee 开发套件实现 zigbee 设备的组网Zigbee组网就是调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。组网可有多种方案而且还有不同的
2、拓扑结构,如任务4中我们所建立的数据传输网络也是其中的一部分。详见任务4。任务2:了解 PAN协调器的启动过程建立网络是一个自动的过程,协调器在应用指定的网络信道范围内进行能量扫描,通过在各个信道上进行监听,获取各信道能量水平。协调器会选择一个干扰和冲突最少的信道建立网络。确定了工作信道后,设备可以进一步设置其余网络参数,包括PAN标识,网络地址,扩展PAN标识等。应用层通过NLME-NETWORK-FORMATION.request触发网络层进行网络建立过程。原语包括扫描信道,扫描时间,信标阶,超帧阶,电池寿命扩展标志等参数。网络建立的具体过程:调用MAC层MLME-SCAN原语先后进行能量
3、扫描和主动扫描,在选择好信道、PAN标识等参数后调用NLME-SET原语先后对参数进行设置,最后通过MLME-START原语启动协调器。具体过程如下:ZSEG int main ( void )/初始化操作系统osal_init_system ();OSAL.cbyte osal_init_system( void )/初始化系统的任务osalInitTasks ();OSAL_SampleApp.cvoid osalInitTasks( void )ZDApp_Init( taskID+ );SampleApp_Init( taskID );ZDApp.cvoid ZDApp_Init( b
4、yte task_id )ZDAppTaskID = task_id;/ Initialize the ZDO global device short address storageZDAppNwkAddr.addrMode = Addr16Bit;/地址模式为 16bit 短地址ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;/短地址=0xFFFE(void)NLME_GetExtAddr(); /API 函数,用于得到 64bit IEEE 地址/ Initialize ZDO items and setup the device - typ
5、e of device to create.ZDO_Init();afRegister( (endPointDesc_t *)&ZDApp_epDesc );/为设备注册端点 0 描述符 / Start the device?if ( devState != DEV_HOLD ) / 无 HOLD_AUTO_START 此项预编译,所以 devState = DEV_INITZDOInitDevice( 0 );ZDApp_RegisterCBs(); ZDApp.cuint8 ZDOInitDevice( uint16 startDelay )uint8 networkStateNV = Z
6、DO_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.cvoid ZDApp_NetworkInit( uint16 de
7、lay )if ( delay )/ Wait awhile before starting the deviceosal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT , delay );elseosal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );UINT16 ZDApp_event_loop( byte task_id, UINT16 events )if ( events & ZDO_NETWORK_INIT )/网络初始化事件处理/ Initialize apps and start the net
8、workdevState = 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.cvoid ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrd
9、er, byte superframeOrder )devState = DEV_COORD_STARTING;ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,zgDefaultStartingScanDuration, beaconOrder,superframeOrder,false );任务3:了解路由器与设备加入网络的过程zigbee协调器设备建立网络后,路由器设备或者终端设备,可以加入协调器建立的网络,具体加入网络有两种方式,一种是通过关联方式,就是待加入的设备发起加入网络,具体实现方式后
10、面讨论,另一中是直接方式,就是待加入的设备具体加入到那个设备下,作为该设备的子节点,由以前网络中的设备,想待加入的设备作为其子设备决定。由于我们一般都用方式一所以我们只了解方式一。加入一个设备,是两个设备的事,即子设备和待定父设备,对于子设备,首先子设备调用NLME-NETWORK-DISCOVERY.request 原语,设定待扫描的信道,以及每个信道扫描的时间,网络层收到这个原语,将要求MAC层执行被动或主动扫描。具体发送到设备外的是一个becon request 帧,当在这个信道中的设备收到该帧,将会发送becon帧,这是子设备通过BEACON-NOTIFY.indication原语,告
11、知该设备的MAC层,该becon帧包含了发送该帧的地址信息,以及是否允许其他设备以其子节点的方式加入。待加入的设备,在网络层,将检查该 becon帧协议ID是否是zigbee ID。如果不是,将忽略;如果是,该设备将复制收到每个becon帧的相关信息到其关联表中(neighbor table)。一旦MAC层完成了扫描,将发送MLME-SCAN.confirm原语,告知网络层,网络层将发送NLME-NETWORK-DISCOVERY.confirm原语,告知应用层。 应用层收到该原语,应用层将根据情况,要么重新要求扫描,或者从关联表中选择所发现的网络加入。调用NLME-JOIN.request
12、原语,原语中各个参数的设置参看协议。如果在关联表中找不到合适的准父节点,将调用原语告知应用层,如果由多个设备可以满足要求,将选择到协调器节点深度最低的设备,如果有几个设备的深度相同,且都是最小深度,将从中随机选择一个。一旦潜在的父节点确定,网络层将调用MLME-ASSOCIATE.request 原语到MAC层。具体设置参看协议相关部分,连接状态将通过MLME-ASSOCIATE.confirm 原语反馈。 如果试图加入不成功,网络层将收到MAC层通过MLME-ASSOCIATE.confirm告知的加入失败,如果收到的是潜在父节点拒绝该设备加入,这时候,网络层将会在关联表中,把该潜在父节点的
13、相应部分,潜在父节点位(potential parent bit)置为零,确保网络层,不再给这个设备二次发送加入请求。 如果一次加入没成功,将选择另一个潜在的父节点加入,指导找到一个合适的设备加入或者所有的设备都不适合。如果加入成功,网络层收到的MLME-ASSOCIATE.confirm 原语,将含有该设备可用的16唯一的逻辑地址,网络层将在关联表中设置与其父节点的关系,同时,这个父节点也会在其关联表中加入这个新设备。如果是以路由器(router)形式成功加入网络,该设备的应用层将发送NLME-STAT_ROUTER.request 原语,网络层将发送MLME-STAT.request原语到
14、MAC层。收到了MLME-START.confirm 原语,网络层 将发送NLME-START-ROUTER.confirm 原语,含有同样的状态值。对于父节点设备: 只有协调器或路由器,可以加入设备,进行该操作,首先从MAC层开始,MAC接收到一帧(ASSOCIATE)数据,通过 MLME_ASSOCIATE.indication原语传到网罗层,潜在的父节点收到这帧数据,首先判断该设备是否已经存在其关联表中,如果找 到,NLME将获取相应的16位网络地址,并发送 association response 到MAC层,如果没有找到,将分配一个在这个网络中唯一的地址给待加入的设备,如果潜在父节点
15、已经用完了地址分配,NLME将中止,通过MLME- ASSOCIATE.reponse 原语,告知该设备,不能接收子设备了,在多跳网络中,其他的设备还可以接收。 如果设备加入得到许可,这时候,将在关联表中创建一个表项,作为其子节点,并通过MLME-ASSOCIATE.reponse 原语,告知该设备,已经成功加入网络。代码:路由器入网ZDObject.cvoid ZDO_StartDevice(byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )devState = DEV_N
16、WK_DISC;ret= NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration ); 终端设备入网ZDObject.cvoid ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )devState = DEV_NWK_DISC;ret= NLME_NetworkDiscoveryRequest( zgDefaultChannelList
17、, zgDefaultStartingScanDuration ); 任务4:通过 zigbee 网络传输温度与湿度的数据代码如下:#include #include #include UART.H#include DHT11.Hvoid main(void) Delay_ms(1000);/让设备稳定 InitUart(); /串口初始化 while(1) DHT11(); /获取温湿度 P0DIR |= 0x40; /IO口需要重新配置 /*温湿度的ASC码转换*/ temp0=wendu_shi+0x30; temp1=wendu_ge+0x30; humidity0=shidu_shi
18、+0x30; humidity1=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次 实验结果如图:吹气前的结果:对着温湿度传感器吹气的结果显然可见吹气后所得到的温度和湿度数据明显变化,且之种变化也是符合常理的。任
19、务5:理解 Z-stack 的协议架构Z-Stack采用分层的软件结构,目的是为了使各层相对独立,每一层都提供一些服务,服务由协议定义,程序员只需关心与他的工作直接相关的那些层的协议,它们向高层提供服务,并由低层提供服务。硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O接口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集。操作系统抽象层OSAL实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现。整个
20、Z-Stack协议栈结构如图Z-Stack在项目中的目录结构:1.APP:应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和用户创建项目的主要内容,在协议栈里面是以操作系统的任务实现的2.HAL:硬件层目录,包含有与硬件相关的配置和驱动及操作函数3.MAC:MAC层目录,包含了MAC层的参数配置文件及其MAC的LIB库的函数接口文件4.MT:监制调试层目录,该目录下的文件主要用于调试目的,即实现通过串口调试各层,与各层进行直接交互。5.NWK:网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS层库的函数接口6.OSAL:协议栈的操作系统7.Profile
21、:AF层目录,Application Farmework 应用框架,包含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