基于Linux的智能家居网关管理软件设计与实现*

2010-04-26 05:07陈俊杰
舰船电子工程 2010年6期
关键词:图形用户界面网关进程

冯 冬 陈俊杰

(东南大学仪器科学与工程学院 南京 210096)

1 引言

智能家居是一种基于家庭设备的自动化与通信完成对环境监测和设备自动控制的一项技术[1]。它正给人们的生活带来前所未有的舒适与便利。在不久的将来,智能家居将进入每个家庭,成为人们生活必不可少的一部分。

无线传感器网络极大地拓展了人们的感知范围,通过将由家庭设备组成的无线传感器网络与GPRS结合,可以让人们随时随地监测和控制家庭设备的工作。基于上述技术的智能家居系统具有对家庭设备远程控制、监测、集中管理的功能。家庭中包括4表、安防、空调、热水器在内的众多设备通过内置的通信与控制装置,形成一个无线传感器网络,这个网络将各种设备连接起来,使它们协同工作,从而将家庭设备从一个个独立被动的个体转变成一个主动的、相互连接的网络。无线传感器网络通过网关与外部的GPRS相连,使两种不同网络的信息能相互传输,为用户提供了一种远程访问控制家庭设备的途径[2]。远程智能家居系统结构如图1所示。

智能家居网关在整个系统中占据了十分重要的地位,它实现了两种网络数据的透明传输,并且具有分析处理数据的能力,可以说它是整个远程智能家居控制系统的中枢神经。然而,目前针对网关的软件设计不多,并且主要侧重于网关的通信功能,而对图形界面与数据存储等功能的支持不足,这类软件的图形界面大都是基于web的设计,需要通过浏览器才能访问网关[3],并且基于嵌入式web技术的图形界面设计并不丰富。目前,支持嵌入式触摸屏的网关管理软件并不多见,因此本文在完成网关基本功能的基础上,利用嵌入式图形接口MiniGUI与嵌入式数据库SQlite设计了一款功能稳定、界面友好的网关管理软件。

图1 远程智能家居结构图

2 网关管理软件的基本设计原则

作为远程智能家居的网关,它连接了家庭的无线传感器网络和外部的GPRS。用户从远程访问网关,通过网关控制家庭设备的工作,因此网关是整个远程智能家居系统的枢纽。它应包括数据通信、处理、存储等基本功能,并能为用户提供一个友好的操作界面。本系统实现的具体功能包括:

1)数据处理。数据处理主要是指将通过网关的GPRS与无线传感器网络的数据进行处理,并对信息做出恰当的反应。

2)通信接口。通信接口负责数据的发送与接收,不对数据进行处理,它仅仅将接收到的数据转发给其他软件模块处理或者将其他模块要求发送的数据发送出去。

3)数据库。数据库模块包括数据的存储、索引以及提取。它通过数据库接口完成数据的插入、检索、提取等操作。网关通过该功能可以对经过它的数据进行存储,提供检索、查询,便于用户查看网关的工作状态和整个系统的工作情况。

4)图形用户界面。图形用户界面是当前流行的应用模式,它提供了一个图形化的操作界面,极大的提高了网关的操作性。对数据的插入和查询通过图形界面可视化的展现出来,并通过该图形界面接收控制命令,完成对网关的工作状态设定。

3 网关管理软件设计

3.1 结构设计

本系统软件由数据处理、通信接口、数据库和图形用户界面4个模块组成,它们相互协作,完成了整个系统的功能。软件结构图如图2所示。

数据处理是整个软件的核心模块,数据通过它在软件各个模块之间相互传递,把整个系统融合为一个整体,使其协调工作。图形用户界面是软件的表层,它为用户提供一个良好的人机交互界面,负责接收用户的控制命令并将处理结果反馈给用户,为用户调用数据库提供图形方式的操作接口。数据库模块为数据进行插入、检索、查询等基本操作提供了软件接口,图形用户界面通过调用该接口,使用户可以方便的利用图形化方式对数据库进行操作。数据通信接口提供了软件与GPRS和无线传感器网络通信的接口,它负责从GPRS和无线传感器网络接收数据并将数据提交给数据处理部件处理,同时可以将数据发送到GPRS网络和无线传感器网络中。

图2 软件结构图

图3 软件流程

3.2 流程设计

系统采用嵌入式 Linux操作系统,Linux强大的功能、稳定性、安全性以及开源软件众多等特点为网关管理软件的设计带来了极大的帮助。软件流程如图3所示。

本软件启动了Linux环境下的两个进程来实现系统功能,分别是系统主进程和通信进程。当Linux启动后,将首先启动系统的主进程,主进程将对系统运行环境初始化,随后启动通信子进程。

主进程的主要用于运行图形用户界面,它维持了一个友好的图形环境,采用消息驱动机制,保证用户的操作能够及时得到处理。

通信接口进程由主进程产生,是主进程的子进程。它负责整个系统的通信功能。当它启动之后,将监视整个系统是否接收到数据或者有数据需要发送。

