毕业论文-基于ARM9的嵌入式智能家居网关的设计与实现_第1页
毕业论文-基于ARM9的嵌入式智能家居网关的设计与实现_第2页
毕业论文-基于ARM9的嵌入式智能家居网关的设计与实现_第3页
毕业论文-基于ARM9的嵌入式智能家居网关的设计与实现_第4页
毕业论文-基于ARM9的嵌入式智能家居网关的设计与实现_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

PAGE基于ARM9的智能家居网关设计与实现摘要随着芯片技术和计算机软件技术的飞速发展、人们生活水平的不断提高,家居智能化控制被越来越多的人关注,人们希望通过该技术能够更加方便简洁的对家居环境进行控制,由此智能家居便应运而生,本次设计便是根据智能家居的基本功能,通过对嵌入式ARM系统平台搭建和服务器的实现,设计并实现了智能家居网关的设计。本文主要研究基于ARM9内核的S3C2440芯片的嵌入式智能家居网关的设计与实现。文章首先介绍了嵌入式智能家居的当前应用背景和发展情况,整体论述了系统的软硬件开发平台,主要详细的介绍了系统软硬件平台的整体搭建过程,其中包括了交叉编译环境的建立、Bootloader启动引导程序的移植、linux-2.6.35内核的移植以及简易yaffs文件系统的制作;接着探讨了Web服务程序Boa和嵌入式数据库SQLite的移植;最后设计和实现了一个嵌入式智能家居服务器,主要通过编写CGI程序来实现客户端和服务器端的动态页面交互。整个系统完成了家居环境的简单信息检测,远程Web服务器的访问,同时实现了通过Internet和本地对信息的检测以及对设备的简单控制功能。经过测试表明,本系统具有良好的通用性、实用性和扩展性,可以应用到具体的嵌入式智能家居系统的开发中。关键词:嵌入式智能家居ARM9Web服务器

TheARM9-basedImbeddedIntelligentHomeGatewayDesignandImplementedAbstractWithchiptechnologyandtherapiddevelopmentofcomputersoftwaretechnology,continuousimprovementofpeople'slivingstandard,intelligenthomecontrolareconcernedbymoreandmorepeople.Peoplewanttocontrolmoresimplyandconvenientlytothehomeenvironment,sothesmarthomehavecomeintobeing.Basedonthebasicfunctionsofsmarthome,throughtheplatformtobuildembeddedARMsystemsandserverimplementation,designandimplementationofintelligenthomegatewayisrealized.Inthispaper,theARM9-basedembeddedintelligenthomegatewayisdesignedandimplemented.Inthisarticle,firstly,theembeddedintelligenthomeapplicationbackgroundanddevelopmentofthecurrentsituationareintroduced,thewholeprocessofthesystemincludinghardwareandsoftwaredevelopmentplatformmainlydiscussed,andthehardwareandsoftwareplatformincludingtheestablishmentofcross-compilerenvironment,thetransplantationofthebootloaderandlinux-2.6.35kernel,themadeofthesimpleyaffsfilesystemareintroducedindetail;Seconendly,theBoaWebserverprogramexploresandembeddedSQLitedatabasemigrationisdebated;Finally,anembeddedintelligenthomeserverwhichmainlyachieveclientandserver-sidedynamicpagesinteractiveisdesignedandimplementedbywritingCGIprograms.Inthiswholesystem,asimplehomeenvironmentinformationdetectionandtheaccessofremoteWebserverarecompleted,asimplecontrolfunctionanddevicedetectionswhichisachievedbytheInternetandlocalaccessareallrealized.Aftertesting,thesystemshowsthegoodversatility,practicalityandscalabilityandcanbeappliedtospecificembeddedintelligenthomesystemdevelopment.Keywords:EmbeddedIntelligenthomeARM9Webserver

目录1引言 11.1研究背景及现状 11.2研究目的 11.3内容大纲 22嵌入式系统平台的搭建 32.1设计平台简介 32.2嵌入式开发环境的搭建 32.2.1交叉编译环境的构建 32.2.2配置NFS文件传输方式 42.3嵌入式系统平台的建立 42.3.1BootLoader的移植 42.3.2Linux内核的移植 52.3.3yaffs文件系统移植 82.4make工具简介 92.5本章小结 103下位机Zigbee配置 123.1Zigbee简介 123.2Zigbee协议栈简介 123.3Zigbee协议的消息格式及帧格式 133.4节点简介 133.5本章小结 154服务器的搭建 164.1Boa服务器的移植 164.1.1Boa服务器简介 164.1.2Boa的移植 174.2HTML网页制作 184.2.1HTML简述 184.2.2HTML效果 204.3CGI交互程序的编写 204.3.1CGI简介 214.3.2CGI程序的接口规范 214.3.3CGI程序设计 234.4嵌入式SQLite数据库 254.4.1SQLite数据库简介 254.4.2SQLite数据库的接口(API)函数 264.4.3SQLite数据库的移植 264.5本章小结 275上位机QtGui设计 285.1Qt/Embedded简介 285.2Qt开发环境的搭建 295.3Qt程序设计 295.4QtCreator设计简介 305.4.1QtCreator开发环境 305.4.2QtCreator工程创建过程简介 305.4.2工程文件分析 315.5本章小结 336功能测试 346.1服务器测试 346.2Zigbee测试 356.3QtGui测试 356.4整体测试 356.5本章小结 367总结 37谢辞 38参考文献 39附录 40XXXX毕业设计PAGE11引言1.1研究背景及现状随着芯片技术和计算机系统的发展,如何更加简洁方便的提高家居生活的质量成为当今社会的热门话题,相对应的家具智能化即智能家居的理念便应运而生。当下无线传感器网络技术的理论突破,及支持相关无线协议的芯片的成功研制,利用无线技术组建局域网将变的越来越容易。信息化的时代对传统住宅的智能化、无线化、舒适性和安全性提出了新的挑战,随着人们生活水平地提高,对家居环境的要求从以前单纯的物理空间,到现在的延伸为一个安全、方便、舒适的居住环境。智能家居系统正是在这样的情形下,成为新世纪的热门话题。智能家居实际上就是一个先进的计算机系统,通过各种有线无线通信技术、计算机技术、布线技术以及传感技术,将家庭内部进行合理的规划从而划分为相关的子系统,并组建为一个有机的整体,通过统一的管理,让家居生活变得更加舒适、安全、高效。其一,智能家居系统可以实现主人采用更先进的方法来控制家电设备,比如通过手机、Internet网络、语音识别等远程控制家用电器;其二,家居系统内部各个设备彼此可以通信,无需手动操作即可实现自动控制。嵌入式系统接入Internet也成为了嵌入式应用领域的热点之一。将嵌入式Web服务器移植到目标嵌入式系统后接入Internet,从而使该嵌入式系统成为一个功能齐全的小型Web服务器,在远程即可通过浏览器(比如IE)获取该Web服务器发布的信息,进而实现远程的实时监控和维护。嵌入式Web服务器接入Intemet后,面临着处理来自远程客户端的连接请求和传输大量的数据的任务,这就要求一方面嵌入式硬件的处理能力要更强;另一方面随着传输数据的增多,并且数据类型的复杂化,在嵌入式系统中单纯的以文件存储数据的传统存储形式远远满足不了需求,解决办法是使用数据库来存储并且管理数据。在搭建嵌入式网关时使用数据库将极大的提高系统的整体性能,缩短系统的开发周期,同时通过数据库自带的安全性检查可以提高系统的整体安全性。正是基于以上背景,本论文搭建了ARM9+嵌入式Linux的嵌入式软硬件平台,在此软硬件平台之上实现了对Web服务器Boa和数据库Sqlite的移植,采用C语言和Qt设计了一个从下位机获取相关数据并进行处理和显示的平台。1.2研究目的本论文主要是通过对Linux内核的移植为服务器的实现搭建基础平台,进而完成智能家居服务器网关的实现。本论文在智能家居局嵌入式网关的经典架构的基础上根据本课题的特点做出了适当修改以适应本次设计的需求从而分成下位机Zigbee串口通信模块、上位机Gui模块、上位机Boa服务器的搭建、服务器交互html模块等,各个模块采用C、Html、Qt等语言编程,并编译连接生成目标平台的二进制的可执行文件,然后烧录至目标板NANDflash,配置目标板的启动加载文档以实现程序的开机启动从而使其脱离开发人员的管理仍可以正常工作。1.3内容大纲本文共分为七章,第一章为引言,包括研究目的,研究背景及现状等;第二章为嵌入式系统平台的搭建,主要包括交叉编译环境的构建,u-boot、linux内核的移植和yaffs文件系统的制作;第三章主要阐述了Zigbee下位机的设计思路;第四章主要为嵌入式网关服务器的整体搭建;第五章为QtGui的整体设计。

