《无线传感器网络》课程大作业报告基于zigbee的远程灯光控制系统姓名:学院:电气与信息工程学院专业班级:物联网工程学号:指导老师:成绩:重庆科技学院二零一五年十二月重庆科技学院《无线传感器网络》课程大作业报告I摘要二十一世纪,远程控制的需求越来越大,本实验是关于“基于zigbee网络的远程灯光控制系统”的相关研究。是通过PC连接协调器实现远程控制不少于3个终端节点上的LED灯的熄灭。本实验较全面的实现了远程灯光控制的功能,即采用一块协调器,三个路由器,在此设备上实现实验。协调器实现了PC与路由器之间的连接功能,用作信号的发射和接受;三个路由器分成两个组,第一个组内有两个节点,第二个组内有一个节点。基本功能包括:PC端可以设置终端节点上LED的闪烁周期;终端节点分为两组,PC端可以分别控制每组终端节点上LED的熄灭;PC可以设置两组LED闪烁的周期;PC上可以查询终端节点上LED的状态。报告后面详细介绍了整个控制系统的功能和控制策略,软件程序设计包括LED灯初始化、协议栈初始化,串口通讯等。最后,在模拟实际环境下,测试可行性与性能。实验证明,采用Zigbee能实现无线远程控制灯的亮灭。关键词:Zigbee远程控制LED灯CC2530重庆科技学院《无线传感器网络》课程大作业报告II目录1设计内容和要求.....................................................11.1课题任务.......................................................11.2课题要求.......................................................11.2.1PC端设置LED闪烁周期.......................................11.2.2终端节点分为两组且PC端分别控制............................11.2.3PC设置两组LED闪烁周期.....................................11.2.4PC查询LED的状态...........................................12总体设计思路.......................................................22.1系统功能.......................................................22.2模块关系.......................................................22.3程序框图.......................................................23功能模块图........................................................43.1功能模块图.....................................................43.2各模块实现的功能...............................................43.2.1PC端设置LED闪烁周期代码...................................43.2.2终端节点分为两组且PC端分别控制代码.........................53.2.3PC设置两组LED闪烁周期实验部分代码.........................63.2.4PC查询LED的状态部分实验代码...............................64系统调试及测试.....................................................84.1PC端设置LED闪烁周期实验结果显示...............................84.2终端节点分为两组且PC端分别控制实验结果显示....................84.3PC设置两组LED闪烁周期实验结果显示.............................94.4PC查询LED的状态实验结果显示...................................95总结..............................................................10重庆科技学院《无线传感器网络》课程大作业报告III6致谢.............................................................117参考文献..........................................................12重庆科技学院《无线传感器网络》课程大作业报告11设计内容和要求1.1课题任务本系统是基于zigbee网络的远程灯光控制系统,PC连接协调器实现远程控制不少于3个终端节点上的LED灯的熄灭。1.2课题要求1.2.1PC端设置LED闪烁周期PC端通过广播的方式控制加入了该协调器的所有路由器的灯的闪烁周期,且闪烁周期可以设置为1s、2s、3s。1.2.2终端节点分为两组且PC端分别控制将路由器分成两个组,组名分别为Group1和Group2,组号分别为0x0001和0x0002,。Group1有两个路由器节点,第一个节点称为G1D1,第二个节点称为G1D2;Group2有一个路由器节点,称为G2D1。PC端可以通过组播的方式控制每一组的终端节点的亮灭,且可单独控制每一个节点的亮灭。1.2.3PC设置两组LED闪烁周期PC端通过组播的方式分别控制Group1和Group2闪烁周期,周期时间分别为1s、2s、3s。1.2.4PC查询LED的状态PC端查询各个路由器节点当前的LED的状态,状态主要有亮(ON)、灭(OF)、闪烁(FL)。重庆科技学院《无线传感器网络》课程大作业报告22总体设计思路2.1系统功能该系统的功能主要有:(1)在PC上通过串口输入控制指令控制LED灯的亮灭。(2)路由器节点分为两组,PC端可以分别控制每组终端节点上LED的熄灭。(3)在PC上通过串口输入指令可以分组的设置两组LED闪烁的周期。(4)在PC上通过串口输入指令查询终端节点上LED的状态。2.2模块关系图2.1模块关系图2.3程序框图Group1PC机RS232CoordinatorZigBee网络Group2G2D1G1D1G1D2重庆科技学院《无线传感器网络》课程大作业报告3图2.2程序流程图向协调器发送数据开始加入网络建立网络灯的状态发生变化串口发送发送数据开始收到节点的数据收到协调器数据NYYN协调器程序框图路由器器程序框图重庆科技学院《无线传感器网络》课程大作业报告43功能模块图3.1功能模块图图3.1功能模块图3.2各模块实现的功能3.2.1PC端设置LED闪烁周期代码PC发送命令控制亮灭查询状态控制周期终端判断终端判断终端判断终端判断终端判断G*ON/OFG*D*ON/OFCXG*D*GR*F*SFREQ*SYNYYYY控制某组灯亮/灭控制某个组的灯闪烁的周期单个控制灯的亮灭返回终端节点状态给串口控制所有灯的闪烁周期组播NNNN单播广播组播广播重庆科技学院《无线传感器网络》课程大作业报告5PC端通过广播的方式控制加入了该协调器的所有路由器的灯的闪烁周期,且闪烁周期可以设置为1s、2s、3s。osal_memcpy(buf,pkt-cmd.Data,osal_strlen(G1D2ON)+1);HalLcdWriteString(buf,HAL_LCD_LINE_4);if(osal_memcmp(buf,FREQ1S,osal_strlen(FREQ1S)+1)){a=2;HalLedBlink(HAL_LED_2,0,50,1000);}if(osal_memcmp(buf,FREQ2S,osal_strlen(FREQ2S)+1)){a=2;HalLedBlink(HAL_LED_2,0,50,2000);}if(osal_memcmp(buf,FREQ3S,osal_strlen(FREQ3S)+1)){a=2;HalLedBlink(HAL_LED_2,0,50,3000);}3.2.2终端节点分为两组且PC端分别控制代码将路由器分成两个组,组名分别为Group1和Group2,组号分别为0x0001和0x0002,。Group1有两个路由器节点,第一个节点称为G1D1,第二个节点称为G1D2;Group2有一个路由器节点,称为G2D1。PC端可以通过组播的方式控制每一组的终端节点的亮灭,且可单独控制每一个节点的亮灭。//为第一组设置初始值GenericApp_Group.ID=0x0001;GenericApp_Group.name[0]=6;osal_memcpy(&(GenericApp_Group.name[1]),Group1,6);//为第二组设置初始值GenericApp_Group1.ID=0x0002;GenericApp_Group1.name[0]=6;osal_memcpy(&(GenericApp_Group1.name[1]),Group2,6);//控制组1节点1的亮灭重庆科技学院《无线传感器网络》课程大作业报告6osal_memcpy(buf,pkt-cmd.Data,osal_strlen(G1D1ON)+1);HalLcdWriteString(buf,HAL_LCD_LINE_4);if(osal_memcmp(buf,G1D1ON,osal_strlen(G1D1ON)+1)){a=0;HalLedBlink(HAL_LED_2,0,100,1000);}if(osal_memcmp(buf,G1D1OF,osal_strlen(G1D1OF)+1)){a=1;HalLedBlink(HAL_LED_2,0,0,1000);}3.2.3PC设置两组LED闪烁周期实验部分代码//控制组1的周期if(osal_memcmp(buf,GR1F1S,osal_strlen(GR1F1S)+1)){a=2;HalLedBlink(HAL_LED_2,0,0,1000);}if(osal_memcmp(buf,GR1F2S,osal_strlen(GR1F2S)+1)){a=2;HalLedBlink(HAL_LED_2,0,0,2000);}if(osal_memcmp(buf,GR1F3S,osal_strlen(GR1F3S)+1)){a=2;HalLedBlink(HAL_LED_2,0,0,3000);}3.2.4PC查询LED的状态部分实验代码为实现查询功能,需要在每个路由器节点的编程里加入下面代码,不同组不同节点的名字不同。if(osal_memcmp(buf,CXG1D1,osal_strlen(CXG1D1)+1)){重庆科技学院《无线传感器网络》课程大作业报告7GenericApp_SendTheMessage();}协调器实现查询状态部分代码:if(osal_memcmp(uartbuf,CXG1D1,6)){HalUARTWrite(0,uartbuf,6);GenericApp_SendTheMessageCX11();osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);}if(osal_memcmp(uartbuf,CXG1D2,6)){HalUARTWrite(0,uartbuf,6);GenericApp_SendTheMessageCX12();osal_start_time