主进程与通信接口进程的数据交互是通过Linux的进程间通信机制来完成的,Linux下常用的进程间通信方法有管道、消息队列、共享内存等,通过这些进程间通信方法,使数据在不同进程间流动,极大的方便了应用开发。

4 基于C语言的网关管理软件实现

4.1 数据处理模块实现

数据处理模块是数据在系统各个部分之间流动的枢纽,并负责对数据进行处理。它是一组数据处理函数与数据流动通道的集合,负责处理通信接口接收到的数据,判断其来自GPRS还是无线传感器网络,并按照需要决定是否转发数据;它还负责接收图形用户界面对调用数据库以及发送接收数据的要求,并按照要求完成相应工作,将结果反馈给图形用户界面。

除了提供给其他部件直接的函数调用外,数据处理部件的核心在于维持了一个数据流动通道,保证了不同模块之间的数据流通。由于软件采用了2个进程,图形用户界面运行于主进程,而通信接口运行在通信进程中,因此这两个进程中数据的交互就必须依靠数据处理模块所提供的进程间通信的功能,使数据在不同进程间传递,方便了应用开发。本系统采用管道与信号量相结合的方法实现进程间通信。

通俗的说,管道(pipe)就是数据从一个进程到另一个进程的流动通道,常把一个进程的输出通过管道连接到另一个进程的输入。在程序中,我们通过int pipe(int file_descriptor[2])函数创建一个管道,管道的输入输出传递给整型的文件描述符数组,其中file_descriptor[0]表示管道的读,file_descriptor[1]表示管道的写。从file_descriptor[1]写入的数据可以从file_descriptor[0]中读出。进程间管道通信的逻辑结构图如图4所示。

信号量是Linux系统响应某些事件而发出的一个信号,捕获到该信号的进程会立刻中断并调用相应的函数进行处理。通过将管道与信号量机制结合,实现了进程间实时的数据通信。当主进程需要发送数据给通信进程时,它首先将数据写入管道,然后发送信号给通信进程,通信进程捕获到信号后,立刻中断并执行处理函数进行管道的读操作,这样,主进程就可以及时的把数据通过管道发送给通信进程[4]。

4.2 基于SQLite的数据库实现

SQLite是一款开源嵌入式数据库引擎,全部源代码在3万行左右,编译后的程序大约250kb,最多可以管理2TB的数据,提供了对SQL92标准的大多数支持,是个极端轻量级的关系型数据库。正是由于SQLite具有小体积,较强的功能,并能管理2TB的数据,特别适合用于嵌入式领域[5]。

数据库模块通过调用SQLite的API,实现了数据存储、检索、查询等功能,该模块的结构如图5所示。

图4 管道通信逻辑图

SQLite一共涉及了 83个API调用以及数据结构,它的使用简单,若仅仅是简单的应用,那么只需使用 sqlite3_open(),sqlite3_exec()和sqlite3_close()就可以完成。Sqlite3*db是sqlite中数据库句柄,用于其他API对打开的数据库进行操作。sqlite3_open(filename,&db)用于打开一个数据库,其中“filename”是数据库路径名,并将数据库的句柄保存在之前定义的sqlite3*db的指针中。Sqlite3_exec(db,sql,null,null,null)通常用于执行仅修改数据库记录而不返回结果的情况,例如使用insert、update和delete等SQL操作语句的情况,sqlite3_exec中的 sql就是 SQL操作语句了。Sqlite3_close(db)用于关闭指定的数据库。

图5 数据管理部件结构图

若需要对数据库的表进行查询,可通过sqlite3_prepare(),sqlite3_step(),sqlite3_column_xxx()等API的协调使用完成查询操作。Sqlite3_stmt*stmt是SQLite内部的一个结构体,它包含了将要执行的SQL语句的信息,sqlite3_prepare(db,sql,&stmt,0)将SQL语句进行预编译,便于系统高效的处理。但此时SQL语句并没真正的执行,它仅仅被预编译在 stmt结构体中,通过sqlite3_step(stmt)调用,SQL语句才被真正执行,结果通过sqlite_column_xxx(stmt,int num)进行提取,其中xxx可以是int、text等数据存储类型,参数 num表示查询表的列号[6]。

通过上述SQLite提供的API接口,我们可以方便的实现数据库的各种功能。

4.3 基于MiniGUI的图形用户界面实现

MiniGUI是一个轻量级图形用户界面支持系统,因其小巧、高稳定性等优点,特别适合在智能家居网关等嵌入式设备中应用。

MiniGUI采用分层设计,结构图如图 6所示[7]:顶层的API提供给用户调用,中间核心层包括了窗口系统的各个模块,而底层的GAL和IAL提供了Linux图形接口支持及鼠标等设备驱动。MiniGUI为应用层提供了统一的API,屏蔽了底层硬件的区别,降低了开发的复杂性。

图6 MiniGUI结构与流程图

