学术交流
当前位置:

基于Qt的智能家居管理软件设计与实现

2015-03-10 18:22 来源:电视技术

责编:陈默

【原编者按】智能家居发展得如火如荼,智能家居产品品种繁多、功能多样、竞争激烈。智能家居管理软件设计的好坏直接影响到用户的满意度,如何设计出一套界面美观、简单实用的智能家居管理软件有助于赢得客户的青睐。今天推荐的文章通过分析智能家居系统的功能需求确定了基于Qt的软件设计方案,软件架构采用C/S模式。服务器与客户端软件采用Qt进行开发,家庭网关采用嵌入式Linux平台。该设计满足智能家居管理软件对远程控制、实时性、人性化交互界面的需求,促进了Qt在嵌入式系统中的应用


基于Qt的智能家居管理软件设计与实现


杨晶 黄俊 吴福海 重庆邮电大学 信号与信息处理重庆市重点实验室

 2015-03-10

 

近几年智能家居发展得如火如荼,智能家居产品品种繁多、功能多样、竞争激烈。智能家居管理软件设计的好坏直接影响到用户的满意度,如何设计出一套界面美观、简单实用的智能家居管理软件有助于赢得客户的青睐。Qt是挪威Trolletch公司开发的一个跨平台的GUI开发工具,采用面向对象编程。Qt/EmbeddedQt的嵌入式版本,它因继承了Qt的可移植性好、组件丰富、界面美观等优点而被广泛应用于机顶盒、导航仪、掌上设备、网络设备、工业自动化控制仪表等高端设备中。本文在分析智能家居管理软件C/SClient/Server)结构通信流程的基础上,详细介绍了网关服务器软件设计中的几个关键部分,为基于QtC/S架构的软件设计提供了一定的参考价值。

 

1 系统概述

 

智能家居系统结构如图1所示,由远程控制终端、外部通信网络、家庭网关与家庭网络4部分构成。整个系统以家庭网关为中心,横跨ZigBee网络、GPRS/GSM网络、WiFi网络和因特网,混合组网形成一个可以通过PCPAD、智能手机等智能设备远程控制的智能家居网络系统。可以将智能家居系统所需实现的功能概括为远程控制和家庭信息采集这两部分,用户通过在智能家居管理软件的客户端上操作实现具体的功能。

 

在

1 智能家居系统结构

 

2 智能家居管理软件的C/S架构

 

智能家居管理软件设计基于C/S结构,C/S结构是当前应用程序设计中极为流行的一种方式,其最大的优点是计算机工作任务由客户端和服务器端共同完成,这样有利于充分合理地利用系统资源。系统程序分为客户端和服务器,服务器运行于家庭网关;客户端完成访问服务器获取家庭网络的数据并向服务器发送控制命令,服务器端完成数据的存储转发与控制命令的转发。

 

服务器与客户端采用基于TCPTransmissionControl Protocol,传输控制协议)的socket通信实现面向连接的、可靠的通信。通过指定IP地址和端口号,采用C/S模式建立TCP协议下的两个通信进程间的连接。TCP是一种面向连接和数据流的可靠传输协议。Qt提供了QTcpSocket类和QTcpServer类用于编写TCP客户端和服务器应用程序。QTcpSocket类提供了TCP协议的通用接口,可以用来实现其他标准协议。

 

服务器与客户端的通信流程如图2所示。首先启动服务器,创建socket套接字,服务器启动后一直处于监听状态,监听来自客户端的请求;服务器收到客户端的连接请求后经过3次握手建立连接;然后客户端与服务器之间通过recv()与read()函数实现通信;该过程一直持续到客户端通过close函数关闭客户端,服务器收到客户端关闭的消息后断开与服务器的连接。

 

小

2 服务器与客户端程序通信流程

 

3 家庭网关软件设计

 

家庭网关是整个智能家居系统的控制中心,是家庭网络与外部网络的中转站,因此运行于家庭网关上的软件设计至关重要,家庭网关的软件分层结构如图3所示。家庭网关分层结构主要由驱动部分、嵌入式操作系统、支持库和应用程序4部分组成,本文的工作主要集中在支持库的移植和应用程序的开发及移植。服务器采用Qt开发并运行于嵌入式Linux开发平台。由于系统中涉及到对数据的存取与管理,故需要数据库的支持,采用专为嵌入式设计的轻型数据库SQlite

 

 三

3 家庭网关软件分层结构

 

家庭网关软件设计中涉及到的主要工作有:

 

1 SQlite数据库移植,使嵌入式Linux开发平台支持数据库操作;

 

2 Qt/E软件支持库移植,使嵌入式Linux开发平台能够运行Qt程序;

 

3SYSZUXpinyin移植,SYSZUXpinyin是一种开源软键盘输入法;

 

4 HostapdHostAccess Point,守护进程)移植,Hostapd可以配置无线网卡为无线路由器;

 

5)服务器软件设计,这是本文工作的重点。

 

