基于zigbee的远程灯光控制系统讲解.docx
《基于zigbee的远程灯光控制系统讲解.docx》由会员分享,可在线阅读,更多相关《基于zigbee的远程灯光控制系统讲解.docx(13页珍藏版)》请在冰豆网上搜索。
基于zigbee的远程灯光控制系统讲解
《无线传感器网络》课程大作业报告
基于zigbee的远程灯光控制系统
姓名:
学院:
电气与信息工程学院
专业班级:
物联网工程
学号:
指导老师:
成绩:
重庆科技学院
二零一五年十二月
摘要
二十一世纪,远程控制的需求越来越大,本实验是关于“基于zigbee网络的远程灯光控制系统”的相关研究。
是通过PC连接协调器实现远程控制不少于3个终端节点上的LED灯的熄灭。
本实验较全面的实现了远程灯光控制的功能,即采用一块协调器,三个路由器,在此设备上实现实验。
协调器实现了PC与路由器之间的连接功能,用作信号的发射和接受;三个路由器分成两个组,第一个组内有两个节点,第二个组内有一个节点。
基本功能包括:
PC端可以设置终端节点上LED的闪烁周期;终端节点分为两组,PC端可以分别控制每组终端节点上LED的熄灭;PC可以设置两组LED闪烁的周期;PC上可以查询终端节点上LED的状态。
报告后面详细介绍了整个控制系统的功能和控制策略,软件程序设计包括LED灯初始化、协议栈初始化,串口通讯等。
最后,在模拟实际环境下,测试可行性与性能。
实验证明,采用Zigbee能实现无线远程控制灯的亮灭。
关键词:
Zigbee远程控制LED灯CC2530
1设计内容和要求
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)。
2总体设计思路
2.1系统功能
该系统的功能主要有:
(1)在PC上通过串口输入控制指令控制LED灯的亮灭。
(2)路由器节点分为两组,PC端可以分别控制每组终端节点上LED的熄灭。
(3)在PC上通过串口输入指令可以分组的设置两组LED闪烁的周期。
(4)在PC上通过串口输入指令查询终端节点上LED的状态。
2.2模块关系
图2.1模块关系图
2.3程序框图
图2.2程序流程图
3 功能模块图
3.1功能模块图
图3.1功能模块图
3.2各模块实现的功能
3.2.1PC端设置LED闪烁周期代码
PC端通过广播的方式控制加入了该协调器的所有路由器的灯的闪烁周期,且闪烁周期可以设置为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的亮灭
osal_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))
{
GenericApp_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_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);
}
if(osal_memcmp(uartbuf,"CXG2D1",6))
{
HalUARTWrite(0,uartbuf,6);
GenericApp_SendTheMessageCX21();
osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);
}
4系统调试及测试
4.1PC端设置LED闪烁周期实验结果显示
PC端通过串口发送FREQ1S、FREQ2S、FREQ3S状态的指令广播给各个路由器节点,然后所有的路由器节点的闪烁周期都相同。
周期可以设置为1s、2s和3s。
4.2终端节点分为两组且PC端分别控制实验结果显示
PC端通过串口发送指令,组播给组号为0x0001的组,使第一组的灯亮,此时第二个组的灯是熄灭状态。
同理,PC通过串口发送指令给组号为0x0002的组,此时第二个组的灯是亮。
4.3PC设置两组LED闪烁周期实验结果显示
4.4PC查询LED的状态实验结果显示
PC端通过串口发送查询G1D1状态的指令。
此时串口返回G1D1的状态,每个灯的状态有三种,分别是FL(闪)、OF(灭)、
ON(亮)
5总结
在本次的实验中我对于ZigbBee有了更加深入的理解和巩固,从刚开始觉得ZigBee很难,然而后面真的去认真去做了之后才发现,其实也没有想象之中的那么困难,前面的不过是一些声明以及初始化,其实我们真正涉及到的内容不会很多。
就像现在我做完实验再对它进行了解后,需要我们完成的也就那么几点。
所以实验课上学到的东西很重要,这对后面的实验有着莫大的好处和很好的理解。
我差不多是后面一个多月才开始认真去实验室做实验,前面半期的理论知识听着是感觉很枯燥乏味。
后面才发现实验并不难,只是我前面并不用心去学习,在内心里就给自己设了一道坎。
我感谢周老师对我们的悉心指导,五个小实验,一个大作业,每个同学每个实验他都要严格的把关,让我们去答辩。
周老师,辛苦了!
6 致谢
在为期一学期的对ZigBee的学习即将结束,衷心的感谢所有给予我帮助和支持的老师和同学。
首先要感谢学校,给我们专业提供了良好的学习设备,让我们得以在实践中寻求真知,让我从根本上去学习了ZigBee这门课程。
感谢我的老师周伟老师,本门课程从选课、课程开展、具体实施到各个实验等都是在周老师的严格要求和悉心指导下完成的,不仅提高了我的专业水平和实践能力,更锻炼了我分析问题、解决问题的能力。
真的特别感谢周老师,让我对ZigBee这门课程有了认识和理解。
感谢我的同学,他们在学习和生活上给了我很多的鼓励和帮助。
感谢所有关心和帮助过我的老师、同学和朋友。
7参考文献
[1]任丰原,黄海宁,林闯.无线传感器网络[J].软件学报2003,14(7)
[2]CC2530DataSheet[OL].
[3]高守玮,吴灿阳.Zigbee技术实践教程[M].北京:
北京航空航天大学出版社,2009.6
[4]李文仲,段朝玉等.Zigbee无线网络技术入门与实战[M].北京:
北京航空航天大学出版社,2007
[5]杜丽敏,郭文成.ZigBee技术在远程抄表系统中的应用[J].单片机与嵌入式系统,2006(7)
[6]赵景宏,李英凡,许纯信.ZigBee技术简介[J].电力系统通信,2006,27(165)
[7]周游,方滨,王普.基于ZigBee技术的智能家居无线网络系统[J].电子技术应用,2005(5)
[8]李文仲,段朝玉.《ZigBee无线网络技术入门与实战》.北京:
北京航空航天大学出版社,2007.1
[9]高守玮.《ZIGBEE技术实践教程》.北京:
北京航空航天大学出版社,2009.6
[10]王小强、欧阳骏、黄宁淋.《ZigBee无线传感器网络设计与实现》.北京:
化学工业出版社.2012.6