MiniGUI是消息驱动的应用程序,外设发生的事件都由系统收集,并翻译为特定格式的消息。应用程序中建立一个消息循环来读取并处理消息,直到特定的终止消息传来为止。程序要提供一个消息处理函数。系统在此函数中处理相应的消息[8]。

图形界面采用图6右图所示的流程设计。程序从MiniGUI的主程序入口MiniGUIMain启动,之后创建窗口并开始运行消息循环。MSG是MiniGUI中定义消息的数据类型,每个事件都被转换成一个MSG类型变量,发送到消息队列中,等待消息处理函数处理。下面就是执行消息循环的代码:

当用户关闭窗口时,消息队列中便投放了一个特殊消息,这个消息将结束消息循环,之后程序释放整个图形界面的资源,图形界面运行结束。

4.4 数据通信接口实现

数据通信接口在是软件与无线传感器网络和GPRS的通信接口,它负责从两个网络中接收数据,并通过它将数据发送到两个网络中。通信接口代码运行在通信进程中,该进程是主进程在完成系统初始化之后创建的一个子进程。

通信接口可以检测是否接收到数据,并将接收到的数据提取出来,但不对数据做任何分析处理,对于数据的处理将通过数据处理部件来进行。当有数据需要发送时,调用数据通信接口将信息发送到目标网络中。对于数据的发送,通信接口采用了一个简单的退避算法,提高了数据成功发送的概率。该方法的程序流程图如图7所示。

图7 数据发送流程图

当调用通信接口发送数据后,判断发送是否成功。若成功,调用数据管理接口存储数据并返回。若发送失败,则首先将该数据的发送次数加1,然后判断是否超出了发送次数上限。若超出,调用数据管理接口保存数据并在数据库中标明发送失败,然后返回;若还没有超出发送次数的上限,则延迟一个小的时间段,再次调用通信接口发送数据,并继续按照上述流程处理。

5 实验结果

本软件采用了Linux环境下的C语言开发,结合MiniGUI和SQLite等开发工具,完成了软件功能的实现。

软件按照上述方法设计,实现了家用设备工作状态的查询与设置、无线传感器网络与GPRS的数据转发以及SQLite数据库的查询。

图8显示了家用设备的监控界面,左边为无线传感器网络中的设备,点击该设备的图标,右侧的“工作状态”就显示出其工作状态,用户可以在“设置”一栏中重新对设备进行设定,点击“设置”按钮,控制命令就会通过无线传感器网络发送到目标设备中。

图9显示了SQLite数据库的界面。通过网关的数据将被网关存入数据库中,通过数据库查询界面,用户输入查询时间段,就会显示该时间段内网关记录到的数据。

6 结语

本文对远程智能家居中的网关管理软件进行了设计,包括图形用户界面、数据处理模块、通信接口以及数据库模块,实现了智能家居网关应用的基本功能。软件系统界面友好,操作方便。系统只需要在嵌入式设备中非常流行的中低端ARM平台上即可运行,并且功能模块可根据需要进行裁剪,成本可控制。因此这种远程智能家居网关管理软件设计具有较高的应用前景。

[1]Ricquebourg V,Menga D,Durand D,et al.The Smart Home Concept:our immediate future[C]//Proceedings of the 2006 1st IEEE International Conference on ELearning in Industrial Electronics.Hammamet,Tunisia,2006:23~28

[2]Papadopoulos N,Meliones A,Economou D,et al.A Connected Home Platform and Development Framework for smart home control applications[C]//Proceedings of the 2009 7th IEEE International Conference on Industrial Informatics.Cardiff,UK,2009:402~409

[3]唐伟,周祖德.嵌入式智能家居系统网关设计[J].武汉理工大学学报(信息与管理工程版),2009,31(3):391~393

[4]W.Richard Stevens.Advanced Programming in the UNIX Environment[M].Addison Wesley,2005:403~478

[5]胡伟.SQLite在嵌入式系统上的实现研究[J].计算机与数字工程,2009,37(2):158~163

[6]Lv Junyan,Xu Shiguo,Li Yijie.Application Research of Embedded Database SQLite[C]//Proceedings of 2009.IFITA InternationalForum on Information Technology and Applications,Volume 2.Chengdu,China,2009:539~543

[7]刘昌盛,郭勇,谢习华.嵌入式Linux环境下MiniGUI的研究与移植[J].哈尔滨理工大学学报,2009(1):23~28

[8]鲁艳,马旭东,问治国,等.基于 Linux-MiniGUI嵌入式系统监控管理软件开发[J].计算机技术与发展,2008(6):179~184

猜你喜欢
图形用户界面网关进程
基于FPGA的工业TSN融合网关设计
一种主从冗余网关的故障模式分析与处理
Java图形用户界面编程在文本格式化设置系统中的教学研究
债券市场对外开放的进程与展望
改革开放进程中的国际收支统计
天地一体化网络地面软网关技术及其应用
基于ETC在线支付网关的停车场收费系统设计
浅析我国GUI外观专利申请现况
城轨综合监控系统用户界面菜单层级结构设计与实现
社会进程中的新闻学探寻