由于智能家居管理软件的客户端与服务器拥有相似的控制界面,因此本文主要描述服务器软件的设计。服务器软件主要实现的功能有响应客户端请求、采集数据实时显示并存储和转发控制命令,通过对控制命令的操作可实现各种复杂功能。服务器软件运行后进入登录界面,登录成功后出现主界面,从主界面可以分别进入我的场景设备状态设备控制我的房间安防监控高级设置等子界面,具体业务流程如图4所示。

 

才

4 服务器工作流程

 

3.1 建立多线程服务器

 

服务器可能同时收到多个客户端的服务请求,所以建立多线程服务器是非常必要的,结合服务器表现为不同的线程可以对不同的客户端请求进行响应。多线程即同时有多个线程一起运行,而不同的线程可以执行不同的操作,可以大大提高软件运行速度与CPU的利用率。在Qt中,由于服务器与客户端采用基于TCPsocket通信,故新建一个服务器只需新建一个类(gateServer)使其继承QTcpServer类即可。

 

gateServer * server = new gateServer

 

每当客户端试图连接的时候,服务器通过incomingConnection()函数建立一个线程,负责对该客户端进行服务。在QThread类的run()函数中创建socket套接字和进行数据通信。

 

void incomingConnectionintsocketDescriptor{

 

Thread *serverTh = new ThreadsocketDescriptor);

 

connectserverThSIGNALfinished()),serverTh SLOTdeleteLater()));

 

serverTh -> start();

 

}

 

void run(){

 

QTcpSocket *socket = new QTcpSocketsocketDescriptor);

 

...//数据通信 }

 

3.2 服务器的信号槽编程

 

Qt中信号槽机制用于对象之间的通信,它贯穿于Qt编程的整个过程。对象的状态改变后发出一个信号,槽通常是类中的成员函数,用于接收信号,它们之间通过connect()函数关联,当有信号发生时触发相应的槽函数。服务器软件设计中涉及到一系列的信号槽编程,图5为灯光自动控制功能的信号槽实现流程。

 

才
5 灯光自动控制信号槽实现流程

 

3.3 服务器串口编程

 

服务器串口操作在整个设计过程中至关重要,它一方面实现与ZigBee网络的通信,另一方面控制GPRS模块工作。在Qt中没有给定的串口控制类,通常使用第三方的串口控制类实现串口控制。QextSerialPort类是一个跨平台的第三方串口类,通过它可以很方便地实现对串口的读/写,旧版本的QextSerialPort类只支持使用轮询(polling)的方式读取串口,目前该类的最新版已支持事件驱动的方式,本文采用的是事件驱动方式。串口采用多线程方式编程,多线程实现过程为:

 

1)在主界面文件中新建串口线程类serialThread继承QThread,分别实现与ZigBee网络和GPRS通信,并通过start()函数开启线程。

 

serialThread zigbeeTh = new ThreadportZigbeethis);

 

// Zigbee使用的串口

 

serialThread gprsTh = new ThreadportGprsthis);

 

// GprsZigbee使用的串口

 

2)在线程类的构造函数中新建串口类继承QextSerialPort,并打开串口。

 

zigbeeCom = new QextSerialPort"/dev/"+ portZigbee);

 

bool isOpen = zigbeeCom -> openQIODevice::ReadWrite);

 

//打开串口

 

gprsCom = new QextSerialPort"/dev/"+ portGprs);

 

bool isOpen = gprs -> openQIODevice::ReadWrite);

 

//打开串口

 

3.4SQlite数据库编程

 

SQlite是一款应用于嵌入式领域的小型数据库,它和传统数据库之间最大的不同之处在于它的尺寸小和操作简单,它保持了大部分传统数据库的特征。需要和数据库交互的数据有用户信息、传感器采集的数据、家用电器和传感器的工作状态。Qt中的QtSql模块提供了对数据库的支持,使用QtSql模块中的类,之前需要在工程文件(.pro文件)中添加“Qt+=sql”代码。

 

Qt中可以使用QSqlQuery类执行SQL语句或者通过SQL模型类QSqlTableModel实现对数据库的增删改查。首先使用SQLitedatabase browser工具建立数据库(smarthome.db),然后分别建立用户信息表、传感器数据表、传感器工作状态表和家用电器工作状态表,传感器数据如图6所示。

 才


6 传感器数据表

 

 

4 测试结果

 

服务器程序编写完成经过交叉编译后将所得到的可执行文件在已搭建好的嵌入式Linux平台上运行。服务器软件初始化后开始监听网络,测试表明客户端与服务器能够正常通信,图7我的房间中的客厅子界面,能正常显示温湿度、白天黑夜状态、风扇开关状态与控制灯的开关。

 

才


7 服务器我的房间中的客厅子界面

 

 

5 结束语

 

本文系统地介绍了基于Qt的智能家居系统管理软件的设计过程,给出了具体的设计方案,并实现了服务器软件的开发,列出了实现过程中几个关键部分。服务器软件开发基于嵌入式Linux开发平台,测试结果表明系统运行流畅,界面简洁明了,操作简单,能够实现远程控制与查看,基本满足智能家居系统的功能需求。

 

 

该文已刊登在《电视技术》2015年第4期

订阅电话:010-59570227