基于无线传感器网络和GPRS的远程环境监测系统.doc_第1页
基于无线传感器网络和GPRS的远程环境监测系统.doc_第2页
基于无线传感器网络和GPRS的远程环境监测系统.doc_第3页
基于无线传感器网络和GPRS的远程环境监测系统.doc_第4页
基于无线传感器网络和GPRS的远程环境监测系统.doc_第5页
免费预览已结束,剩余29页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于无线传感器网络的远程环境监测系统的设计与实现课程设计 提供完整版毕业论文学生学号 实验课成绩学 生 实 验 报 告 书 实验课程名称嵌入式系统设计开 课 学 院指导教师姓名学 生 姓 名学生专业班级2013-2014学年第二学期目录课程设计任务书21.系统描述31.1研究意义31.2远程环境监测的发展前景32系统总体分析43.系统总体设计43.1系统主要模块硬件设计43.1.1现场监控网络硬件43.1.2监控终端传感器节点设计53.1.3监控汇聚节点设计53.1.4远程监控中心硬件53.2系统软件设计63.2.1传感器网络节点63.2.2监测中心平台74.详细的流程图74.1设备安装74.2配置ip和开启服务94.3创建tftpboot文件夹104.4启动超级终端114.5拷贝文件114.6编译源程序134.7通信程序运行134.8打开数据库接收数据135.软件的测试方法和测试结果146.实验体会167附件:16senddata 代码16recieve 代码28本科生课程设计成绩评定表34 课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 计算机学院 题 目: 基于无线传感器网络的远程环境监测系统的设计与实现 初始条件:1理论:使用嵌入式系统设计、计算机组成原理、数字逻辑、微机原理与接口技术、c语言,程序设计方法等专业知识。2实践:学习和使用嵌入式实验箱cvt6410的使用方法、linux交叉编译软件环境。完成从串口获取信息,并通过socket方式进行数据通讯,将信息存储到数据库,通过web页面发布相关信息。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)课程设计内容:利用嵌入式实验箱cvt6410完成以下内容,撰写嵌入式系统设计报告。搭建嵌入式系统开发环境,进行linux内核移植,烧写linux系统,编写应用程序,完成以下功能:1. 通过串口传输,获得zigbee嵌入式网关采集的zigbee传感器模块上的信息;2. 利用实验箱上的rj45网口,通过网线与pc机建立连接,并基于linux环境下的socket通讯方式在实验箱与pc机间传递数据,将采集的信息存储于pc机的数据库中。3. 在pc机端显示采集的信息。课程设计报告书正文的内容应包括:(1)系统描述(问题域描述);(2)系统总体分析;(3)系统总体设计;(4)详细的流程图或伪代码;(5)软件的测试方法和测试结果;(6)研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);时间安排:序号设计内容所用时间1查阅资料,熟悉实验平台和搭建嵌入式系统开发环境,完成linux内核移植和烧写linux系统0.5周2相关基础技术掌握1 周3应用软件系统的开发与实现,及撰写文档1.5 周合 计3 周 指导教师签名: 2014 年 7月 4日1.系统描述1.1研究意义随着人类社会的快速发展及无序、无度的环境利用,使自然环境遭到了巨大的破坏,这不仅影响社会经济,还危及到人类的生存安全。因此必须对生存环境进行精确、实时的监测,以有效降低各种环境灾害对人类造成的生命财产损失。近年来,由于计算机技术、网络技术、现代电子技术的迅猛发展,无线通信技术在医疗、自动化控制、远程监测等多个领域得到了广泛的应用。其中环境远程监测有其特定的应用背景,一般在比较偏僻、环境恶劣的无人居住区域(如沙漠、高山、丛林等危险地区),这使得很难通过架设电缆来完成数据传输,因此使用无线通信是一种很好的选择。无线通信技术从通信距离上可划分为远距离无线通信和短距离无线通信技术,各种无线通信技术根据其自身技术特点适用于不同的领域。本研究利用无线通信技术进行环境的远程实时监测,掌握环境变化信息从而达到高效的预警和监测目的。1.2远程环境监测的发展前景目前国内外市场上存在两种较为成熟的环境远程监测方案:一种是基于远距离无线通信(如gprs,cdma等移动通信网络)的环境远程监测系统,一种是基于近距离无线通信(如zigbee,bluetooth等)的环境监测系统。在中国具有代表性的远距离无线通信网络是 gprs 和 cdma 移动通信网。gprs(general packet radio service,通用分组无线业务)是在 gsm 网络的基础上叠加一个新的网络而形成的逻辑实体,是在现有gsm系统基础上发展出来的一种新的分组数据承载业务1。由于具有永久在线、远距离传输、数据传输速率高、按流量计费等特点而广泛应用于移动商务、移动互联网、工业控制等领域;而在近距离无线通信领域中,zigbee 技术和蓝牙技术一直是业界谈论的热点。zigbee技术由于具有低成本、低功耗、低复杂度、低传输速率以及较远的传输距离等特点,广泛应用于智能家居、工业控制、手机终端、楼宇自动化等领域,在无线通信领域具有显而易见的优势和潜在的应用价值。近几年结合zigbee和gprs提出的远程控制解决方案也越来越多,如无线自动抄表系统、远程农作物监控系统、在线水质监测系统等。越来越多的相关应用也会逐渐在未来社会中得以实现,从而更好地促进人类发展,合理地分配各种资源。2系统总体分析搭建嵌入式系统开发环境,进行linux内核移植,烧写linux系统,编写应用程序,完成以下功能:1. 通过串口传输,获得zigbee嵌入式网关采集的zigbee传感器模块上的信息;2. 利用实验箱上的rj45网口,通过网线与pc机建立连接,并基于linux环境下的socket通讯方式在实验箱与pc机间传递数据,将采集的信息存储于pc机的数据库中。3. 在pc机端显示采集的信息。3.系统总体设计3.1系统主要模块硬件设计对于网络节点的设计,主要依据以下几个方面:(1)低功耗:硬件上尽可能使用低电压、低功耗的芯片。软件上可以添置电源管理功能,合理分配能量。(2)优良射频性能:提高节点的射频性能可以改善网络工作能力,比如同等功耗下节点通信距离,越大往往具有越强的实用性。(3)微型化:节点体积应足够小,保证对目标系统本身特性不会构成影响,另外也方便部署。(4)低成本:低成本保证了节点的广泛使用,设计中节点模块不能太多且不能太复杂。(5)可扩展性:采用模块化设计,根据不同的需要可以添加不同的功能模块。在这里,针对实际项目需求与网络节点的要求,本着自主研发的态度,以zigbee系列芯片cc2430为核心设计整个硬件平台。整个硬件结构包括传感器板、zigbee网络节点和串口。3.1.1现场监控网络硬件现场监控网络主要由汇聚节点和终端传感器节点组成,其中终端传感器节点主要完成数据采集,汇聚节点一方面接收终端节点的环境信息,同时要将环境信息通过串口发送至远程监控控制中心.3.1.2监控终端传感器节点设计监控终端传感器节点由传感器模块、cc2430zigbee模块和电源模块组成.传感器负责监控区域内信息的探测和数据转换;cc2430负责控制整个节点的管理、数据采集和无线通信;电源模块为传感器节点提供运行所需的能量.3.1.3监控汇聚节点设计 监控汇聚节点由单片机、cc2430zigbee模块、串口、电源组成.其中单片机为主控机,管理协调汇聚节点的所有功能,完成与cc2430模块的数据通讯,同时控制串口发送和接收数据.a.单片机. 监控汇聚节点选用s3c6410系列单片机,由于cc2430模块都需要通过串口与单片机通信,因此通过模拟开关74hc4052芯片选择不同模块进行通信.当74hc4052芯片的使能端vee为低电平时,若s1和s2都为低电平时,串口0接通,单片机与gprs进行通信;若为s1低电平,s0为高电平时,串口1接通,单片机与监控点cc2430模块进行通信;s1为高电平,s2为低电平时,串口2接通,单片机与gps进行通信.因此通过p0.0和p0.1口来控制s1和s0的状态就能选择at89c52与不同模块进行通信b.电源模块. 由于单片机、74hc4052芯片、max232芯片和tc35i模块的供电电压为5v,而cc2430模块和gps模块的供电电压为3.3v,为了将5v转化为3.3v,需要采用tps7333q芯片来实现电压的转换.3.1.4远程监控中心硬件远程监控中心主要由监控中心服务器、数据库系统与应用软件、gprs通信模块组成。3.2系统软件设计无线传感器网络节点的工作分为两个阶段:组建网络阶段和数据收发阶段:组网之前协调器和精简功能设备(reducedfunction device,rfd)已经配置好各自的mac地址,只要保证相互之间不冲突即可。在协调器和各个rfd组建网络完成之前,相互之间是通过mac地址进行通信的。在组网阶段,协调器选择一个pan id建立网络,建立成功后允许rfd加入网络。只要rfd发出加入网络的请求数据帧,协调器就允许该rfd加入网络。并同时分配用于网内通信的16bit的短地址,而不再使用64bit的mac地址,这样可以节省无线传感器网络节点有限的能量。rfd上电以后,发出加入网络的请求数据帧。如该rfd之前已经加入协调器组建的网络,它可以执行孤立节点通知过程来定位其之前关联的网络。否则,以新设备加入协调器组建的网络并从协调器处获得网络短地址。当协调器组网成功后,rfd均已加入网络,便可进行数据的收发。3.2.1传感器网络节点 考虑到各个rfd之间进行通信的意义不大,且增加网络结构的复杂性,在项目中采用星形网络拓扑结构。该结构由一个协调器和多个rfd构成。rfd只能与协调器直接进行通信,而各个rfd之间无法直接进行通信。如果rfd需要进行通信,需要通过协调器进行转发。在编写协调器和rfd的代码之前需要根据要实现的功能编写配置文件。 对于终端节点,其流程较简单,设置好定时器中断,每隔一定时间读取传感器数据,并将其发送至相邻的协调节点,发送完后便进入待机状态,为减少能量损耗,直到定时中断的再次到来。协调节点在上电后负责组建网络,当然网络组建好后,进入数据收发段,如果监测收到数据,便将数据发送到相邻的协调节点,如果传送到汇聚节点,便解析数据包,并重新按规定格式打包,通过串口发送至gprs模块,gprs模块负责将数据发送至监测中心软件。 3.2.2监测中心平台监测中心将收集的各传感器数据经过处理以后显示给用户,根据用户需要将采集到的数据情况保存于文件或数据库中,以备查询。监测系统的使用最终是要面对用户的,因此监测软件的开发将决定系统能否方便高效运行。考虑到以后与internet网络连接,用户可以在任何一台与internet网络连接的pc机上查询数据,整个平台采用bs模式开发。监测中心软件设计包括用户登录管理、系统自检、数据读取显示、历史数据分析与查询等模块。4.详细的流程图4.1设备安装(1)在windows环境下安装虚拟机vmware,如下图:首先下载fedora10镜像文件,开启虚拟机,并开始创建一个新的虚拟机,选择标准即可,如下图: 选择linux,下面我们选择otherlinux 网络类型,选择use-bridgednetworking 设置虚拟文件的最大大小(建议不要勾选allocatealldiskspacenow) 安装完成后,如下图: (2)在vmware下安装fedora10:用虚拟机装载fedora10的镜像文件cd-rom-sueisoimage-选择你的fedora镜像文件路径(3)windows 7系统安装hyperterminal,即将hyperterminal文件夹下的hyperterminal_english_ansi 里的hticons.dll和hypertrm.dll拷贝至c:/windows/system32下(4)安装交叉编译器:将examples-newwsn-6410.tar.gz文件拷贝至/opt目录下在windows系统创建d:/share文件夹 如上所示选择【设置】。 左上方选择【选项】,选择【共享文件夹】,在右上方选择【总是启用】,初次设置时没有共享文件夹,此时选择【添加】选择刚才在windows系统下创建的d:/share文件夹,之后点击【下一步】完成共享文件夹的创建。 4.2配置ip和开启服务 (1) 首先查看网络接口是eth0还是eth1:/sbin/ifconfig (2)用ifconfig eth0 2 netmask 配置成指定ip。 (3)重启portmap服务 重启nfs服务 关闭iptables服务 4.3创建tftpboot文件夹cd /mkdir tftpbootchmod 777 /tftpboot4.4启动超级终端(1)使用usb转串口线(或普通rs232线)将6410实验箱和pc机相连。打开hyperterminal软件,选择正确的串口,具体设置如下: 设置完成后,点击确认。正确连接至6410实验箱后,多次回车,会出现如下结果: (2)挂载: 将tftpboot文件夹中文件至嵌入式linux的mnt文件夹中。 输入如下命令: mount 2:/tftpboot /mnt -o nolock (正确挂载后,系统不会显示任何结果) 挂载成功后,输入cd /mnt 查看挂载结果。 4.5拷贝文件将my6410文件拷贝至/opt目录下设置共享文件夹在windows系统创建d:/share文件夹 如上所示选择【设置】。 左上方选择【选项】,选择【共享文件夹】,在右上方选择【总是启用】,初次设置时没有共享文件夹,此时选择【添加】 选择刚才在windows系统下创建的d:/share文件夹,之后点击【下一步】完成共享文件夹的创建。将my6410文件复制到windows系统中d:/share文件夹中。4.6编译源程序1.进入fedora10系统,在终端下输入如下命令(root权限下):cp /mnt/hgfs/share/my6410 /opt/ls进入senddata文件夹:cd senddatamake cleanmake此时可执行文件已自动拷贝至/tftpboot文件下。2.挂载tftpboot至6410实验箱中的/mnt下。(参考4.4(2)挂载)挂载成功后,进入/mnt目录,在超级终端下输入如下内容:cd /mntls会显示刚才生成的senddata的可执行文件,输入如下命令:./senddata.arm 5678。在超级终端下打印出信息。4.7通信程序运行打开eclipse编译环境,输入写好的socket通信程序,运行4.8打开数据库接收数据打开数据库,新建一个数据库表格,用于存放从串口收到的数据 点击小应用程序中的按钮,每点击一次,数据就接收发送一次 5.软件的测试方法和测试结果 1.在超级终端将挂载tftpboot文件夹中文件至嵌入式linux的mnt文件打开mnt,找到senddata.arm, 输入命令./senddata.arm 5678 2.打开eclipse编译环境,运行receive程序,出现如下结果:3.点击小应用程序中的按钮,数据写入同时发送,结果如图4.再次点击:5.打开数据库,delete数据库记录,重新读取数据6.实验体会通过这次课程设计的整个实验过程,将所学的知识得到了灵活的运用,在实践的基础上更加完整的去理解整个系统的工作流程,通过与同学的合作和老师的交流也让自己在整个实验过程中认识到团体的重要性,在实验过程中遇到过很多关于实验箱,实验环境的配置,实验程序的调试问题,通过与同学之间的交流一步步去解决,最后顺利的完成了实验。7附件: senddata 代码senddata.c/* senddata.c - a datagram client demo*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define false0#define true1/#define myport 4950 / the port users will be connecting toint myport;int nread=0;char recbuff1024;int srecdatalen = 0;char send_buf20;int count=0;static int serial_fd;int speed_arr = b230400, b115200, b57600, b38400, b19200, b9600, b4800, b2400, b1200, b300, b38400, b19200, b9600, b4800, b2400, b1200, b300;int name_arr = 230400, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300;static int fd = -1;unsigned char seg7table16 = /* 0 1 2 3 4 5 6 7*/ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, /* 8 9 a b c d e f*/ 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,;/-void set_speed(int fd,int speed)int i;int status;struct termios opt;tcgetattr(fd, &opt);/tcsetattr函数用于设置终端的相关参数。参数fd为打开的终端文件描述符,参数optional_actions用于控制修改起作用的时间,而结构体termios_p中保存了要修改的参数。for( i = 0; i 0)set_speed(serial_fd,115200);elseprintf(cant open serial port!n);exit(0);if(set_parity(serial_fd,8,1,n) = false)printf(set parity errorn);exit(1);return 0;int main(int argc, char *argv)/define send socket int sockfd; struct sockaddr_in their_addr; / connectors address information struct hostent *he;/define receive socket int sockfd_r; struct sockaddr_in my_addr_r; / my address information struct sockaddr_in their_addr_r; / connectors address information serial_init(); /* parameters check */ if (argc != 3) fprintf(stderr,usage: talker hostname portn); exit(1); fd=open(/dev/seg,o_rdwr);if(fdh_addr); memset(&(their_addr.sin_zero), 0, 8); / zero the rest of the struct /* setup socket */ if (sockfd_r= socket(af_inet, sock_dgram, 0) = -1) perror(socket); exit(1); my_addr_r.sin_family = af_inet; / host byte order my_addr_r.sin_port = htons(4950); / short, network byte order my_addr_r.sin_addr.s_addr = inaddr_any; / automatically fill with my ip memset(&(my_addr_r.sin_zero), 0, 8); / zero the rest of the struct /* bind */ if (bind(sockfd_r, (struct sockaddr *)&my_addr_r,sizeof(struct sockaddr) = -1) perror(bind); exit(1); char buff1024; char recbuff100; int numbytes; while(1) while(1) nread = read(serial_fd,buff,1024);if(nread 0)char send_buf8; int addr_len_r=sizeof(struct sockaddr); if (numbytes=recvfrom(sockfd_r, recbuff, 99, 0, (struct sockaddr *)&their_addr_r, &addr_len_r) = -1) perror(recvfrom); exit(1); else ioctl(fd, 0, seg7tablecount); count+; if(count10) count=0; recbuffnumbytes = 0; printf(n%s says:%s,inet_ntoa(their_addr_r.sin_addr), recbuff);int i;for(i=0;i8;i+)send_bufi = buffi;int numbytes;if (numbytes=sendto(sockfd, send_buf, strlen(send_buf), 0,(struct sockaddr *)&their_addr, sizeof(struct sockaddr) = -1) /printf(failed); close(sockfd); return 0;recieve 代码import java.applet.applet;import java.awt.borderlayout;import java.awt.button;import java.awt.gridlayout;import java.awt.textfield;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.io.bytearrayinputstream;import java.io.datainputstream;import .datagrampacket;import .datagramsocket;import .inetaddress;import .inetsocketaddress;import .socketaddress;import java.sql.connection;import java.sql.drivermanager;import java.sql.resultset;import java.sql.statement;import java.util.*;public class recieve extends applet implements actionlistener textfield temdata; textfield moidata; textfield lightdata; textfield oxydata; button refresh; button wrtodb;private static bytebuf;private static bytearrayinputstream bais;private static datainputstream dis;private static connection dbconn;private static statement sta;private static resultset re;private static int temperature;private static int moisture;private static int light;private static int oxygen;private static socketaddress sd; public void init() temdata=new textfield(20);moidata=new textfield(20);lightdata=new textfield(20);oxydata=new textfield(20);wrtodb=new button(采集数据并写入数据库并发送数据控制数码管);add(temdata);add(moidata);add(lightdata);add(oxydata);add(wrtodb);wrtodb.addactionlistener(this);string drivername=com.microsoft.sqlserver.jdbc.sqlserverdriver; string dburl=jdbc:sqlserver:/localhost:1433;databasename=keshe; string username=sa; string userpwd=123; try buf=new byte8; bais=new bytearrayinputstream(buf); dis=new datainputstream(bais); catch(excep

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论