手机端
or

欢迎您加入我爱方案网QQ群

1.智能产品外包服务群(311606115)
2.嵌入式项目开发群(491609563)

嵌入式数据库的智能家居网关设计

陈一明| MySQLite,CGI,家庭网关| 2010-11-29
1277 收藏
分享到: 
每日精选
热门推荐

【中心议题】

  • 以嵌入式数据库MySQLite为中心构造一个以S3c44BoX+uLinux+Boa+MysQLite的家庭网关
  • 重点介绍了信息家电在MysQLite中数据表的生成及分类

【解决方案】

  • 以嵌入式微处理器s3c44BOX为中心进行硬件设计
  • 嵌入式操作系统uCLinux和嵌入式数据库MySQLite的移植

引言

智能家居是通过综合采用先进的计算机、通信和控制技术(3C),建立一个由家庭安全防护系统、网络服务系统和家庭自动化系统组成的家庭综合服务与管理集成系统,从而实现全面的安全防护、便利的通讯网络以及舒适的居住环境的家庭住宅。

从上世纪80年代开始,西方发达国家率先掀起了智能家居技术研究的热潮。随着研究的飞速进展,人们对智能家居概念的理解逐步深入,越来越多的新思想、新技术应用到这个领域,从而有力地推动了现代智能家居的蓬勃发展。

1总体设计

本文构造了一个基于S3C44BOX+uCLinux+MysQLite+Boa的嵌入式家庭网关。如图1所示。以嵌入式微处理器S3C44BOX为中心设计其他功能模块作为家庭网关硬件平台,裁减并移植嵌入式操作系统uCLinux为家庭网关提供底层软件支撑。信息家电通过IAIDL(信息家电接口定义语言)向家庭网关注册,MySQLite存放每个家电的注册信息、参数值以及状态信息等,在需要的时候通过对嵌入式数据库的访问实现对信息家电的信息检索和远程监控。它同时保存用户信息表,赋予不同的用户检索、修改家电信息的相应权限。远程监控端浏览器通过访问家庭网关嵌入式WEB服务器Boa,调用相应的CGI应用程序来执行目标操作。

 

2家庭网关硬件的设计

32ARM嵌入式微处理器具有高性能、低功耗的特性,已被广泛应用于消费电子产品、无线通信和网络通信等领域,极其适合于对成本和功耗要求较苛刻的应用场合。因此,本文选取了一款三星公司生产的基于ARM7TDMI核的16/32RISC嵌入式微处理器s3c44BOX。并以此为中心,设计了其它功能模块FLASH接口模块、SDRAM接口模块、网络接口模块以及其它外围辅助电路模块诸如时钟电路、复位电路等,如图2所示。

3软件平台的构建

3.1嵌入式操作系统uCLinux的移植

uCLinuxMicroControlLinux,即“针对微控制领域而设计的Linux系统”。它它可以说是最早的嵌入式Linux发行版本,是专为没有MMU(内存管理单元)的处理器而设计的,将根据需要进行裁减后移植作为软件的平台。

3.2嵌入式数据库MySQLite的移植

MySQLite是基于Linux开发的,因此在ARMuCLinux上的移植相对简单,主要实现步骤如下:

(l)添加MySQLite作为uCLinux的一个用户应用程序;

(2)针对具体的ARMuCLinux修改MysQLite

(3)编译生成包含有mysqliteromfs文件系统;

(4)下载romfsuCLinux的可读写目录,运行mysqlite即可。

 

3.3嵌入式WEB服务器Boa的实现

Boa是一个单任务的http服务器,源代码开放、性能高,支持认证,支持CGI。目前,uCLinux中己包含了boa的源代码,通过在boa.confmime.types文件中修改网页存放的路径以及CGI程序存放的目录,并且修改aut_check_userpass()函数完成多用户合法性验证,从而在uCLinux中实现BoaWEB服务。

3.4 MySQLite中数据表的生成和分类

家庭网关数据库MySQLite中包含有两种类型的数据表:用户信息表和家电信息表。用户信息表用于存储用户名称和密码,可与用户登录程序login、用户注册程序registration进行交互。家电信息表主要存储家电的运行状态数据,主要与家电控制程序controller、查询程序query进行交互。

