3.1 CGI对嵌入式Boa服务器的访问
CGI(Common Gateway Interface)是一个web服务器与外部应用程序交互的标准接口,它允许将其输出结果经web服务器传送给web浏览器。web服务器将web浏览器发来的消息,传递给CGI程序,由CGI程序进行处理,处理完成后把响应的结果再回送给web服务器,web服务器再把消息发送给web浏览器。CGI程序可以用多种语言来实现,如Perl、C、Unix shell等,由于C语言有较强的平台无关性,占用的资源少,效率高,本系统选取C语言来编写CGI程序。
CGI程序有GET和POST两种提交数据的方法。其中,GET方式提交数据,是将数据保存在QUERY_STRING环境变量中,通过调用函数getenv(“QUERY_STRING”)来读取数据;POST方式提交数据,则程序先从CONTENT-LENGTH环境变量中得到数据的字长,然后从标准输入中读取相应长度的字符串。一般,如果只是为取得和显示数据多采用GET方式提交数据,一旦涉及数据的保存和更新,多采用POST的方式提交数据,本系统采用的是GET方式来提交数据。
CGI是建立在Boa服务器的基础上的,关于Boa服务器的移植在此不再赘述。
3.2 嵌入式SQLITE数据库的实现
3.2.1 嵌入式SQLITE数据库简介
SQLITE是D.Richard Hipp开发的开源性嵌入式数据库引擎,全部源代码大约3万行左右,编译后的程序大小250 kB,甚至可以缩小至150 kB左右。它具有体积小、数据容量大、处理速度快、占用内存少的特点。并且它用一个小型的C库来实现嵌入式关系数据库管理体制,提供了对SQL92的大多数支持,包括:多表和索引、事务、视图、触发和一系列的用户驱动及其接口。
3.2.2 SQLITE常用的API函数
1)打开数据库:int sqlite3_open(const char*filename,SOLITE3**db);//*filename是数据库的文件名,**db是数据库句柄。
2)运行函数:int sqlite3_exec (sqlite3*,const char**sql,sqlite3_callback,void*,char**errmsg);callback是回调函数,用户可以根据需要自己编写callback函数获得操作数据库的结果。
3)查询数据:int sqlite3_get_table(sqlite3*,const char*sql,char***result,int *nrow,int *ncolumn,char **errmsg);//参数result以数组的形式存放查询的数据,参数nrow和ncolumn分别为查询语句返回的结果集的行数和列数。
4)关闭数据库:int sqlite3_close(sqlite3*)。
3.2.3 嵌入式SQLITE数据库在ARM—LINUX上的移植
本系统是将嵌入式SQLITE数据库应用到S3C2440+
Linux环境中,首先需要在宿主机的交叉编译环境下,编译生成SQLITE的可执行文件,然后将其下载到ARM板的相关目录下。移植SQLITE的主要步骤如下:
1)解压sqlite-3.5.6.tar.gz工具包,命令为tar-zxvf sqlite-3.5.6.tar.gz;
2)解压完成之后进入sqlite-3.5.6目录下新建一个文件夹build。
3)进入build文件夹,执行./configure--host=arm-linux-prefiX=/opt/sqlite-3.5.6/build,其中host是指定进行编译的交叉编译器.prefix是编译后目标存放的路径。
4)执行make和make install命令,在新建的build目录下生成bin、lib、include、share 4个文件夹。
5)将build/bin目录下的文件拷贝到ARM板的/usr/bin中,将build/lib目录下的文件拷贝到ARM板的lib文件夹下。
6)修改ARM板/usr/bin/sqlite3的权限,命令为chmod 755sqlite3。
完成上述6步后,可以在ARM板的终端输入:sqlite3test.db来验证SQLITE数据库是否移植成功。
3.3 嵌入式Web服务器对SQLITE数据库的远程查询
要实现嵌入式Web服务器对SQLITE数据库的远程数据查询,需要实现数据的查询和网页显示。针对生产车间温湿度数据的当前值、最大值和最小值,本系统设计了对最近五次的温湿度和所有温湿度的最大值、最小值进行查询的CGI程序。在CGI程序中,利用sqlite3_get_table(db,“selectmax(temperature)from dhtll;”,&result,&nrow,&neolumn,&errmsg)来实现对温度数据最大值的查询,其它数据的查询类似。要实现温湿度的网页显示需要在CGI程序中指定输出一个文本的html网页,通过printf(“Content-type:text/html\n\n”)程序语句即可实现。
编写好的CGI程序需要在特定的交叉编译环境下才能编译成功。这里使用arm-linux-gCC-I/opt/build/include-L/opt/build/lib-o main.cgi main.c-lsqlite3编译生成main.cgi(其中-I和-L后面指定的是头文件和链接文件),然后将其下载到ARM板的www目录下,并将该文件设置为可执行文件权限。最后在客户端的IE浏览器上输入http://192.168.58.230/main.html即可进入温湿度实时查询界面,其中下图5显示的是温湿度的历史数据页面。
该运行结果说明Boa服务器和SQLITE数据库已成功移植到了设计的ARM电路板上,并且编写的CGI程序完成了对SQLITE数据库的远程访问功能。经多次实验运行,本系统的嵌入式web服务器工作稳定,执行速度快并且安全、可靠。
4 结束语
文中设计了基于SQLITE数据库的嵌入式Web服务器,引入QT技术来设计温湿度实时显示界面,利用SQLITE数据库和Boa服务器实现温湿度的远程管理。本系统是嵌入式技验测试稳定可靠,可应用到其他相关领域,为实现现场数据的集中实时显示和远程数据访问提供了一种切实可行的方案。
本文关键字:远程监控 传感-检测-采集技术,电子知识资料 - 传感-检测-采集技术