2嵌入式系统平台的搭建2.1设计平台简介在电子硬件设计技术领域,ARM是AdvancedRISCMachines的缩写,是嵌入式微处理器行业的一家知名企业,该企业设计了大量廉价、高性能、低功耗的RISC处理器相关技术及软件。本论文的硬件平台中央处理器(CPU)为三星公司基于ARM920T内核开发的S3C2440。S3C2440适用于POS机、手持PDA设备、数字多媒体设备等,具有低价位、低功耗、高性能等优点。平台主要由微处理器、存储模块、控制模块、以太网接口模块、USB接口模块、液晶显示模块、仿真调试模块组成。下面重点介绍与嵌入式Web服务器应用相关的几个模块:微处理器S3C2440、存储模块、以太网接口模块。S3C2440采用了ARM公司设计的ARM92OT内核。S3C2440既支持NANDFlash启动,又支持NORFlash启动,可以通过OMO引脚进行选择,当OMO为低电平时,系统将从NANDFlash启动系统;当OMO为高电平或者是处于悬空状态时,系统从将NORFlash启动[1]。本此设计的网络控制器使用的是DAVICOM公司的DM9000芯片,该控制器携带有有标准的10M/100M以太网自适应,16K的大容量FIFO,4路的多功能输入输出总线,采用全双工工作模式等。本次设计的硬件平台使用了16位总线控制的DM9000以太网控制器芯片,数据总线DATA0~DATA15分别与DM9000的数据总线SD0~SD15连接,地址线SA4~SA4进行了相应的连接,片选线nGCG3与芯片的AEN相连。DM9000芯片的工作基址为0X300。2.2嵌入式开发环境的搭建由于嵌入式系统资源的相对缺乏从而不能在本机上(目标机)直接进行开发调试,因此嵌入式开发形成了独特的交叉开发调试方式。即完成软件的编写工作以后,先在宿主机上采用适合目标机的编译器对软件进行编译,然后将编译后的二进制可执行程序下载到目标机上相应的交叉调试。2.2.1交叉编译环境的构建本次设计采用的是arm-linux-gcc交叉编译工具的4.3.2版本,1、下载arm-linux-gcc-4.3.2.tar.gz到虚拟机的用户目录下并进入该目录,然后执行下列命令解压编译链到目标目录下#mkdir/usr/local/arm#tarzxvfarm-linux-gcc-4.3.2.tar.gz/usr/local/arm2、完成后会在/usr/local/arm下生成4.3.2目录,然后执行一下命令以配置当前环境变量#exportPATH=$PATH:/usr/local/arm/4.3.2/bin3、执行下列命令查看交叉编译环境是否成功搭建#whicharm-linux-gcc2.2.2配置NFS文件传输方式NFS(NetworkFileSystem)最初由SUN公司开发,目的就是让不同体系结构的硬件,不同的操作系统系统通过网络可以彼此之间共享文件。在本次设计中,NFS服务器可以让目标机通过网络将宿主机所共享的文件挂载在本地目录上,在宿主机看来,访问共享的文件就相当于访问自己的磁盘分区一样,十分方便快捷[3]。针对宿主机的环境,具体的配置如下:安装NFS服务器,执行#apt-getinstallnfs-kernel-servernfs-common配置NFS服务器的工作位置,执行#vi/etc/exports在文件尾加上/*(rw,sync,no_root_squash)重启服务生效,执行#servicenfs-kernel-serverrestart2.3嵌入式系统平台的建立平台的搭建分为三部分分别是BootLoader的移植、Linux内核的移植和yaffs文件系统的移植。2.3.1BootLoader的移植BootLoader在嵌入式系统中的作用相当于PC机中BIOS启动引导设备,其主要作用是为系统的启动做相关的引导和加载准备。CPU上电后运行的第一段代码是从存储设备的0x0地址开始运行的也就是BootLoader,它首先会对嵌入式平台的硬件资源进行相对简单的初始化,并设置好函数堆栈指针,然后加载系统内核到内存中,最后设置PC值跳转到内核的内存入口地址,将系统的控制权交给操作系统的内核函数。在嵌入式领域中,BootLoader是依赖于所处硬件环境的,对于不同的处理器体系结构和外围资源来说决定着将使用不同的BootLoader。在本次设计采用的ARM9体系的处理器中,系统上电后执行的第一条指令在内存中的地址是0x0,在这个地址里应该存放的是系统的引导程序,以使得系统在上电启动的后,CPU首先执行的就是Bootloader程序。BootLoader一般包括两种工作模式:命令和加载模式[2]。嵌入式系统工作在正常的时候都是采用的加载模式,BootLoader把操作系统内核由系统的NANDFlash存储器中直接拷贝加载到RAM中并运行。这是由于RAM存储器的存取速度要比NANDFlash存储器快的多,而且NANDFlash不支持内存的随机存取,采用这种工作方式会大大提高代码的执行效率,提高了系统的实时性。在第一次烧录BootLoader、系统内核和根文件系统以及其他应用软件的时候,采用的应该是命令模式。在该模式下,从宿主机上下载的文件将被BootLoader保存到目标机的RAM中,然后再被烧写到NANDFlash的对应地址中。开发完成后,以后也会采用命令模式对系统的底层软件进行更新。这两种工作模式,只是在嵌入式系统的开发初期中有区别。系统开发完成后,从用户的角度来看,BootLoader是工作在加载模式的,只起到加载系统的作用。本次设计采用对Linux支持完善的开源的启动加载程序U-boot,其具有强大的代码可移植性和良好的运行效率。U-boot的源文件由上千个文件组成,其主要文件结构和功能如下:board:开发板相关的文件目录,根据厂商进行分类,如当前平台属于三星则其平台相关文件在board/samsung/下。cpu:体系结构相关的文件目录,按架构进行分类,当前平台采用S3C2440则其相关文件在cpu/s3c2440下,包括第一阶段启动代码start.S。common:包含所有的U-boot下载模式下各种命令的实现源码,通常每一个.c都对应着一条命令的实现。include:包含编译过程中需要的头文件和开发板的配置信息。doc:开发使用文档,主要介绍不同平台的配置编译方法。drivers:设备的驱动文件,如SD卡,网卡,显示屏等。fs:所支持的文件系统,如fat等,用于访问带文件系统的存储设备tools:工具软件,如mkimage用于制作内核镜像,scripts用于生成指定的config.mk配置文件,还有支持GDB的调试工具等移植步骤如下:将下载的u-boot.tar.bz2拷贝到虚拟机中,解压缩并进入目录中#tarjxvfu-boot.tar.bz2#cdu-boot2、自动配置当前平台环境,执行#makes3c2440_config3、编译#make完成后会在当前目录下生成u-boot.bin二进制镜像文件,经该文件烧写到NANDFlash的0x0地址处即可完成u-boot的全部移植工作。2.3.2Linux内核的移植嵌入式硬件系统为嵌入式软件系统运行提供了可供其运行的物理平台,是整个嵌入式设备的基础,而嵌入式系统内核则是整个嵌入式系统平台的核心部分。因此嵌入式操作系统与嵌入式硬件设备,特别是处理器及其外部设备是紧紧相关的。对不同的硬件平台上运行的嵌入式操作系统内核通常是不相关的,必须依据具体的硬件设备平台进行相应的配置和编译。由于Linux操作系统的内核源代码全部使用C语言编写,使得其具有良好的可移植性,只需要一些简单的修改就能移植到不同的处理器平台上。同时Linux是一款符合GNU标准的开源操作系统,用户可以免费下载和使用,并能够根据需要对其进行定制[4]。因此Linux操作系统成为了嵌入式系统开发首选的操作系统。Linux内核的源文件的文件数目多达上万个,共有十七个子目录,下面列举其中的主要文件目录:arch:与处理器体系结构相关的代码,对应于每个支持的体系结构,都有一个对应的子目录,如i386、arm等,相应的目录下有处理器相关的硬件汇编启动代码。driveres:存放设备驱动代码的目录,如block块设备驱动、char字符设备驱动、mtd存储类设备驱动等。fs:存放文件系统对应的代码,如cramfs、yaffs、jffs2等。include:包含编译内核所需的绝大部分头文件和配置信息。lib:于处理器体系结构无关的内核库代码,对应的与体系结构相关的内核库代码存放在arch/arm/lib下init:内核初始化代码,其中的main.c中的start_kernel函数式系统引导起来后运行的第一个函数,是内核开始工作的起点。ipc:提供进程间通信的相关代码。mm:存放与处理器体系结构无关的内存管理代码,对应的与处理器体系结构相关的内存管理代码放于arch/arm/mm下。kernel:内核管理的核心代码。net:存放网络相关的不封代码,其每个子目录都对应于网络的一个方面。scripts:存放脚本文件,如配置内核时用到的makemenuconfig命令等。Documentation:内核的相关文档,如版本说明,结构说明等Linux内核2.6版本对S3C2440处理器的支持十分完善,在S3C2440处理器上移植Linux只需要要较少的修改。本论文采用Linux~2.6.35内核进行移植,并且采用S3C2440的默认配置文件,步骤如下:下载linux-2.6.35.tar.gz到用户目录下并解压,执行#tarzxvflinux-2.6.35.tar.gz#cdlinux-2.6.35配置内核的编译环境以适应嵌入式硬件平台,执行#viMakefile修改ARCH=armCROSS_COMPILE=arm-linux-将S3C2440的默认配置文件拷贝到当前目录,并配置内核加载该配置文件,执行#cparch/arm/configs/s3c2440_defconfig./#makemenuconfig如图2.1所示图2.1内核配置选项选择LoadanAlternateConfigurationfile选项载入配置文件,如图2.2图2.2加载内核配置文件然后选择Bootoptions选项,配置内核的启动参数,如图2.3和图2.4图2.3设置启动参数选项图2.4配置内核的启动参数值完成后保存退出,执行#makezImage在arch/arm/boot下生成目标内核镜像文件zImage,然后通过USB下载线将内核烧进开发板,重新启动开发板后将能够看到内核的启动画面。2.3.3yaffs文件系统移植yaffs(YetAnotherFlashFileSystem)文件系统是针对于NANDFlash专门设计得出的嵌入式文件系统,目前共有yaffs和yaffs2两个不同的版本,它们的区别在于yaffs2能够支持容量更大的NANDFlash芯片。yaffs文件系统在某些方面类似于JFFS文件系统,但不同的是JFFS文件系统的设计目标是主要针对的是NORFlash的应用场合,但是NORFlash和NANDFlash在本质上有着很大的区别,即NANDFlash不支持内存的随机读取,所以尽管JFFS1文件系统也可以被应用到NANDFlash,但是由于其对内存的操作和启动方式方面针对于NORFlash的特性做了一些优化,所以对NANDFlash来说通常并不是好的方案,又因为本次设计涉及到Qt的动态连接库,因此本次设计采用带Qt库的yaffs文件系统[5]。将yaffs文件系统的源码拷贝至某一目录下,并进入该目录,执行#tarzxvfrootfs_qt210_QT4.7.0_20121210.tar.gz#mvrootfs_qt210_QT4.7.0_20121210rootfs安装制作工具busybox,拷贝busybox-1.13.3.tar.gz到当前目录,执行#tarzxvfbusybox-1.13.3.tar.gz#cdbusybox-1.13.3#viMakefile修改CROSS_COMPILE

