《嵌入式系统》课程设计报告
设计课题:基于web的嵌入式智能家
居控制系统
专业班级:09电气(1)班
学生姓名: 黄礼智
指导教师:雷必成
设计时间:20##学年第一学期
物理与电子工程学院
摘 要
基于web的嵌入式智能家居控制系统采用了三星公司生产的S5PV210AH_A01141芯片,是一款ARM11芯片。将嵌入式WEB远程控制系统应用在智能家居方面是未来发展的必然趋势。智能家居、嵌入式系统和WEB服务器三者结合, 通过构建嵌入式WEB服务器, 研究设计通过WEB控制家电设备, 以及在linux系统下搭建WEB服务器,使得用户可以随时随地地通过浏览器实现对家电设备的控制。本文介绍了在ARM嵌入式系统上搭建boa服务器的方法,分析了各种控制方法,得出了实现基于web的嵌入式智能家居控制系统的最直接可行的方案。最后利用C语言编译出了CGI程序和服务程序。
关键词
WEB ; linux嵌入式; boa服务器; CGI
目 录
1.智能家居控制系统总体方案设计.......................................................................... 1
1.1 系统总体架构设计........................................................................................ 1
2. 嵌入式WEB服务器BOA的建立................................................................ 1
3.界面设计、CGI程序和驱动程序编写................................................................... 3
3.2 CGI简介....................................................................................................... 4
3.3 网页提交数据的两种方式:GET/POST..................................................... 5
3.4 CGI程序的编写........................................................................................... 6
3.5 驱动程序的编写............................................................................................ 8
3.5.1 传感器信息采集驱动.......................................................................... 8
3.5.2 模拟开关控制驱动............................................................................ 10
4.WEB嵌入式只能家居控制系统测试和应用......................................................... 12
4.1 软件系统测试.............................................................................................. 12
5.总结与展望............................................................................................................ 15
参考文献...................................................................................................................... 16
附 件.......................................................................................................................... 17
1.智能家居控制系统总体方案设计
1.1 系统总体架构设计
本文中整个控制系统那个分为3个模块:中央处理器(ARM11),室内信号监测模块,控制执行模块。
中央处理器所在的模块由于涉及到高频信号,普通制板均达不到要求,因此直接采用ARM核心板,设计相应的控制板,两者结合使用。
从系统稳定性和搭建服务器难度上考虑,linux系统成为不二的选择。Linux系统平台下容易搭建服务器,linux系统也不断在被优化,它的稳定性更是经受住了时间检验。linux设备驱动都是用C语言编写的,对于学过C语言的我们更有利于深入。
下面是系统的整体结构图:
图2-1 系统结构图
2. 嵌入式WEB服务器BOA的建立
搭建BOA的主要步骤如下[2]:
(1)下载BOA服务器源码,我们可以从网上下到boa-0.94.13.tar.gz 。将压缩包解压到linux系统任意目录下。
(2)打开BOA位于内核源码中Boa/src/define.h,查看其DocumentRoot 后面的目录,默认为ect/boa。此目录为Boa服务器的根目录,当boa服务器运行后,会从该目录读取配置文件,配置文件中保存着服务器配置信息。用户可根据需要对define.h中的根目录进行修改,一般情况下木有修改必要,本次设计也没有对该项进行修改。
(3)生成makefile文件:在boa/src/目录下执行./configure命令。
(4)修改该makefile文件:因为要在arm环境下建立BOA服务器,所以要将makefile中的编译器gcc改成arm-linux-gcc,在PC机上建立则无需修改。具体修改如下:找到CC=gcc 改为CC=arm-linux-gcc;找到CPP=gcc -E改为CPP=arm-linux-gcc -E。
(5)执行#make命令。make编译时用2.95.3以上的版本会出错:util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1。解决方法:修改compat.h中的#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff 。
(6)去除调试编译信息:#/boa程序所在目录/arm-linux-strip boa
(7)配置BOA配置文件,配置文件中指定了网页和cgi程序所在目录等信息,具体如下[3]:
l Port 80 //侦听端口
l User root //用户名
l Group root //用户组
l ErrorLog /dev/console //错误日志
l AccessLog /dev/null //访问日志
l ServerName friendly-arm //服务器名称
l DocumentRoot /home/plg //指定文件根目录
l DirectoryIndex index.html //指定默认首页名称
l KeepAliveMax 1000 //最大连接数
l KeepAliveTimeout 10 //设置连接超时时间 单位:S
l MimeTypes /etc/mime.types //设置媒体类型路径
l DefaultType text/plain
l CGIPath /bin //cgi 程序所在位置
l AddType application/x-httpd-cgi cgi
以上是本次毕业设计的配置,一般需要更改的地方有:User 和 Group 通常设为0 ;DocumentRoot 项,根据实际情况设置网页等文件所在的路径,默认在/www目录下,考虑到ftp传输,故将其设置在了ftp传输的根目录下面/home/plg。CGIPath项设置cgi程序所在位置,若根目录下没有bin 这个目录,自动会在根目录下寻找cgi文件,也可以不修改,如果不修改,则需要将cgi程序同index.html一起放在根目录下。其余采用默认,但需要注意的是,/etc/目录下必须有mime.types文件,若没有,只需要去linux PC系统里复制即可。
接下来运行BOA服务器,在PC端输入开发板设置的静态IP地址(这里默认是:192.168.1.230)。就可以看到index.html页面了!至此BOA服务器搭建完成。
3.界面设计、CGI程序和驱动程序编写
3.1 界面设计
网页页面主要有各种表格和图片组成,用frontpage软件足够实现。页面的内容可以根据实际需要进行添加或删减。对于我们电气工程专业的学生来讲,有两个关键问题需要解决:
1、网页用什么样的格式向服务器提交数据。
2、服务器反馈回来的信息如何在网页上表现出来。
1) 网页提交数据表格类型选取:在参考类似设计的时候,看到友善之臂的tiny210用户手册中的网页管道控制LED例子[1],其网页控制输入表格是用radio的:input type="radio" value="ping" name="type",这种一组可以包含多个不同值的输入方式对设计是很有利的,因此,直接选用radio作为网页提交数据的表格类型。
2) 服务器反馈信息显示:一般情况下,网页数据更新需要用到其它语言编写网页脚本,现有的知识水平无法直接解决这个问题。退而求其次,决定使用C语言文件操作函数来对网页源码进行修改。为了方便实现这个操作,在网页设计时,做了如下约定:
① 网页需要更新显示的内容用图片显示;
② 网页所调用的图片采用统一命名,同一类图片文件名仅相差一个字符;
③ 网页要具备自动刷新功能;
这样做的好处是,用C语言文件操作函数修改一个字符,就能更改整个状态显示。
3.2 CGI简介
1. 定义[4]:
CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
2. 功能:
绝大多数的CGI程序被用来解释处理杰自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。
3. 运行环境:
CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。在其它操作系统(如:windows NT及windows95等)的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。
4. CGI处理步骤:
⑴通过Internet把用户请求送到服务器。
⑵服务器接收用户请求并交给CGI程序处理。
⑶CGI程序把处理结果传送给服务器。
⑷服务器把结果送回到用户。
总结下,cgi程序就是网页和PC机交谈的工具,它没有特定的语言规范,只是一种中间程序,我们可以用shell语言编写,也可以用C语言编写编程生成cgi文件。网页在执行ACTION=**.cgi的时候会调用**.cgi程序。本文设计最初参考网页控制led例程,故仍然采取命名leds.cgi,以表对原作的感谢。一下是网页部分源码[1]: