找回密码
 立即注册
Qt开源社区 门户 查看内容

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

2019-2-9 09:46| 发布者: admin| 查看: 3967| 评论: 0

摘要: 作者:电视技术 【编者按】智能家居发展得如火如荼,智能家居产品品种繁多、功能多样、竞争激烈。 ...
作者:电视技术


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


基于Qt的智能家居管理软件

设计与实现

杨 晶,黄 俊,吴福海

重庆邮电大学

信号与信息处理重庆市重点实验室

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

1 系统概述

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



图1 智能家居系统结构

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

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

服务器与客户端采用基于TCP(TransmissionControl 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程序;

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

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

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

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



图4 服务器工作流程

3.1 建立多线程服务器

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

gateServer * server = new gateServer;

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

void incomingConnection(intsocketDescriptor){

Thread *serverTh = new Thread(socketDescriptor);

connect(serverTh,SIGNAL(finished()),serverTh, SLOT(deleteLater()));

serverTh -> start();

}

void run(){

QTcpSocket *socket = new QTcpSocket(socketDescriptor);

...//数据通信 }

3.2 服务器的信号—槽编程

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



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

3.3 服务器串口编程

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

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

serialThread zigbeeTh = new Thread(portZigbee,this);

// Zigbee使用的串口

serialThread gprsTh = new Thread(portGprs,this);

// GprsZigbee使用的串口

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

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

bool isOpen = zigbeeCom -> open(QIODevice::ReadWrite);

//打开串口

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

bool isOpen = gprs -> open(QIODevice::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

电视技术
欢迎投稿《电视技术》:www.videoe.cn

欢迎关注《电视技术》官方新浪微博:http://weibo.com/u/3260327660

【关注我们】打开手机版微信客户端,点击通讯录界面右上方,在查找公众号中输入“电视技术”,即可关注电视技术官方微信,也可直接从“发现”界面扫一扫二维码

【获取更多消息】点击右上角-查看官方账号-查看历史消息

关注电视技术,精彩内容等你分享!


-------------------------------------------------------------------------
我们尊重原创,也注重分享,如若侵权请联系qter@qter.org。
-------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了