?=arm-linux-ARCH?=arm3、编译busybox,执行#make

CONFIG_PREFIX=rootfs

install#cpbin/mkyaffs2image../拷贝/etc下相应文件到../rootfs/etc/制作yaffs镜像文件#cd../#./mkyaffs2imagerootfsrootfs.yaffs在当前目录下生成目标内核镜像文件rootfs.yaffs,然后通过USB下载线将文件烧进开发板,重新启动开发板后通过串口终端可以看到命令提示符,证明烧录成功,如下图所示。图2.3文件系统成功移植效果图2.4make工具简介大型工程中的源文件数量庞大,make工具提供了方便的管理和编译这些文件的方案,按其类型、功能和模块的不同分别放在若干个子目录中,在makefile定义通过定义出一系列的规则来进行指定,哪些文件是需要被先编译的,哪些文件是需要被后编译的,而哪些文件则是需要重新被编译,而那些文件则需要被忽略,而且能够进行某些更为复杂的操作[6]。makefile所实现的好处是能够实现自动化编译,一旦写好makefile文件,只需要执行make命令,整个的工程将能够实现自动编译,极大的提高了大型软件开发工程的效率。make命令是一个工具,是被用来解释makefile文件中所指定的命令并执行,一般来说,集成开发环境(IDE)都包含有这个命令,比如:Delphi中的make,VisualC++下的nmake,Linux上GNU工具下的make。由此可见,make工具成为了一种在工程管理方面的有效编译方法。make工具最为主要的功能就是通过解析makefile文件来描述各源程序之间的依赖关系并能够自动的维护和选择性编译。而makefile文件则需要按照某种特定语法规则进行编写,文件中必须要说明如何编译具有相关性的源文件并最终连接生成可执行文件,并要求定义各源文件间依赖的关系。makefile文件的基本规则如下:target...:mand目标文件:所有依赖文件执行指令...target也就是目标文件,可以是工程文件,也可以是可执行的单个文件。也可以是一个标签。prerequisites是要生成目标文件所需要的所有文件或是目标。而command也就是make需要执行的命令部分。这是一个简单的文件依赖关系,也就是说,target这一个或多个目标文件依赖于prerequisites列表中的所有文件,其生成的规则被定义在command中。也就是说只要prerequisites中有一个或以上的文件比目标文件的时间标签要新的话,command所定义的命令就会被执行(注:每个command必须要以Tab键开始,否者编译器将无法识别该command,能够大量的减少重复编译,提高了工程的管理和编译效率[7]。2.5本章小结本章主要论述了实现PC交叉开发和嵌入式底层平台的搭建工作,其中包括了宿主机GNU交叉编译链的安装、NFS文件共享和目的主机U-boot的编译移植、Linux内核的移植、yaffs文件系统的制作等,为嵌入式服务器的搭建建立起底层的平台支持,最后介绍了make工具的用法和makefile编写文档基本的语法规则,方便了大型工程的管理编译或有大量文件需要被编译的情况。

