2166
2010。31(10)
计算机工程与设计ComputerEngineeringandDesign
・嵌入式系统工程・
嵌入式智能家居终端人机界面设计与实现
贺翔,
孟小华
(暨南大学计算机系,广东广州510632)
摘要:针对嵌入式设备流行的开发工具Qt/Embedded,提出了一种基于¥3C2440的嵌入式智能家居终端人机交互界面的解决方案。介绍了QT/Embedded类库的移植,结合实例阐述了GuI和后台进程之间通信,多种语言字符集动态转换等技术。该方案提高了开发效率,解决了嵌入式设备各种字符集显示的问题。由于Qt/Embedded的跨平台特性,该设计框架具有通用性,并不局限于特定的硬件或软件平台。
关键词:智能家居;人机界面;Qt/Embedded;嵌入式;多语种中图法分类号:TP311.52
文献标识码:A
文章编号:1000-7024(2010)10-2166.03
Designandimplementationofhuman—computerinterfaceinembedded
intelligenthomesystem
HEXiang,
MENGXiao.hua
0632,China)
(Department
Abstract:Accordingbased
tation
on
to
ofComputerScience,JinanUniversity,Guangzhou51
on
thedevelopmenttool,Qt/Embeddedlibraries,whichispopular
embeddeddevices,asolutionisproposed
thehuman—computerinterfaceoftheembeddedintelligenthomesystemterminalofS3C2440,whichintroducedthetransplan—
oftheQT/Eandformulatedtechnologiessuch鹪acommunicationbetweenGUIanddaemonswithexamples.dynamicmulti-
SO
lingualcharactersetsconversionandsolved
a
on.It
a
haSbeenfoundthatthesetechnologiesnotonlyimproveddevelopmentefficiencybutalso
setsOn
problemabout
thedispalyofvarietyofcharacter
embedded
devices.BecauseofQt/Embedded'Scharacteristicsof
cross-platform,theframeworkisuniversalwithoutthelimitationofspecifichardware01"softwareplatform.Keywords:intelligenthomesystem;human・・computerinterface;Qt/Embedded;embedded;multi--language
O
引言
口的,易于扩展和维护,符合软件工程化的要求。
基于嵌入式技术的智能家居系统成为当前现代化家居的一个热门选择。智能家居是以住宅为平台,兼备建筑、网络通信、信息家电、设备自动化,集系统、结构、服务、管理为一体的高效、舒适、安全、便利、环保的居住环境。它不仅具有传统意义上的居住功能,为人们提供安全舒适的家庭生活空间,而且可以通过高科技把智能带进家庭,提供全方位的信息交换功能n】。
智能家居终端呈现给用户的应当是高度的可靠性和美观,易操作的界面。这就要求一种占用资源少并能支持多种字符集的机制捌。系统内部通常包含网络通信,音视频播放等等模块,几个程序之间并发执行,这就涉及到进程间的通讯,如何合理快速的响应用户或服务器的需求是实现的难点。本文提出了一种基于Qt/Embedded应用程序开发框架的智能家居管理系统,不仅提供了操作简单,多种语言支持的前台图形操作窗口,还利用信号槽机制实现了音视频播放进程间通讯和对小区管理服务器的网络通信等功能。系统本身是面向接收稿日期:2009.06-05;修订日期:2009-08-06。
基金项目:广东省科技计划基金项目(20078020715001)。
1系统结构与实现
智能家居终端硬件采用ARM9平台,操作系统采用的是Linux2.6。Qt/Embedded图形管理界面主要运行在家居系统的内部,用户通过触摸屏来进行各种家电的管理,终端会把根据具体实现把用户的操作通过以太网传输给服务器,同时有一个后台进程接受服务器端的信息等反馈。服务器端是一台运行监控管理软件的PC机,一般置于小区的物业管理中心,负责保存不同用户的不用硬件状态,并在需要时向用户发送公告等服务。
终端系统工作时,后台进程会循环监听服务器,检查服务器端有没有新的消息发送,如有新的信息到来,则通知终端的GUI程序对界面做出响应,以提示用户处理。和服务器的连接通过TCPAJDP实现。同时终端的GUI响应用户的相关操作,通过后台程序实现对各种电器的管理,和服务器的通讯,记录用户操作记录,播放音视频文件等。
作者简介:贺翔(1985--),男,山东菏泽人,硕士研究生,研究方向为计算机网络、嵌入式系统;
究方向为计算机网络、分布式计算.E-mail:heyuxian92001@yahoo.oom.吼
孟小华0965-),副教授,硕士生导师,研
贺翔,孟小华:嵌入式智能家居终端人机界面设计与实现
根据家居的设备管理控制的分类,在界面管理上实现如下功能:家居安防,家电控制,照明控制,音视频播放,查看公告,及系统设置等模块。本系统的结构图如图1所示。
2010,31(io)
2167
ARM体系结构,使用的是GCC工具链。.qeonfigmyfile指定了编译的配置文件myfile,myfile里指定了要编译的类库,通过裁剪不需要的类库,可以进一步减小最后生成可执行文件的大小。.L/yourPath/tslibI.3/lib.I/yourPath/tslibl.3/include说明了触摸屏支持库和其头文件所在的目录。
编译完毕后,可以设置环境变量/yourPath/qte4.4/bin。至此,已经在宿主机上搭建了Qt/E的开发环境,当我们生成可执行文件之后,就可以在目标机上通过NFS挂载宿主机等方式运行Qt,E程序。
系统启动以后,终端主要运行两个进程,一个是Qt/E的图形界面进程,一个是后台进程,后台进程由图形界面的进程
图l智能家居终端系统结构
所创建,而且这两个进程之间能够进行通讯。音视频播放器是另外一个进程,如果有音视频需要播放,则图形界面进程负责创建。后台程序则一直循环监听,向传感器发送用户命令或者接受服务器的信息。
2.3
2图形界面Qt/Embedded简介
Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt,基于framebuffer的QtEmbedded,快速开发工具QtDesigner,国际化工具QtLinguist等,同时具有极好的跨平台特性。可以说许多基于Qt的XWindow程序都可以非常方便的移植到Qt厄版本上。Qt不仅具有基本的可视化控件编程功能,而且提供了一整套完整的类库,这些基于Qt的支持既全面又靠近底层,可以说开发中涉及到的所有需求,都可以在Qt的内部获得解决。
2.1
Qtm与framebuffer
Qt/E不是构建在XWindow之上,而是构建在Linux的
framebuffer之上,把在界面上需要显示的内容直接写入了fra.mebu行cr。因为在嵌入式系统上把xSystem给省略了,这样会节省许多的系统开销。而直接写framebuffer,又会加快显示速度。
Qt/E在framebuffer之上有一个Server层,这一层负责监听系统事件,像键盘和鼠标事件,屏幕输出等,并管理re.gion,顶层窗口,光标和屏幕保护程序等等诸多部件。系统产生的触摸屏点击事件,首先就传给了这个server
applica.
QVE编程核心机制
GUI应用程序要能够相应用户的动作。譬如,当用户点
击一个按钮的同时,我们通常希望应用程序能够调用一段代码来进行相应的处理,更普遍的是我们希望各种类型的对象之间能够进行相互通讯。在Qt编程中,提供了signals和slots(信号和槽)机制来实现这样的要求。信号和槽是一种强大的内部对象通信机制,它拥有c++面向对象的特点,相对于一般的回调机制,它更为灵活,而且是信息安全的,可以被重载和覆盖,在类中也可以为public.private和protccted的。信号和槽之间的关系可以是一对多,多对一,一对一,实现形式非常灵活啪。
例如我们处理上述的按钮点击动作,用代码写出来就是这样:
connect(button,SIGNAL(clicked0),app,SLOT(processO));button对象发出一个clicked0信号,应用程序app接收这个信号并调用相应的处理程序processO。2.2搭建Qtm开发环境
本设计使用了TrollTeeh公司的自由版:Qt/Embedded4.4.3,这个版本是目前的较新版本,由于程序需要运行在三星s3c2440微处理器上,所以在Linux./X86上编译Qt/E类库的时候要正确配置相关选项Ⅲ。几个比较重要的参数如下:
./configure-embeddedarm-xplatformqws/linux-arm・g_-+-prefix/yourPath/qte4.4/-qconfigmyfile-qt-mouse-tslib—L/your-Path/tslibl.3/lib-I/yourPath/tslibI.3/include-qt-mouse-linuxtp—no-qt3support-no・・xmlpattcms-no・・svg-no・-webkit・-qt-zlib-no・-libtiff-qt-liblmg—no-openssl-no-his-no—cups-depths4,16,24,32-qt-gfx-
linuxfb
tion,然后server再根据具体的情况把这些事件分发给相应的应用程序。
3进程问通信
传统Linux进程间通讯有管道,消息队列,共享内存等几种方式。其实现不是面向对象的,可扩展性不强。而且由于Qt厄程序自身的特殊性,需要考虑C和C++得兼容性,所以这些方法不是太实用。在这个设计中,采用了Qt/E自身提供的QProcess类来实现这个功能,QProcess类可以被用来启动一个外部程序并能进行相互通讯。用QProcess类进行通讯类似Linux下的管道,主程序可以写数据到被启动程序的标准输入,也可以从被启动程序的标准输出和标准错误中读取数据。当被启动程序有数据要写到标准输出或标准错误的时候,会发射readyReadStandardOutput0或readyReadStandardError0信号。根据Qt的信号/槽机制,我们可以在主程序设定一个处理程序槽,调用readAllStandardOulput0获得发送过来的QbyteArray类型的二进制流,然后根据特定协议分析得到的二进制流,从而达到进程通讯的目的。
由于二进制流没有边界。所以在此要求读写进程对数据进行解释。这里定义了一种通信协议,在每条消息前冠以消息的长度,这样接受进程不必扫描整个数据就能定位一条具体记录的位置。
此外,当QProcess类运行,终止,发生错误时,都会发射相关的信号。譬如在音视频播放器终止或发生错误的时候,想
-embedded
a锄-xplatformqws/linux-arm-g斗+说明目标机是
进行相关的处理,这时就可以查看相关状态。
2168
2010,31(10)
计算机工程与设计ComputerEngineeringandDesign
后台程序的部分代码实现如下:
BgProcess::agProcess(QObject+par):QProcess(par){
connect(this,SIGNA“rcadyRcadStandardOutputO),this,
SLOT(parseData0));
}
void
BgProcess::parseData0{
data+=readAilStandardOutput0;…//具体数据分析过程省略
emitrecordAvailable(recld,data);
}
BaseGui::BaseGui(QWidget。par):QWidget(par){
connect(bgprocess,SIGNAL(recordAvailable(int,
QByteArray)),this,SLOT(show(int,QByteArray)));
}
void
BgProcess::writeToStdin(constQString&command){if(isRunnin90){
write(command.toLatinl(卜’‰”):
}else{
qWaming(”BgProcess::writeToStdin:processisnotrtm-
ning”);
}}
上述代码建立了两个信号/槽连接。BgProcess是和后台进程通讯的类,当它读到后台程序写到标准输出的数据后,会根据特定协议进行数据分析。成功后把分析得到的关键字recId和要显示数据data发送给BaseGui。这样前端的GUI程序就能根据关键字recId来决定怎么显示数据data。同理,也可以调用QProccss的write(QString&com)方法写到后台进程的标准输入,GUI和音视频播放器进程的通信原理类似。
4多语言字符集支持
由于用户群体的多样性,要求终端能够支持多种语言。Qt支持Unicode编码,能够显示英文、日文、俄文等被Unicode支持的字符集。多国语言之间的转换,主要有两种方式:QtLinguist工具和QTextCodee类的动态转换。
QtLinguist是一个翻译文本语言的Qt程序,它可以方便的编辑矗文件。.ts文件本身是一个待翻译文本的集合,格式是简单的XML文件,本身并没有被编译为二进制文件。这些集合在源程序中是以tr(“string”)的形式出现的,所有被tr0包含的字符串都可以在QtLinguist中被编辑。通常我们用QtLinguist翻译一个Qt程序通常有3个步骤:
(1)运行lupdate-V具把待翻译的字符串从程序源代码中解析出来;
(2)用QtLinguist编辑待翻译的字符串;
(3)运行lrclease生成二进制的.qm文件,这种格式的文件可以被QTranslator进行解析。
这时就可在源程序中用QTranslator加载这个.qm文件:
intmain(int∽。char’av【】){
QApplicationapp(∽,aV);QTranslatortranslator,
wanlator.10ad(“test");
//test.qm文件
…
)
但是这种方式不适合与服务器的通信,因为它们之间通信的字符编码集可能是动态变化的,这时候就需要根据用户
的指令动态改变字符解码集。
QTextCodee类能够把本地字符集转换成Unicode编码,QTextDecoder则实现了相反的功能,它把Unicodc编码的字符集按照特定字符编码显示,譬如,用户想使用GBK编码的中文显示界面,后台和服务器进行通信后,把服务器发送过来的数据进行解析:
QTextCodee*codec=QTextCodee::codecForName(“GBK”):QTextDccodcr’decoder=codec->makeDecoderO;tranlated=decoder->toUnicodc(data);
data是服务器发送过来的字符集,translated是翻译后的字符集,它们都是QByteArray类型。这样,Qt界面都能正确显示相应的语言文字了。采用这种方法的好处是当有新的字符集需求时,仅仅需要生成.qm文件就可以了,并不需要重新编译整个工程,易于扩展。
5结束语
本文在分析Qt厄应用程序框架的基础上,利用其强大的信号.槽机制,设计了一种智能家居图形终端的解决方案,并包含了音视频播放的通信,服务器网络通信等功能。这个方案的创新处在于提高了进程间通信之间的效率,易于扩展,具有高度的可重用性和可维护性。实现了不同字符编码之间的转换,避免了整个工程的重复编码,减少了软件开发的时间周期。同时UI层具有跨平台的特性,实现了UI层和业务层的分离,Qt的优良性能也保证了本系统界面的可靠性。实践表
明,本系统界面设计方案是行之有效的。
参考文献:
【1】
王春燕,吴旭辉.家庭智能化网络的探讨及应用【J】.低压电器,
2007(2):22.25.
【2】吴晓烁,陈蜀宇,刘巍.嵌入式Linux环境下高效率GUI的设计与实现【J】.重庆工学院学报(自然科学版),2009,23(2):136.
141.
【3】JasminBlanchette,MarkSummerfield.C++GUIprogramming
withQT4[M].北京:机械工业出版社,2008.
【4】
吴娴.基于Qtopia的嵌入式软件开发【J】.计算机工程与设计,2007,28(21):5190.5192.
【5】何东之,于敬芝,王书锋,等.基于环绕智能的智能家居控制系统研究【J】.计算机工程,2007,33(10):261-273.
【6】刘新东,EiffelChert,应群民.嵌入式系统中多国语言显示的一个解决方案[J】.工业控制计算机,2006,19(3):49-51.
【7】倪红波,周兴社,谷建华.基于QT/E的嵌入式图形支持系统【J】.计算机工程,2007,33(20):256-258.
【8】王兴杰,李允,江浩,等.基于Linux的嵌入式交叉开发技术嗍.计算机工程,2008,34(1):206-214.
嵌入式智能家居终端人机界面设计与实现
作者:作者单位:刊名:英文刊名:年,卷(期):被引用次数:
贺翔, 孟小华, HE Xiang, MENG Xiao-hua暨南大学,计算机系,广东广州,510632计算机工程与设计
COMPUTER ENGINEERING AND DESIGN2010,31(10)27次
参考文献(8条)
1. 王春燕,吴旭辉 家庭智能化网络的探讨及应用[期刊论文]-低压电器 2007(6)
2. 吴晓烁,陈蜀宇,刘巍 嵌入式Linux环境下高效率GUI的设计与实现[期刊论文]-重庆工学院学报(自然科学版)2009(2)
3. Jasmin Blanchette;Mark Summerfield C++ GUI programming with QT4 20084. 吴娴 基于Qtopia的嵌入式软件开发[期刊论文]-计算机工程与设计 2007(21)
5. 何东之,于敬芝,王书锋,高硕,孙炎森 基于环绕智能的智能家居控制系统研究[期刊论文]-计算机工程 2007(10)6. 刘新东,Eiffel Chen,应群民 嵌入式系统中多国语言显示的一个解决方案[期刊论文]-工业控制计算机 2006(3)7. 倪红波,周兴社,谷建华 基于QT/E的嵌入式图形支持系统[期刊论文]-计算机工程 2007(20)8. 王兴杰,李允,江浩,李涛 基于Linux的嵌入式交叉开发技术[期刊论文]-计算机应用研究 2008(1)
本文读者也读过(7条)
1. 刘余. 孟小华. LIU Yu. MENG Xiao-hua 嵌入式智能家居终端通信模块的设计与实现[期刊论文]-计算机工程与设计2010,31(8)
2. 娄伟. 施国英. 吴德军. 卢正杰 基于ARM和TCP/IP Lean的智能家居控制器的研究[期刊论文]-计算机工程与设计2010,31(7)
3. 李国峰. 王云. LI Guo Feng. WANG Yun 基于单片机的智能家居WebServer开发及应用[期刊论文]-微型机与应用2009,28(9)
4. 彭小军. 李荣. PENG Xiaojun. LI Rong 基于ARM 的嵌入式智能家居控制系统研究[期刊论文]-低压电器2009(18)5. 夏澎. 郝卫东. XIA Peng. HAO Wei Dong 基于嵌入式的智能家居监控系统设计[期刊论文]-微型机与应用2010,29(10)
6. 丁志文. 周悦. 韩中华. DING Zhiwen. ZHOU Yue. HAN Zhonghua 基于SMS的智能家居监控系统[期刊论文]-低压电器2008(10)
7. 满莎. 杨恢先. 彭友. 王绪四. MAN Sha. YANG Hui-xian. PENG You. WANG Xu-si 基于ARM9的嵌入式无线智能家居网关设计[期刊论文]-计算机应用2010,30(9)
引证文献(20条)
1. 吴园圆 基于无线警报系统的LCD显示菜单设计[期刊论文]-电子设计工程 2014(11)
2. 王冬星,程书伟,董雷刚,祝裕璞,张华 基于FS_S5PC100和Android平台的智能模拟系统的设计与实现[期刊论文]-智能计算机与应用 2013(02)
3. 王昊 浅谈嵌入式智能家居终端通信模块的设计与实现[期刊论文]-中国新通信 2015(7)
4. 马天成,刘大铭,李雪洁,孙川川 基于机器学习的绿色建筑智能控制[期刊论文]-计算机工程与设计 2014(10)5. 冯志荣,王红梅 嵌入式无线智能家居监控系统[期刊论文]-电子设计工程 2015(06)
6. 李林林,杨帆,张飞飞,宋保清,宋兵兵 基于Qt4/VS2010平台的自动测试系统[期刊论文]-计算机系统应用
2015(02)
7. 刘美,徐小玲,胡映良 基于S3C6410的智能家居系统设计[期刊论文]-电子设计工程 2014(12)8. 类延强,黎英 M0内核在通用文本型HMI中的应用[期刊论文]-微处理机 2013(01)
9. 穆红显,杨林楠,武尔维 基于QT4的SQLite可视化管理工具的研究与开发[期刊论文]-计算机工程与设计 2012(05)10. 童英华 基于S3C2410和Linux的智能家居系统的设计[期刊论文]-电子设计工程 2013(16)
11. 谭涛,徐晓辉,黄晓亮,王盟,温阳 基于Arm-Linux的嵌入式智能家居控制系统的设计[期刊论文]-电子设计工程2011(03)
12. 罗飞,李小勇,陈琳 嵌入式XPE系统镜像的定制和优化技术研究[期刊论文]-计算机工程与设计 2011(12)13. 邓昀,程小辉 面向物联网的智能家居系统设计[期刊论文]-桂林理工大学学报 2012(02)14. 张浩 设备虚拟化技术研究及在家庭物联网中的应用[学位论文]硕士 2013
15. 陈守满,朱伟,王庆春 图片操作的手势动态识别系统[期刊论文]-现代电子技术 2012(22)
16. 熊杰,刘新德,冯仁剑 嵌入式图形用户界面系统的设计与实现[期刊论文]-计算机工程与设计 2012(07)17. 赵国政 基于物联网的智能家居控制系统的设计与实现[学位论文]硕士 201118. 管超,邵小桃 基于ZigBee的振动报警系统的设计与实现[期刊论文]-软件 2015(06)19. 刘靖 基于物联网技术的智能家居信息处理与控制系统研究[学位论文]硕士 201420. 张泳 基于嵌入式系统动态手势识别算法的研究与实现[学位论文]硕士 2013
引用本文格式:贺翔. 孟小华. HE Xiang. MENG Xiao-hua 嵌入式智能家居终端人机界面设计与实现[期刊论文]-计算机工程与设计 2010(10)