甘涛 ZigBee无线传感器网络技术实现温湿度感知.docx
《甘涛 ZigBee无线传感器网络技术实现温湿度感知.docx》由会员分享,可在线阅读,更多相关《甘涛 ZigBee无线传感器网络技术实现温湿度感知.docx(18页珍藏版)》请在冰豆网上搜索。
![甘涛 ZigBee无线传感器网络技术实现温湿度感知.docx](https://file1.bdocx.com/fileroot1/2022-12/29/ad08030e-d4c2-4131-a1b5-bb1bef36242b/ad08030e-d4c2-4131-a1b5-bb1bef36242b1.gif)
甘涛ZigBee无线传感器网络技术实现温湿度感知
装订线
2013--2014学年第一学期计算机学院期末考试卷
《无线传感器网络技术》
学号:
201171060106姓名:
甘涛班级:
11级物联网班
成绩:
评语:
(考试题目及要求)
1.以本学期授课内容为基础,在J9-C501实验室的博创实验箱上完成如下要求:
1)由协调器创建一个网络,PANID末三位为个人学号的末三位。
2)以实验箱的1号ZigBee模块为基础,加入前述网络,完成采集温度信息的过程,并发送给协
调器;
3)抽签抽到的题号是4,以实验箱上的该ZigBee模块为基础,加入前述网络,完成相
关信息的采集并发送给协调器;
4)包括上述两个ZogBee模块在内,至少组织8个ZigBee模块加入前述ZigBee网络,获取各自
节点的网络地址,并发送给协调器;
5)协调器通过串口和PC上位机进行联系,将收集到的传感器信息和网络地址信息发送给上位机
6)根据各节点网络地址信息进行网络拓扑分析;
2.以上述过程为基础,撰写课程设计论文。
参考格式包含论文题目、摘要、关键字、正文和参考文
献等。
正文部分包含但不限于问题分析、实现思路、核心数据结构分析、设计与调试过程中遇到的
问题及解决办法等。
以上内容要求至少1500字,不得直接以代码充作文字叙述。
以WORD软件的
DOC文档格式保存,文件名为个人的姓名或者学号。
2.除上述内容外,课程设计论文另添加两部分内容:
对本学期该课程学习的总结和对教师的教学建
议。
3.上述各文件,包括实验所用的工程文件和源代码文件,以EMAIL邮件附件的形式,统一发送到
任课教师信箱:
suogr@。
4.课程论文含本封面打印一份上交任课老师处。
目录
【题目】-2-
一、题目要求-2-
二、平台要求-2-
【摘要】-2-
【关键字】-3-
【正文】-3-
一、实验分析及框架设计-3-
1、实验分析-3-
2、逻辑框架-4-
二、实验设计以及实验步骤-5-
(1):
协调器:
-6-
(2)终端:
-8-
三、运行调试-11-
【实验总结】-13-
【参考文献】-13-
【教学建议】-13-
【题目】
一、题目要求
1.以本学期授课内容为基础,在J9-C501实验室的博创实验箱上完成如下要求:
a、由协调器创建一个网络,PANID末三位为个人学号的末三位。
b、以实验箱的1号ZigBee模块为基础,加入前述网络,完成采集温度信息的过程,并发送给协调器;
c、以红外对射传感器模块为基础,加入前述网络,完成相关信息的采集并发送给协调器;
d、括上述两个ZogBee模块在内,至少组织8个ZigBee模块加入前述ZigBee网络,获取各自节点的网络地址,并发送给协调器;
e、器通过串口和PC上位机进行联系,将收集到的传感器信息和网络地址信息发送给上位机
f、各节点网络地址信息进行网络拓扑分析;
2.以上述过程为基础,撰写课程设计论文。
3.对本学期该课程学习的总结和对教师的教学建议。
二、平台要求
1:
PC机上安装串口助手,PC的串口与博创物联网试验箱的串口连接好;
2:
CC2530上运行zigbee2007协议栈。
【摘要】
本实验主要实现的是终端节点采集自己的网络地址,父节点的网络地址以及传感器的数据,发送到协调器上,协调器再通过串口与PC相连接,在PC上通过串口助手向串口发送“gantaoaddr1”可显示当前的网络地址信息,再串口上输入“duanleidata”可显示温度和湿度,在带有干簧门磁开关终端节点的当有磁性物质时,PC上的串口助手会显示“SWITCH1Warning!
”;在霍尔开关开关当有磁性物质时,PC上的串口助手会显示“SWITCH2Warning!
”。
实验使用的数据结构的定义包括uint8type[3];uint8myNWK[4];uint8pNWK[4];charmdata[14];charID;终端节点采集地址信息放到myNWK[4];pNWK[4];里面,采集的数据信息放到mdata[14];里面,自身的设备号放到ID里面。
将该数据结构通过无线射频发给协调器,协调器通过对设备号的匹配,选择执行相应的函数。
【关键字】
Zigbee2007协议栈串口红外对射温湿度传感器协调器
【正文】
一、实验分析及框架设计
1、实验分析
本实验需要实现终端节点采集地址信息和与终端节点相连接的传感器的信息发送到协调器上面,协调器再将这些信息发送到串口上。
2、逻辑框架
(协调器)
(终端)
二、实验设计以及实验步骤
在Coordinator.h完成数据结构定义:
typedefstructRFTXBUF
{
uint8type[3];
uint8myNWK[4];
uint8pNWK[4];
charmdata[14];
charID;
}RFTX;
其中的uint8type[3];存放模块的类型
uint8myNWK[4];存放模块的当前网络地址
uint8pNWK[4];存放模块的父节点网络地址
charmdata[14];存放数据信息;
charID;存放设备号
其中的设备号ID主要是方便后面的协调器的信息处理时选择执行处理函数
mdata里面主要采集终端的一些数据整个数据结构包含26个字节。
(1):
协调器:
主要函数的定义:
voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);信息反馈函数
staticvoidrxCB(uint8port,uint8event);串口的回调函数,主要实现的是当在串口输入“gantaoaddr1”时,串口显示当前的网络地址信息,当输入“duanleidata”时,串口显示温度湿度信息。
主要函数分析:
1:
在voidGenericApp_Init(bytetask_id)完成串口的配置(波特率为115200),设置回调函数为reXB:
halUARTCfg_tuartConfig;
uartConfig.configured=TRUE;
uartConfig.baudRate=HAL_UART_BR_115200;
uartConfig.flowControl=FALSE;
uartConfig.callBackFunc=rxCB;
HalUARTOpen(0,&uartConfig);
2:
在UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events)函数里面,当事件为AF_INCOMING_MSG_CMD:
执行GenericApp_MessageMSGCB(MSGpkt);
caseAF_INCOMING_MSG_CMD:
GenericApp_MessageMSGCB(MSGpkt);
break;
3:
在voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)函数里面,主要完成协调器对接受到的数据进行处理:
A:
将从终端接受到的数据放到结构体数组nodeinfo[5]里面;
B:
匹配设备号(温湿度的设备号ID=‘1’,干簧门磁/霍尔开关的设备号为ID=‘4’),
当ID=‘1’时,将从终端接受到的数据包的温度放到Temp[7],将湿度放到charHumi[7];
当ID=‘4’时,将从终端接受的数据包的中断信息放到charganhuang[1];charhuoer[1];
并执行相应的动作反馈,当终端的干簧门磁检测到有磁性物质时,与协调器相连的串口上会显示“SWITCH1Warning!
”;当终端的霍尔开关检测到磁性物质时,与协调器相连的串口上会显示“SWITCH2Warning!
”
if((thisid-'0')==1)
{
for(i=0;i<7;i++)
{
Temp[i]=mybuf.mdata[i];
Humi[i]=mybuf.mdata[i+7];
}
}
if((thisid-'0')==4)
{
ganhuang[0]=mybuf.mdata[0];
huoer[0]=mybuf.mdata[1];
if((ganhuang[0]-'0')==1)
{
HalUARTWrite(0,"SWITCH1Warning!
!
",19);
}
if((ganhuang[1]-'0')==1)
{
HalUARTWrite(0,"SWITCH2Warning!
!
",19);
}
}
4:
在回调函数staticvoidrxCB(uint8port,uint8event)里面
当在PC上在串口助手输入是“gantaoaddr1”时,串口显示当前的网络地址信息,当输入“duanleidata”时,串口显示温度湿度信息。
staticvoidrxCB(uint8port,uint8event)
{
unsignedcharchangeline[2]={0x0A,0x0D};
uint8buf[11];
inti;
HalUARTRead(0,buf,11);
if(osal_memcmp(buf,"gantaoaddr1",11))/
{
for(i=0;i<5;i++)
{
HalUARTWrite(0,nodeinfo[i].type,3);
HalUARTWrite(0,"NWK:
",6);
HalUARTWrite(0,nodeinfo[i].myNWK,4);
HalUARTWrite(0,"pNWK:
",7);
HalUARTWrite(0,nodeinfo[i].pNWK,4);
}
}
if(osal_memcmp(buf,"duanleidata",11))
{
HalUARTWrite(0,"themessageisfromNWK:
",25);
HalUARTWrite(0,nodeinfo[0].myNWK,4);
HalUARTWrite(0,changeline,2);
HalUARTWrite(0,"Temp:
",7);
HalUARTWrite(0,Temp,7);
HalUARTWrite(0,"Humi:
",7);
HalUARTWrite(0,Humi,7);
}
}
(2)终端:
主要函数定义:
voidGenericApp_SendTheMessage(void);发送函数
voidTo_string(uint8*dest,char*src,uint8length);字符转换
voidDelay(uintn);延时
voidInitIrda(void);初始化终端
voidLedInit(void);led灯的初始化
RFTXrftx;定义了一个结构体变量
voidGenericApp_Init(bytetask_id)应用层初始化
#pragmavector=P1INT_VECTOR中断服务程序的申明
__interruptvoidP1_ISR(void);
主要函数分析:
1:
在voidGenericApp_Init(bytetask_id)完成协议栈应用层的初始化,
Sht11Init();完成温湿度传感器的初始化,
rftx.mdata[0]='0';初始化数据包的第一个字节为’0’;
rftx.mdata[1]='0';初始化数据包的第二个字节为’0’;
LedInit();完成LED灯初始化。
2:
在UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events)里面,当终端节点的网络状态,及连接上协调器后,周期(1s一次)会执行GenericApp_SendTheMessage();函数。
if((GenericApp_NwkState==DEV_ROUTER)||(GenericApp_NwkState==DEV_END_DEVICE))
{
osal_start_timerEx(GenericApp_TaskID,GENERICAPP_SEND_MSG_EVT,
GENERICAPP_SEND_MSG_TIMEOUT);
}
if(events&GENERICAPP_SEND_MSG_EVT)
{
//Send"the"message
GenericApp_SendTheMessage();
osal_start_timerEx(GenericApp_TaskID,
GENERICAPP_SEND_MSG_EVT,
GENERICAPP_SEND_MSG_TIMEOUT);
return(events^GENERICAPP_SEND_MSG_EVT);
}
3:
在voidGenericApp_SendTheMessage(void)函数里面,会采集终端节点当前的网络号和父节点的网络号,
如果是温湿度传感器还会采集温湿度,也有干簧门磁/霍尔开关的中断信息,采集好后放到结构体变量rftx中,发送到协调器。
voidGenericApp_SendTheMessage(void)
{
//RFTXrftx;
uint16nwk;
inti;
//*****************************************************************************
//*实现霍尔开关和干簧门磁开关中断信息的采集
//*****************************************************************************
InitIrda();
for(i=0;i<10;i++)
{
Delay(5000);
}
//*****************************************************************************
//*实现地址信息的采集
//*****************************************************************************
if(GenericApp_NwkState==DEV_END_DEVICE)
{
osal_memcpy(rftx.type,"END",3);
}
if(GenericApp_NwkState==DEV_ROUTER)
{
osal_memcpy(rftx.type,"ROU",3);
}
nwk=NLME_GetShortAddr();//取本节点网络地址
To_string(rftx.myNWK,(uint8*)&nwk,2);//16进制
nwk=NLME_GetCoordShortAddr();//父节点地址
To_string(rftx.pNWK,(uint8*)&nwk,2);
//*****************************************************************************
//*发送数据
//*****************************************************************************
rftx.ID='3';//设定设备号ID为3
afAddrType_tmy_DstAddr;
my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;
my_DstAddr.endPoint=GENERICAPP_ENDPOINT;
my_DstAddr.addr.shortAddr=0x0000;
AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,
GENERICAPP_CLUSTERID,
sizeof(rftx),
(uint8*)&rftx,
&GenericApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS);
rftx.mdata[0]='0';
}
4:
在终端中断服务函数#pragmavector=P1INT_VECTOR__interruptvoidP1_ISR(void)里面,当干簧门磁开关传感器检测到磁性物质时,会产生一个中断,中断服务程序里面会将rftx.mdata[0]='1';当霍尔开关传感器检测到磁性物质时,会产生一个中断,中断服务程序里面会将rftx.mdata[1]='1';
#pragmavector=P1INT_VECTOR
__interruptvoidP1_ISR(void)
{
if((P1IFG&0X04)>0)//中断
{
P1IFG&=~(0x0c);
Delay(1000);
LED1=!
LED1;
rftx.mdata[0]='1';
}
if((P1IFG&0X04)<0)
{
rftx.mdata[0]='0';
}
if((P1IFG&0X08)>0)
{
P1IFG&=~(0x0c);
Delay(1000);
rftx.mdata[1]='1';
LED1=!
LED1;
}
if((P1IFG&0X08)<0)
{
rftx.mdata[1]='0';
}
P1IF=0;//清中断标志
}
三、运行调试
Zigbee建网成功后,在串口助手输入“gantaoaddr1”,会在串口助手上显示当前的网络地址信息
在串口助手上输入“duanleidata”,会在串口上显示温度和湿度
当干簧门磁开关检测到磁性物质时,串口会显示“SWITCH1Warning”;当霍尔开关检测到磁性物质时,串口会显示“SWITCH2Warning”。
整体效果如下:
【实验总结】
在本次实验中,以小组形式(段磊和甘涛),调试运行程序,在本次实验中通过对协调器和终端分别设计,组建网络号为1106的网络,以796F,7970,7971,7972,7973作为网络子节点号。
在调试运行程序过程中,在获取网络子节点的基础之上,经过本次实验最终对于终端模块及协调器模块的调试,最终完成在终端中通过“gantaoaddr1”命令可以在zigbee网络获取本实验箱五个网络子节点号,通过“duanleidata”命令可以获取1号模块的温湿度信息,在第4个终端,当干簧门磁开关检测到磁性物质时,串口会显示“SWITCH1Warning”;当霍尔开关检测到磁性物质时,串口会显示“SWITCH2Warning”。
经验总结:
1:
要完成多个终端与协调器通信,特别是要完成协调器收集终端传感器发送上来的数据,完成不同的处理,可以采用通过设备号标示的方法,吧每个终端节点标示一个设备号ID,再在协调器上匹配设备号,完成相应的处理函数,要完成这一点就需要在整个实验的框架设计时,定义好自己数据包的数据结构,同时在开发中多注意模块化开发,制定统一的标准,方便以后添加硬件。
2:
在协调器筛选出信息,在串口助手上可以打印数据包(即定义的数据结构),来查看信息是否符合自己的设计和调试查错。
【参考文献】
李文仲《Zigbee无线网络技术入门与实战》北京航天航空大学出版社
【教学建议】
索老师这样的教学模式(在实验室讲解理论,后开展相应的实验)很好,这样我们可以比较深刻的理解教学内容。
我觉得应该多配合实验室做一些理论知识的讲解那就更好了。