3下位机Zigbee配置3.1Zigbee简介ZigBee是一种低速率的适用于短距离传输的无线网络协议。ZigBee协议从下到上分为物理层、媒体访问控制层、传输层、网络层、应用层等[8]。其中物理层和媒体访问控制层均遵循IEEE802.15.4标准的规定。ZigBee网络的主要特点是功耗低、成本低、速率低、支持大量节点、支持多种网络拓扑结构、复杂度低、快速、安全、可靠。ZigBee网络设备可分为协调器、路由器、传感器节点等。Zigbee作为一种短距离无线通信技术,由于其网络可以便捷的为用户提供无线数据传输功能,因此在物联网领域具有非常强的可应用性。以美国TI公司CC2430芯片为代表的ZigbeeSOC解决方案在国内高校企业掀起了一股Zigbee技术应用的热潮。因为CC2430集成了51单片机核,用C51语言编写程序,所以相比于众多的Zigbee芯片,CC2430颇受青睐。开发套件包括由专业人士精心设计的Zigbee产品开发模板、完整的原理图、协议栈及例程源码。Zigbee的开发基于Z-Stack协议栈,开发软件使用IAREmbeddedWorkbench,成都无线龙公司的Zigbee开发套件可与IARforMCS-51集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发Zigbee终端最好最实用的开发工具。3.2Zigbee协议栈简介如图3.1所示,Zigbee的协议栈的各层与802.15.4MAC层是通过服务接入点实现通信的,服务接入点是某一个特定介质层所提供服务的与其上层的通信接口,Zigbee协议栈的部分层有两个接口分别是数据和管理实体接口。数据接口的目标是为其上层提供所需要的数据服务,管理实体接口的目标是向上层提供访问内部参、置信息和数据管理的服务。图3.1Zigbee堆栈结构3.3Zigbee协议的消息格式及帧格式Zigbee协议的消息格式组成及帧格式类型描述如下:1、消息格式Zigbee的消息是由127个字节组成的,它主要包括以下几个部分:MAC报头:该报头包含当前被传输消息的源物理地址及目的地址.若消息被路由转发,则该地址有可能不是实际地址,产生及使用该报头对于应用代码是不可见的。NWK报头:该报头中包含了消息的实际源地址及最终的目的地址,该报头的产生以及使用对应用代码来说是不可见的。APS报头:该报头中包含了当前的配置ID,簇ID以及当前消息的目的地址,同样的,报头的产生及使用过程是不可见的。有效载荷:该域中包含了需要被应用层处理的Zigbee协议帧。2、ZigBee协议帧格式Zigbee协议共定义了两种帧格式分别是KVP及MSG。KVP是ZigBee协议规范定义的特殊的数据传输机制,通过该规定来将数据传输格式和内容标准化,主要用于传输较简单的变量值格式。MSG是ZigBee协议规范中定义的特殊的数据传输机制,其在数据传输所采用的格式和内容上并不作任何的特殊规定,主要用于传输专用的例如数据流和文件数据等数据量相对较大的数据。KVP帧专用于相对较规范的信息传输格式,采用键值对的数据形式,按某种特殊规定的数据格式进行数据传输,通常用来传输一个或几个简单的属性变量值;MSG帧没有具体数据格式上的规定,通常用于复杂信息的传输。KVP、MSG是通讯中的常用的两种数据格式。如果将帧比作一封电子邮件,那么目的邮箱和源邮箱等信息都存于帧头、帧尾,里面的信息内容就是特定的数据格式KVP或MSG。根据具体的配置文件(Porfile),KVP一般用于简单属性数据,MSG用于较复杂的,数据量较大信息。3.4节点简介本次设计中所采用的Zigbee芯片是Chipcon

推出的CC2430,是世界首款完全符合2.4GHz的

IEEE制定的802.15.4标准的一款射频收发器。包括众多新功能,是一款完全适用于Zigbee芯片产品的RF器件。它基于是Chipcon的SmartRF

03技术,以0.18um

的CMOS工艺制成的仅仅需极少的外部器件,性能相对更为稳定且功耗更低。CC2430的可选择和敏感指数均超过了IEEE制定的802.15.4标准的要求,可以确保短距离通信过程的有效和可靠性。利用该芯片实现的通信设备能够支持的数据传输率高达250kbps可以实现快速组网技术。CC2430芯片内置了模数转换模块,这就极大地方便了实现温湿度、光强的模拟信号的采集与处理工作。对协议栈的main函数部分修改部分,实现对部分寄存器的读写操作即可实现外部信息的采集,然后调用发送和串口操作函数即可实现信息的传输[9]。1、温度传感器简介采用DS18B20芯片,DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,其具有独特的串行数据接口,只需要一条数据线线通信实现数据的传输,简化了分布式温度传感器的应用范围,无需外部其他元件,可以使用用数据总线供电,电压有效范围为3.0V至5.5V,测量温度范围为-55°C至+125℃。范围内精度能够达到±0.5°C描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。信息被发送到/从DS18B20通过一条数据线接口,所以中央微处理器与DS18B20只需有一条数据线连接。不需要外接电源,因为每一个DS18B20都包含一个独特的序号,多个DS18B20芯片可以同时存在于一条数据总线。这使得多个温度传感器能够放置在许多不同的地方。2、光敏传感器简介光敏传感器的工作原理主要是利用光敏元件将光信号转换为电信号,其最为0敏感的波长在可见光波长附近,还包括红外线和紫外线。光敏传感器不仅仅局限于对光的探测,还可以作为特定的探测元件组成其他特殊传感器,对许多非电量进行有效的检测,只要通过将这些非电量转换为光信号并采用光敏传感器监测的机制即可得到其数据。光敏传感器中最为简单常用的电子器件就是光敏电阻,它能感应出光线的明暗变化,输出微弱的电流,通过简单的电子线路放大的处理便能够得到光强信号值。3、红外线传感器简介一般的生命体会释放红外线,红外线传感器通过对周围红外线强度的探测,可以得到红外线强度值,通过数据管教上传数据值。4、可燃气体传感器可燃气体传感器是能够对单一或多种可燃气体浓度产生响应的探测器。可燃气体传感器包括催化型、红外光学型。催化型的可燃气体传感器是采用相对难熔对金属铂丝加热后其电阻的波动来测定可燃气体的浓度。当可燃气体进入该型探测器有效范围时时,铂丝的表面会产生氧化反应(无焰燃烧),其反应所产生的热量会使铂丝的表面温度变换,而铂丝的电阻率会随着温度产生变化,从而得到环境数据。红外光学型可燃气体传感器则是利用红外线传感器通过对红外线光源的吸收率来检测环境内的碳氢类可燃气体。效果如图3.2所示:图3.2节点效果图3.5本章小结本章主要介绍了基于Zigbee的下位机通过温度、光敏、红外、可燃气体等传感器数据采集模块,实现了对环境数据的基本采集、发送和接收功能,为上位机的数据处理模块提供底层支持。

