基于物联网的温度监控系统DOC 24页.docx
《基于物联网的温度监控系统DOC 24页.docx》由会员分享,可在线阅读,更多相关《基于物联网的温度监控系统DOC 24页.docx(15页珍藏版)》请在冰点文库上搜索。
基于物联网的温度监控系统DOC24页
基于物联网的温度监控系统(DOC24页)
本设计选用的是一款集成度高、成本低、效益高的单芯片快速以太网MAC控制器PHY芯片DM9000。
它由一个处理接口,一个10/100M自适应的PHY和4KDWORD值的SRAM组成。
DM9000物理协议层接口完全支持使用10MBps下3类、4类、5类非屏蔽双绞线和100MBps下5类非屏蔽双绞线。
可以自动完成配置以最大限度地适合其线路带宽。
其端口驱动程序可方便移植。
图3-7以太网接口电路
3.4WSN协调器接口模块
该模块是实现嵌入式ZigBee应用的片上系统,其作用就是方便CC2530模块的接入。
采用拥有32/64/128KB可选闪存、8KBSRAM的增强型8051MCU等高性能模块,并内置了ZigBee协议找。
因为以CC2530为核心的Zigbee模块里有无线协议栈代码和高频设计,这样一来,用户主要将精力集中在自己的应用代码开发。
由于自身硬件资源匮乏且对环境要求较高,无线传感器网络直接接入传统通信网络的构想便成了天方夜谭。
最简单易行的方法就是:
利用物联网网关实现WSN与IP网络互联,而网关还需要一个WSN协调器对传感网进行总体协调调度。
在本设计中采用现有的20个引脚的接口电路的Zigbee无线模块。
如图3-8所示为WSN协调器接口电路,协调器与主控制器之间可以通过USART和SPI两种方式实现通信。
图3-8WSN协调器接口电路
3.5本章小结
本小节对物联网网关的硬件系统进行了详细设计,选取S5PV210作为
主控器,并完成了对主控制器和外围芯片的接口电路设计。
第四章三个模块的连通性测试
本系统将主要介绍三个模块功能的实现过程以及测试结果,即ZigBee内部模块通信的实现、ZigBee模块与网关通信的实现、网关与因特网通信的实现。
4.1ZigBee内部模块通信实现
ZigBee内部模块通信连接方式如图4-1所示:
图4-1ZigBee内部模块通信连接方式
ZigBeeCC2530自身集成了片内的温度传感器。
本实验中路由器(Router)节点将采集到的室内温度数据无线发送到协调器(Coordinator),协调器再通过UART发送给上位机并最终显示出来。
部分API函数与功能如表4-2所示:
表4-2API函数与功能
网络协调器的程序流程图如图4-3所示,其主要是编译、网络应用层初始化、目的地址设定、注册端点描述符、注册按键等。
其中定义的处理事件的类型包括:
按键、收到消息、网络状态改变,对收到的消息进行以下结构体定义:
typedefstruct
{
osal_event_hdr_thdr;
uint16groupld:
uint16clusterld;
afAddrType_tsrcAddr;
byteendPoint;
bytewasBroadcast;
byteLinkQuality;
byteSecurityUse;
uint32timestamp;
afMSGCommandFormat_tcmd;
}afIncomingMSGPacket_t
在该部分中,主要包含groupID目的组ID,clusterld目的簇ID,srcAddr源地址,endPoint目的端点号,cmd命令。
图4-3协调器的程序流程图
网络节点与协调器的程序流程仅在设备配置类型有些区别,其处理事件的机制是一致的,网络节点的程序流程图如图4-4所示:
图4-4 网络协调器程序流程图
ZigBee的协议栈采用任务通信机制,本次实验采用的任务机制如图4-5所示:
图4-5ZigBee的协议栈采用任务通信机制
部分调用的函数及功能如下:
uint16SampleApp_ProcessEvent(uint8task--id,uint16events)
//定义优先级最高的事件
switch(MSGpkt->hdr.event)
//分情况调用不同的函数处理事件
voidSampleApp_HandleKeys(uint8shift,uint8keys)
//外部消息事件处理
voidSampleApp_SendPeriodicMessage(void)
//通过OSAL定时器,定时发送周期信息
AF_DataRequest()
//用来发送数据
下面具体讲解CC2530将采集到的温度信息发送给上位机的代码实现过程。
/**************************************/
#include
#include''InitUART_Timer.h''//注意在option里设置路径
#include''stdio.h''
/****************************************************************
温度传感器初始化函数
****************************************************************/
voidinitTempSensor(void)
{
DISABLE_ALL_INTERRUPTS();//关闭所有中断
InitClock();//设置系统主时钟为32M
TR0=0X01;//set'1'toconnectthetemperaturesensortotheSOC_ADC.
ATEST=0X01;//Enablesthetemperaturesensor
}
/****************************************************************
读取温度传感器AD值函数
****************************************************************/
floatgetTemperature(void){
uintvalue;
ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样
ADCCON1|=0x30;//选择ADC的启动模式为手动
ADCCON1|=0x40;//启动AD转化
while(!
(ADCCON10x80));//等待AD转换完成
value=ADCL>>4;//ADCL寄存器低2位无效
value|=(((UINT16)ADCH)<<4);
return(value-1367.5)/4.5-5;//根据AD值,计算出实际的温度,温度系数为4.5/℃
//减去5℃,进行温度校正
}
/****************************************************************
主函数
****************************************************************/
void main(void)
{
chari;
charTempValue[5];
unsignedshort*bufptr=(unsignedshort*)(TempValue+2);
floatAvgTemp;
InitUART0();//初始化串口
initTempSensor();//初始化ADC
while
(1)
{
AvgTemp=0;
for(i=0;i<64;i++)
{
AvgTemp+=getTemperature();
AvgTemp=AvgTemp/2;//每次累加后除2
}
/****温度转换成ascii码发送****/
/* TempValue[0]=(unsignedchar)(AvgTemp)/10+48;//十位
TempValue[1]=(unsignedchar)(AvgTemp)%10+48;//个位
TempValue[2]='.';//小数点
TempValue[3]=(unsignedchar)(AvgTemp*10)%10+48;//十分位
TempValue[4]=(unsignedchar)(AvgTemp*100)%10+48;//百分位
TempValue[5]='\0';*///字符串结束符
TempValue[0]=0x0EA;
TempValue[1]=0x55;
*(bufptr)=(unsignedshort)(AvgTemp*100);
unsignedcharsum=0;//校验和
for(i=0;i<4;i++)
{
sum+=TempValue[i];
}
TempValue[4]=sum;
UartTX_Send_String(TempValue,5);
Delayms(2000);//使用32M晶振,故这里2000约等于1S
}
}
将基于ZigBee协议栈Z-Stack编写的SampleAPP程序中的routerproject以及coordinatorproject分别烧写到两个ZigBee模块中,然后,先给作为协调器(Coordinator)的ZigBee模块上电,再给作为路由器(Router)的ZigBee模块上电,以保证其可以正确组网,此时,打开串口调试界面,我们可以看到如图4-6所示的结果:
图4-6ZigBee模块间通信实现
结果分析:
我们用计算器将串口显示的十六进制数转换为十进制数,并与室内的温度计显示数据作比较,可知在误差允许范围内,图中显示数据确实为当前室内温度,当用手触摸温度传感器芯片时,串口显示的数据也会明显升高。
这说明两个ZigBee模块已经正确组网,且作为路由器(Router)的ZigBee模块能够将采集到的当前室内温度实时无线传输给作为协调器(Coordinator)的ZigBee模块,达到了预期效果。
4.2ZigBee模块与网关通信实现
实现ZigBee连通区与网关的通信,其实质就是实现网关与ZigBee网络协调器的通信。
因为对于星形的ZigBee网络拓扑结构,所有的节点都跟协调器交互。
首先我们来讨论ZigBee模块与ARM9开发板是如何实现通信的。
ZigBee与ARM9开发板通过串口相连接,如图4-7所示:
图4-7ZigBee与ARM9开发板通信的方式
串口通信满足嵌入式系统低功耗、高带宽利用率的基本硬件要求。
串口所调用的公共函数结构体列表如表4-8所示:
表4-8串口所调用的公共函数结构体
本文ZigBee模块采用TI公司生产的CC2530,ZigBee协议栈对串口进行了很好的封装并设计了一套API供用户对串口进行方便的操作,而避免了直接操作寄存器带来的麻烦,其功能如表4-9所示:
表4-9 ZigBee协议栈
一旦ZigBee协调器接收到其他节点发来的数据后,就会自动产生一个事件,根据任务通信机制,该事件就会告知应用层,其串口发送流程图如图4-10所示:
图4-10串口发送流程图
在接收端采用中断模式来验证是否收到字节,当串口接收到一个字节后,就会产生中断,调用接收函数,接收是否完成是根据收到字节数是否等于UARTMessageType_t结构体中数据长度来判断,串口接收流程如图4-11所示:
图4-11串口接收流程图
halUARTCfg_tuartConfig;
uartConfig.configured=TRUE;//2530don’tcare.
uartConfigbaudRate=0x08;//设置波特率为115200,
uartConfig.flowControl=FALSE;
uartConfig.flowControlThreshold=SERIAL_APP_THRESH;
uartConfig.rx.maxBufsize=SERIAL_APP_RX_MAX;
uartConfig.tx.maxBufsize=SERIAL_APP_TX_MAX;
uartConfig.idleTimeout=SERIAL_APP_IDLE;//2530don’tcare.
uartConfig.intEnable =TRUE;//2530don’tcare.
一旦网关收到因特网传来的数据后,根据UARTMessageType格式打包,保存在UART0SendMessage变量里,如果uartTask()检查到此变量非空时,就和协调器交互后发送数据。
程序流程如图4-12所示:
图4-12接收流程图
UARTO查询方式发送数据:
voidUART0_SendByte(uint8data)
{
UOTHR=data;
while((UOLSR0x40)==0);
}
采用查询方式接收一字节数据,如:
Uint8 UART0_RcvByte(void)
在ZigBee连通模块与网关的串口间主要是通过三根线相连,一条是接收线(RXD),一条发送线(TXD),另一条地线(GND),本设计发送一组数据在串口调试助手中显示,测试结果图如图4-13所示:
图4-13ZigBee与ARM9通信测试结果图
该测试结果说明ZigBee模块与ARM9开发板通过串口连接能够很好地实现通信。
下面我们来介绍本设计系统中ZigBee模块组网后与网关是如何实现无线数据传输的。
ZigBee模块与网关通信实现连接方式如图4-14所示:
图4-14ZigBee模块与网关通信连接方式
在上一节两个ZigBee模块正确组网的基础上,用串口线一端与ARM9开发板COM口相连,另一端与ZigBee协调器(Coordinator)模块相连,此时打开串口调试界面,显示如图4-15所示的数据。
4-15ZigBee模块与网关通信实现
结果分析:
串口显示数据即为当前室内温度,这说明两个ZigBee模块组网后与ARM9开发板(网关)连接,可以实现无线数据传输,实验达到了预期效果。
本实验我们实现了数据的无线传输,由此还可以扩展很多应用,我们可以在ZigBee模块上连接各种传感器(如温湿度传感器,光照度传感器等)并在协议栈应用层加以相关参数配置,然后把采集到的信息发送给协调器,进而发送给电脑。
4.3网关与因特网通信模块实现
网关与因特网通信模块实现连接方式如图4-16所示:
一方面,网关通过RJ45与因特网连接,另一方面,通过串口线与PC机连接,此时,以太网将自动给ARM9开发板(网关)分配一个IP地址,且与PC机的IP地址在同一网段。
图4-16网关与因特网通信模块实现连接方式
网关和PC是实现本模块通信的两个重要方面,而网络通信分为两种结构,分别是:
B/S和C/S。
在本设计中,考虑到小型化、低能耗以及系统资源利用率等要求,我们采用的ARM9Smart210的开发平台,采用C/S(Client/Server)结构的通信方式,即客户端与服务器结构。
Client将用户的需求提交给Server,再将Server返回的结果以特定形式提供给用户。
Server的任务是接收Client提出的服务请求,进行相应的处理,并将结果返回给Client。
而服务器进程大部分情况下处于“休眠”状态,直到客户端对该服务器发出连接请求,将其“唤醒”。
网关能够同时响应多个客户端,就是说不同的IP地址客户端发送的请求,可以满足用户在不同地方对ZigBee节点进行的控制,基于这个原因,我们将网关与因特网的通信模块设计成C/S结构,考虑到本设计中网关与因特网的通信模块所传输的并非大数据包,基本上可以保证传输质量,且对实时性即传输速率要求较高,故采用UDP传输,网关作为服务器。
客户端(发送端)程序设计步骤:
1.加载套接字库
2.创建套接字(socket)
3.向服务器发送数据(sendto)
4.关闭套接字(closesocket)
4-17UDP协议通信程序流程图
4-18客户端通信程序流程图
4-19服务器程序流程图
在网关上建立一个UDP的任务,为等待客户端的连接,首先需要配置其端口号(9000)和IP地址,然后在PC上再建立一个客户端程序,配置其端口号和服务器地址分别与网关相同,其具体测试结果分别如图4-20与4-21所示:
图4-20Client端发送数据
图4-21Server端接收数据
结果分析:
我们可以观察到Client端(网关)发送的的数据(图4-20)以及Server端(PC机)收到的数据(图4-21),这说明网关与PC机已经建立好连接且可以实现正常通信。
第五章系统功能测试
本系统用到两个ZigBee模块,其中一个作为路由器(Router),负责采集室内温度,另一个作为协调器(Coordinator),与ARM9开发板(网关)通过串口连接,Router将采集到的室内温度无线发送给Coordinator,利用网关的协议转换,实现ZigBee模块与PC机之间的通信,最终实现对室内温度的检测。
系统整机调试连接示意图如图5-1所示,3个虚线框分别代表本系统的3个模块。
图5-1系统整机调试连接示意图
此处需要注意,当系统连接好之后,协调器先上电,路由器后上电,否则将无法正常组网。
打开虚拟机终端,用telnet登陆ARM9开发板(网关),并用Linux相关命令建立Server端与Client端的连接,如图5-2所示。
此时,运行基于QT编写的Receiver程序,在弹出的ReceiverDialog中输入port(端口号)9000,点击Ok按钮,即可得到如图5-3显示的数据。
经过不断的调试和改进,网关各项功能正常,能够完成最初设计目标。
系统最终测试结果如下图所示:
能够实时显示系统的IP地址、测试的时间以及采集到的室内温度。
图5-2网关发送数据
图5-3Qt界面实时显示室内温度
结果分析:
将这些数据与室内温度计显示的数据作比较,误差很小,由此可知本设计的可行性,即可以实现将路由器(Router)节点采集到的室内温度数据无线发送到协调器(Coordinator),协调器再通过UART与网关相连接,最终发送给上位机并显示出来。
结论
总结
本文设计了一个在传统的协议转换型网关的基础上的适用于家庭的物联网智能网关,在此基础上又添加了远程Web服务、数据处理与融合等功能,从而可实现对室内温度的实时监测,达到了预期效果。
硬件平台选用了广州友善之臂公司生产的Smart210开发板作为处理器平台,ZigBee组网采用德州仪器生产的ZigBeeCC2530模块。
设计并实现了一个基于ARM9处理器的ZigBee嵌入式网关,实现了ZigBee网络的无线数据传输以及其和Internet之间数据的通信,给出了硬件设计和主要软件编程思路,并具体介绍了ZigBee网络内部连通区、ZigBee网络与网关连通区以及网关与因特网通信连通区三个部分的设计与实现,通过实验验证:
该网关具有很好的实用性、可靠性、科学性。
现把本文的全部工作简单归纳如下:
全面了解了物联网网关的结构,并考虑到用户体验方面,结合远近程控制的要求,利用WSN和嵌入式系统相关技术,设计了一款小型家庭服务网关,用来监测室内温湿度、光照度等。
(2)在硬件方面,设计并实现了一种基于ARM9、ZigBee的智能网关。
(3)认真研读了IEEE802.15.4标准和ZigBee协议,很好的把握了ZigBee协议各层的脉络,为后面的应用实现奠定了扎实的理论基础。
(4)对ZigBee协议栈的应用层进行了重点的分析,本文在应用层实现了ZigBee小范围星形网络的组网以及网络内部连通、实现了基于ZigBee协议栈的串口通信、实现了基于协议栈的以太网口Socket通信。
(5)最后对本设计的三个模块进行联合调试,可以实现对室内温度的实时监测,网关的基本功能得到证实。
2、展望
由于时间紧迫且个人能力有限,本设计尚存在许多不足之处,可以改进和扩展的地方如下所述:
(1)本设计中的网关只实现了对室内温度的实时监测,系统的感知层和应用程序这两部分还可以进一步扩展,如外接湿度、光照度传感器以及声音、图形识别设备等,真正实现家庭智能服务型网关。
(2)为增加对过往数据的查询,可以制作一个数据库,方便对过往数据的再次利用。
同时可以考虑外扩存储器,并移植嵌入式文件系统,以方便对采集数据的存储。
(3)还可以加入GPRS模块以实现与智能终端的无线连接。
(4)考虑到环保、节能等方面的要求,在没有访问或暂停访问时将其设置为待机状态。
(5)为保证系统的安全性,可以在远程登陆时设置相关的安全验证。
致谢
光阴似箭,转眼间大学四年即将画上句号,值此毕业之际有千言万语想对各位老师、同学、朋友述说。
首先感谢指导老师,吴老师时常教导我们说“万丈高楼平地起”,要我们重视对基础知识的学习、理解、把握,只有基础牢,才能很好的接受并掌握新的知识。
在本文的设计中,从选题、撰写、结果验证、论文修改、定稿,吴老师都给予了悉心的指导,提出了宝贵的意见。
每当我遇到难以解决的问题并处于消极状态时,吴老师更是耐心指导,鼓励我坚持下去。
在此向吴老师致以真诚的谢意和崇高的敬意!
其次,感谢实验室的师兄师姐帮我解决问题,使我渡过难关,让我在心理承受能力方面得到了真正的历练,同时在技术方面也有了较大幅度的提升。
当然在此还要特别感谢我的父母和亲人,他们无论是在物质上还是精神上都给了我极大的支持,他们所倾注的爱与关怀给了我无限的激情与动力,使我能够一如既往地追寻自己的青春之梦。
路漫漫其修远兮,吾将上下而求索。
在以后的学习与工作过程中,我定将以全部的热忱与激情投入,不负众望!
最后向参加论文审阅、答辩的各位老师真诚地道一声:
你们辛苦了!
参考文献
[1]叶云.物联网的应用前景和解决方案[J].中兴通讯技术,2012
(2):
15-17.
[2]孔晓波.物联网概念与演进路径[J].电信工程技术与标准化,2009(12):
12-14.
[3].黄海昆,邓佳佳,物联网网关技术与应用[J].电信科学,2010(4):
第20-24页.
[4].沈苏彬等,物联网的体系结构与相关技术研究[J].南京邮电大学学报(自然科学版),2009(6):
1-11
[5].闻涛,吕丽民,物联网技术在企业安全生产中的应用[J].计算机技术与发展,2012
(2):
226-228,233.
[6].刘强,崔莉,陈海明,物联网键技术与应用.计算机科学[J],2010(6):
1-4,10.
[7].陈琦等,基于Zigbee/GPRS物联网网关系统的设计与实现[J].计算机研究与发展,2011(S2):
367-372
[8]H.Jin,WC.Liu,JT.HanandYLDing,ApplicationStudyofInternetofThingsinHome[J].TelecommunicationsScience,Vol.26,No.2,2010.
[9]黄海昆,邓佳佳.物联网网关技术与应用[J].电信科学,2010(4):
20-24.
[10]罗俊海,周应宾,邓霄博.物联网网关系统设计[J].电信科学,2011
(2):
105-106.
[11]YaoMing,ChenWeiShenHongweiHuoandYouzhiXu.ASmartGatewayforHealthCare
SystemUsingWirelessSensorNetwork[C].Internati