家电通过接口定义语言向家庭网关注册,家庭网关编译器对信息家电接口定义语言(IAIDL)进行扫描与分析,并将其解释成一种中间信息,再将这些信息存储在MysQLite的相关数据表中。

IAIDL能够较完备地描述信息家电的属性和功能,并在一定程度上定义了家庭网络中设备之间的互操作。但是IAIDL不是编程语言,只是说明性语言,因此它不可能被编译或解释成一个可执行的程序。这就需要有一种机制能提取信息家电向家庭网关注册时所发送的IAIDL中所描述的内容,并解释成一种中间信息,通过调用MysQLite提供的API函数,把这些信息存储在MysQLite的相关数据表中,家庭网关编译器就扮演了这样一个转换的角色。在MySQLite,表的逻辑功能图如图3所示。

4基于MySQLite的家庭网关程序设计

家庭网关嵌入式WEB服务器端的应用程序是建立在CGI基础之上的。因此,基于MySQLite的应用开发就是如何应用CGI程序建立、访问、更新MySQLite数据库的过程。大致可以分为三步来完成:首先建立一个家庭网关数据库,然后通过HTML文档制作一个WEB页面及内建表单,最后编写一个由解码部分、功能部分、输出部分三部分组成的CGI程序。

CGI程序的功能部分中利用MySQLite提供的C语言API函数完成与数据库的交互。首先提供文件名和访问模式来调用mysqlite_open()连接数据库,然后调用mysqlite_exec()函数执行SQL语句,最后执行mysqlite_close()关闭数据库。

 

在家庭网关应用程序中是如何将客户的注册信息,通过CGI程序写入数据库文件IAdatabase中表users中的,其代码如下:

#include<stdio.h>

#include<string.h>

#indude<mysqlite.h>

#define MAXQRY 300

Voidmain()

{char*errrQsg;

Int ret;

Char qry[MAXQRY];

/*以可读写方式打开数据库文件IA_database*/

mysqlite*db=mysqlit_open(IA_database”,0777&errmsg);

if(db==0)

{fPrintf(stderr“,CoundnotoPendatabase:%s\n”,errmsg);

Mysqlit_freemem(errmsg);

exit(1);}

sPrintf(qry,“INSERTINTOUSERS(namePassword)\n

VALUES(%s’,‘%s),namePassword);

/*执行SQL语句,向数据库表USERS中插入记录*/

ret=mysqlite_exec(dbqry,null,null,&errmsg);

 

if(ret!=MYSQLITE_OK)

{fprintf(stderr,"SQL error:%s\n%s\n",emnsg,qry);}

else{printf("%s%s was inserted fin",name,password);}

/*关闭数据库*/

mysqlite close(db);}

CGI应用程序将标准输出(stdout)作为向WEB服务器传递数据的一种重要途径。通常,CGI应用程序将执行结果输出到标准输出,WEB服务器从中读取信息,并将这些信息返回给客户端。因此,如果要将SQL查询结果输出给远程用户,CGI应用程序可以使用prinitf()函数将查询结果以HTML的形式输出到标准输出,进而家庭网关服务器向客户端返回动态页面,实现用户、WEB服务器与数据库MysQLite的交互。其网关服务流程图如图4所示。

 

整个家庭网关程序设计都以嵌入式数据库MysQLite为核心,它是网关能否实现信息家电监控功能的关键,也是实现信息家电之间协作的重要存储库。实现远程监控端用户通过浏览器对嵌入式数据库的访问至关重要。

5结论

本文的创新点:在综合分析当前嵌入式数据库系统的主要功能和发展现状的基础上,针对嵌入式设备的具体特点,结合在家庭网关中的实际应用需求,在Linux下用C语言设计了一款能有效存储、操作和管理信息家电数据的嵌入式数据库系统MySQLite,并基于此数据库构造了一个S3C44BOX+uCLinux+MySQLite+Boa的嵌入式家庭网关。

深圳市中电网络技术有限公司 Copyright© www.52solution.com 粤ICP备10202284号