4服务器的搭建4.1Boa服务器的移植4.1.1Boa服务器简介在Linux系统中最常用的支持http协议的服务程序有三个:Boa、httpd和Tttpd。其中httpd功能最弱,只能够支持静态页面,不支持认证,不支持cgi,Thttpd和Boa所提供的功能基本一样,都支持认证、cgi等。但是Thttpd在运行过程中所占用的资源要远远大于Boa服务器。可见Boa更适合作为嵌入式领域的web服务器。所以本次设计选择Boa服务器。Boa是1991年由PaulPhillips开发的一个运行于类unix计算机系统的高性能网络服务器。Boa的设计目标是速度和安全性,它的安全性体现于服务器不会被未通过认证的用户访问,并且能对信息进行加密处理。Boa服务器可以处理来自客户端浏览器的数据请求方式包括post方式和get方式,并且支持cgi后台服务程序[10]。Boa服务程序的执行流程如图4.1所示。图4.1Boa服务器流程图传统的web服务器会为每一次访问都单独创建一个进程,十分耗费系统资源。而Boa是一个单任务的http服务器。这也就是说,Boa既不为每一个连接单独创建新的进程,又不复制自身进程,只有在完成一个用户的请求之后才会响应另一个用户的请求,因此它无法并发响应多个连接请求,但是在资源相对紧张的嵌入式设备中,Boa服务器的这一特点却十分符合嵌入式对应用程序的要求。又Boa是通过建立http请求列表然后顺序的方式来处理多路http请求的,它只会为cgi程序创建出新的进程,这样就能够在最大程度上节约系统资源。除此之外,Boa服务器还能够自动的生成目录和自解压文件。Boa服务器在处理http请求过程中,具有较高的处理速度和效率。因此Boa服务器在嵌入式领域具有相当广泛的应用。4.1.2Boa的移植Boa服务器的移植工作,主要完成了对Boa程序的移植和Boa配置文件的修改。其具体移植步骤如下:1、下载Boa源码登录网站,下载源码文件名为boa-0.94.13-src.tar.gz的源码包。并将下载到的文件放入用户目录中并解压,然后执行如下命令:#tarzxvfboa-0.94.13-src.tar完成后,将会生成一个名为boa-0.94.13-src的文件目录。将该目录名修改为boa。#mvboa-0.94.13-srcboa2、修改Boa服务器的根目录Boa服务器程序可以对通过SERVER_ROOT的定义来制定Boa服务器的文件根目录。在本次设计当中,将boa/sre/defines.h文件中的“#defineSERVER_ROOT/ete/boa”语句,修改为“#defineSERVER_ROOT/usr/bin”。即把服务器的根目录修改为嵌入式平台的/usr/bin目录下。3、生成Makefile文件运行boa/src/configure,执行以下命令:#cdboa/src#./configure执行成功后即可生成Makefile文件4、修改生成Makefile文件由于本此设计使用的交叉编译工具为arm-linux-gcc,必须要对Makefile文件作如下修改:CC=arm-11nux-gccCPP=arm-11nux-g++-E5、编译进入boa/src目录执行以下命令:#make执行完成功后,将在boa/src目录下产生编译后的二进制可执行文件boa。去掉其调试信息:#arm-1inux-stripboa6、将编译好的boa文件放入yaffs根文件系统的/bin目录下#cpboa~/rootfs/bin/7、Boa服务器的配置以上几个步骤就可以完成Boa服务器程序的移植,为了保证服务器的正常运行还需要对Boa进行配置。配置主要就是修改boa目录下已有的一个示例配置文件boa.conf,可以在其基础上进行简单修改即可。主要内容如下:Port80 //设置Boa程序的监听端口为80User0 //设置运行Boa的用户名,0为所有用户都可以运行Group0 //设置运行Boa的用户所在的组,0为所有用户组ErrorLog/var/log/boa/error_log //错误日志DocumentRoot/var/log/boa/log //普通日志DocumentRoot/var/www //定义HTML文档的目录DirectoryIndexindex.html //站点的首页文件名KeepAliveMax1000 //设置最多响应1000个连接请求KeepAliveTimeout15 //设置15秒后未向服务器发送请求为超时CGIPath/bin:/usr/bin:/usr/local/bin //设置服务器的CGI程序存放目录ScriptAlias/cgi-bin//var/www/cgi-bin //相当于建立软连接8、建立相应的文件目录在嵌入式文件系统中创建相关的目录如下,日志文件所处的目录var/log/boa,HTML文档所处的位置/var/www,CGI脚本程序所在目录/var/www/cgi-bin,目录全部设置完毕后,将静态页面文件主页index.html拷贝放到/var/www目录下。9、修改文件系统为了让系统启动时能够自动启动嵌入式Boa服务器,需要通过修改系统的启动脚本rootfs/etc/init.d/rcS实现,在该文件末尾中加入一行内容如下:/usr/bin/boa&完成后,重新烧录文件系统,重启开发板,即完成Boa程序的移植。4.2HTML网页制作4.2.1HTML简述超级文本标记语言(英文缩写:HTML)是标准通用标记语言下的应用、规范、标准,它通过某些特定的标记符来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,可以通过在该文本文件中添加某些特定的标记符,控制浏览器显示的内容(例如:文字效果,画面布局,图片样式等)。浏览器净按顺序读取和分析网页文件,然后根据对标记符的解释,显示其标记对应的内容,但对出错的标记符并不会做出错处理,且不停止其解释执行过程,编制者只能通过显示效果来分析出错原因和出错位置。但需要注意的是,对于不同的浏览器,由于其对同一标记符可能会存在不完全相同的解释方式,因而会有不同的显示效果。一个网页对应一个HTML文件,超文本标记语言文件以.htm(磁盘操作系统DOS限制的英语缩写为扩展名)或.html(英语缩写为扩展名)。能够使用任何可以生成TXT类型源文件的文本编辑器来设计超文本标记语言文件,只需修改文件后缀即可。标准的超文本标记语言文件都会具有一个基本的结构,大部分标记一般都是成对出现(部分特殊标记除外例如:<br/>),包括超文本标记语言文件的开头标志与结尾标志和超文本标记语言的头部与实体两大部分。用三个双标记符来确认页面的整体结构。标记符<HTML>;说明该文件是采用用超文本标记语言(本标签的中文全称)来编写的。它是文件的开头部分,而</HTML>;则是该文件的结尾,它们分别是超文本标记语言文件的开始标记符和结尾标记符。标记符<head></head>,这两个标记符分别标示了超文本标记语言头部信息的开始和结束。头部中所包含的标记分别有页面的标题、文字编码和文件格式等内容,它本身并不作为显示的内容,但会影响网页显示的效果。头部中最常用的标记符是title标记符和meta标记符,其中的title标记符用于定义该网页的标题,它的内容显示在浏览器网页窗口的标题栏中,网页标题可被浏览器用作书签或收藏清单。设置文档标题和其它在网页中不显示的信息,比如direction方向、语言编码格式LanguageCode等。标记符<body></body>,网页中显示的实际内容全部包含在这两个正文标记符间,正文标记符又被称之为实体标记符。HTML网页文档的标准格式一般如下:<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/><title>标题</title></head><body><p><h1>正文</h1></p></body></html>其中<html></html>之间为网页的全部内容,<head></head>之间为网页的头信息,指定了网页的格式,文本编码格式等,<body></body>间为网页的可显示部分。4.2.2HTML效果本次设计的简单网页效果图如下:图4.2html登陆页图4.3html选项页图4.4htmlLED控制页4.3CGI交互程序的编写4.3.1CGI简介CGI的全称是公共网关接口,是HTTP服务器与发送请求机器上的程序进行信息交互的工具,其程序是运行与服务器上的。在物理上,CGI是一段可执行的二进制程序,它运行于服务器之上,是服务器提供给客户端浏览器交互的接口。CGI程序用来解释处理来自用户表单的输入信息,并同时在服务器产生响应,将所请求信息的反馈结果发送给客户端浏览器[11]。CGI程序是得服务器的网页具有较强的交互功能。CGI程序的处理过程如下:用户通过Internet把请求信息送至服务器。

2、服务器接收用户的请求并交给相应的CGI程序处理。应用程序执行所需要的操作,通常是基于浏览者输人的内容。CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。

5、CGI程序把处理结果传送给服务器。

6、服务器把结果回返给用户。CGI可以用任何一种语言编写,只要这种语言具有标准的输入、输出和环境变量。对于初学者来说,最好选用易于归档和能有效表示大量数据结构的语言,例如UNIX环境中Perl(PracticalExtractionandReportLanguage)、BourneShel、Tcl(ToolCommandLanguage),由于C语言有较强的平台无关性,所以也是编写CGI程序的首选。Windows环境中C和C++。由于Internet上绝大部分服务器使用的是类UNIX操作系统,且几乎所有的类UNIX操作系统都支持ANSIC标准,因而实际应用中大部分是用C编写的。

C由于其良好的跨平台、易于修改、效率高等特性被选为本次设计的CGI编写语言。4.3.2CGI程序的接口规范CGI接口协议规范包括标准输入(STDIN)、环境变量和标准输出(STDOUT)。(1)标准输入当用户才用POST的方式提交数据是,CGI程序将能够通过标准输入从Web服务器中获取用户的输入信息。CGI程序可以通过如下的两种方式获取到用户的输入信息:URL的直接传递②表单中的数据传递(2)环境变量在客户端浏览器和Web服务器之间的数据交互过程中,CGI程序将能够通过对环境变量的解析来获取Web服务器所传递过来的用户数据。环境变量是服务器和CGI程序间的一种数据传递的途径,CGI程序中主要的涉及到的环境变量如下:REQUEST-METHOD:数据发送方式SERVER-NAME:运行CGI程序的主机名。SERVER-INTERFACE:Web服务器的类型。SERVER-PROTOCOL:通信采用的协议,应为HTTP/1.0。SERVER-PORT:绑定的TCP协议端口,一般说来Web端口均为80。HTTP-ACCEPT:HTTP定义的浏览器所能够识别的数据格式。HTTP-REFERER:发送表单的文件的URL。HTTP-USER-AGENT:发送表单数据的浏览器相关信息。GETWAY-INTERFACE:CGI程序所采用的版本,在UNIX系统下为CGI/1.1。PATH-TRANSLATED:PATH-INFO参数中所包含的路径名。PATH-INFO:浏览器采用GET方式发送数据过程的附加路径。SCRIPT-NAME:实际CGI程序的绝对路径名。QUERY-STRING:表单中用户输入的数据,即URL中间号后分割的内容。REMOTE-HOST:发送执行程序的主机名。REMOTE-ADDR:执行程序机器的IP地址。REMOTE-USER:发送程序的用户名。CONTENT-TYPE:采用的数据类型。CONTENT-LENGTH:POST方式用户输入数据的字节数。下面详细介绍一下编写CGI程序时,经常用的四个变量。1、REQUEST-METHOD该变量定义了CGI程序接收Web服务器数据的方式,分为GET方式和POST方式两种。GET方式是把数据插入URL中发送的。而POST方式则是直接从服务器标准输入中读取并发送数据,POST方式比GET方式能够更加安全的传输数据到服务器的CGI程序。QUERY-STRING当客户端浏览器采用的是GET方式发送数据时,环境变量QUERY-STRING值表示的是CGI程序中URL的“?”所对应的的后边的参数,如?vl=al&v2=a2。如果使用POST方式,该值将为空。3、CONTENT-TYPE表示的用户给服务器传递的消息的数据类型。当客户端浏览器采用的是POST的方式递交表单内容时,这个值将是服务器调用CGI程序过程所传送MIME类型的数据。当客户端浏览器采用的是GET方式时,该变量的将值为空。4、CONTENT-LENGTH当客户端浏览器采用的是POST方式时,变量值表示的是传递给标准输入的数据长度。当客户端浏览器采用的是GET方式,其值将为空。(3)标准输出CGI程序通过标准输出给Web服务器传输某些数据信息。CGI的标准输入也就是服务器的标准输出,而相对应的CGI的标准输出就是服务器程序的标准输入。CGI传递给Web服务器的数据格式包含有多个头部信息和一个数据信息,两者之间必须用空行相隔。CGI的标准输出中必须要带有至少一个头部信息,而数据体则无要求。如果带有数据体,那么就必须要设置环境变量中的CONTENT-TYPE,即MIME类型。MIME类型信息通过标准输入输出传递给Web服务器后,Web服务器再把该数据全部返回给客户端浏览器,客户端浏览器就会通过解析从服务器接受到的文本信息做出相应的显示。在HTML的源码中能够使用任何的HTML标记符,如超链接、图像、表单以及调用其他CGI程序等。4.3.3CGI程序设计通过CGI程序实现服务器与客户端浏览器之间的动态数据交互,其执行过程主要步骤详解:(l)获取用户通过浏览器的提交数据如果客户端采用数据传递方式的是GET方式,数据将被保存在系统环境变量的QUERY_STRING中,CGI程序中就可以通过调用函数getevn(“QUERY_STRING”)来或得到相应的数据。如果客户端浏览器的数据提交的方式采用的是POST方式,那么发送的数据就没有结束标识,因此CGI程序就必须先要从系统对应的环境变量CONTENT_LENGTH中获取数据的长度,然后再从系统的标准输入中读取对应该长度的字符串,即可获取到用户所提交的数据信息。为了避免隐系统环境变量中CONTENT_LENGTH异常而引起CGI程序出现错误,解决方法就是通过在CGI编程中采用判断getevn函数返回值的办法检测信息是否具有合法性,函数的一般调用格式如下:if(getevn(CONTENT_LENGTH)!=NULL)length=atoi(getenv(CONTENT_LENGTH))第一次调用getevn()函数通过其返回值了判断环境变量CONTENT_LENGTH是否存在,第二次的函数调用才是真正读取该环境变量值。如果函数返回值为NULL说明该环境变量不存在,CGI程序将不会读取该环境变量值,避免了因调用出错而引发的程序段错误。(2)提取并解析用户数据如果客户端浏览器是通过POST方式向服务器提交用户表单数据的,那么表单数据一定是采用特定编码格式进行编码的,这种编码格式称为URL编码。其编码格式的主要是对表单域的名字和其对应值进行转义。即表单信息将按照在用户表单中出现的先后顺序,其中的空格将被替换为加号;除字母或者数字的其他字符以十六进制的ASCII码形式表示,格式为%HH;换行符<br>标签被替换为%0D%0A;数据域中的变量名和其对应值使用等号(=)符相对应。变量名及其值是通过字符&分割的。当用户填写完表单,并点击“提交”按钮后,将向服务器提交HTTP请求,Content字段中所包含的信息就成为经过URL编码的编码信息,其格式如下:namel=valuel&name2=value2&name3=value3&name4=value4&…name是表单中定义的INPUT、SELECT或TEXTAREA等HTML表单域对应的变量名,value则是对应表单域的用户输入或选择值。因为其为编码数据所以CGI程序在使用这些数据前,首先要对其进行解码操作。即把这些数据流分解为一组组的变量名和其对应的值,并还原为用户在浏览器网页上的输入形式[12],其流程如图4.5所示。图4.5URL解码流程图(3)向用户返回结果CGI程序处理后的结果数据,通过标准输出传给Web服务器。Web服务器根据头信息的内容,对CGI程序传送过来的结果数据可用printf()、puts等标准I/O函数来产生HTML源码,再通过HTTP封装把执行的结果返回给客户端。4.4嵌入式SQLite数据库4.4.1SQLite数据库简介SQLite数据库跟一般的关系数据库具有很大的不同之处,它具有以下几个特点:(1)可以嵌入到应用程序当中,不需要配置可以直接使用;(2)不需要独立的数据引擎,对数据库的存取操作由应用程序可以直接采用调用相应的API实现;(3)使用及其精简的代码编写而成,只需要很少的内存空间即可运行。SQLite数据库所具有的这些特点,让其较为适合在资源有限的嵌入式设备中运行,其运行速度更快,效果较为理想。SQLite是由D.RichardHip全部采用C语言开发出的一个完全开源的嵌入式数据库系统。SQLite数据库只与文件系统有关,因此它对操作系统内核上并无太大的限制,并且支持目前常用的计算机编程语言。SQLite数据库实现了SQL92的标准,其中共包括表、索引、事务、视图、触发器和一系列用户接口API等[13]。SQLite的主要特征如下:1、灵活性SQLite数据库在使用前不需要任何的配置,程序编译完成后就可以直接运行。SQLite数据库程序的打开和关闭不需要创建新的单独的进程来运行,涉及的用户权限不需要由管理员记性专门的创建分配,在系统崩溃或掉电重启后能够自行恢复。2、精简性SQLite数据库的规模非常小。而且由于其在磁盘上移动的信息量很少,也大大的加快了数据访问速度。SQLite数据库经过精简编译之后,在不减少其基本功能的前提下,整个运行的静态库文件大小将小于225KB。如果在编译时去掉不需要的功能函数,则可以被缩减到17OKB以内。3、无服务器目前其他的非嵌入式系统上的数据库软件都需要预先安装一个数据库引擎,并作为一个单独的服务器进程执行。应用程序要通过发送请求到该服务器的方式进行数据库查询和其他操作,这需要通过采用进程间通信的机制(如命名管道、共享内存、信息链表等)的方式来实现,这就额外的增加了系统开销。而对SQLite数据库来说,其应用程序如果要访问某些数据,可以直接通过对磁盘上的数据库文件进行读写操作来实现。4.4.2SQLite数据库的接口(API)函数SQLite数据库共定义了83个API接口函数和一些数据结构的预定义。在对SQLite服务器的应用中,最为简单的数据库存取操作只需要通过四个函数就能够实现,它们分别是:打开数据库函数sqlite3_open()、关闭数据库函数sqlite3_close()和SQL语句执行函数sqlite3_exec()以及查询操作函数sqlite3_gettable()。(1)打开数据库intsqlite3_open(constchar*filename,intmode,sqlite3**p_sqlite)应用程序统调用该函数可以实现打开一个数据库操作,如果该数据库文件不存在将会以该文

温馨提示

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

评论

0/150

提交评论