【php精品源码栏目提醒】:网学会员,鉴于大家对php精品源码十分关注,论文会员在此为大家搜集整理了“LinuxQt的智能家居系统设计 - 其它资料”一文,供大家参考学习!
Linux/Qt 的智能家居系统设计针对智能家居的特点及应用背景,设计了一种家庭多功能控制系统。
该系统采用飞思卡尔公司 ARM CortexA8 系列的 i.MX51 处理器作为 MCU,在其上移植嵌入式 Linux 作为软件开发平台,并利用 Qt 相关技术为基础设计友好的用户界面,实现了 ARM 板的各功能模块与服务器端的交互。
系统同时具备数字可视对讲、信息收发、家电控制、安防报警、家庭娱乐等功能。
1 系统的架构和功能家庭智能控制系统主要由室内分机、单元门口机、小区围墙机、管理中心终端机、管理中心服务器以及附件组成。
系统采用分布式网络结构,可以根据住户数量对系统的容量进行扩充。
1室内机是用户在室内进行操作的主要平台,其功能组成为:可视对讲、信息服务、家电控制、安防报警、家庭娱乐等。
可视对讲模块主要实现双向可视通话、视频监控、留言/留影、开锁等功能信息服务模块主要用来收发物业信息和小区广播,支持文本、图片形式,并实现与可视对讲模块的影音共享家电控制模块包括对灯光、窗帘、空调、电梯等设施的无线控制,并预设了情境模式安防报警模块支持对烟感、门磁、煤气泄漏检测等的自动报警,并可通过 GPRS/3G 技术将报警信息传送到用户手机上家庭娱乐模块支持常见格式的音视频文件的播放主要依靠硬件解码以及对常见格式的图片的浏览电子相框。
2单元门口机的主要功能是完成与所在单元楼的任意住户以及管理中心机的可视通话,除了具备留言/留影功能外,还提供触摸屏校准、背光调节、密码设置等功能。
3围墙机的基本功能和单元门口机类似,但可视对讲、留言/留影功能是针对小区内所有住户的。
4中心机是整个系统的神经中枢,管理人员通过管理中心的控制设备管理各子系统的终端,其功能包括:可视对讲、视频监控、查看报警信息、排除设备故障、信息服务、系统设置、远程管理等。
2 系统的实现方案2.1 Qt 的信号/槽机制Qt 是一个跨平台的 C应用程序框架,完全面向对象、易于扩展且允许真正的组件编程。
Qt 的 C类库封装了适应不同操作系统的访问细节,这使得它能够快速地部署于各种桌面与嵌入式
系统中1。
信号/槽机制是 Qt 的核心特性,这种机制真正实现了消息的封装,完全可以取代原始的回调和消息机制。
信号和槽的连接通过 connect函数完成,connect函数是 QObject 类中的静态函数,其函数原型如下:BoolQObject::connectconstQObject senderconst charsignalconstQObject receiverconst char member其中,sender 和 receiver 是指向 QObject 的指针,signal 和 slot 是不带有参数的函数名。
2.2 基于 XML 格式的 Socket 多线程通信Linux 中的网络编程主要通过 Socket 接口实现,在 Qt 环境里,对 Socket 进行了封装,并建立了相应的QTcpSocket 类来实现 TCP 客户端和服务器的通信。
QTcpSocket 继承了 QIODevice,所以 QTcpSocket 可以使用 QDataStream 进行数据的读取和写入。
可扩展标记语言 XMLeXtensible Markup Language是一种用于数据交换和数据存储的多用途文本格式。
对于 XML 格式的数据,Qt 中的 QtXml 模块提供了 DOM 和 SAX 两种处理方式。
本文采用的 DOM 方式把XML
文档转换成一个可以遍历的树形结构,这样便可以随意访问其中的节点,因此要明显简洁得多。
室内机和中心机之间的通信采用多线程方式实现。
多线程方式具有降低内存、提高程序响应速度等优点,特别适用于嵌入系统。
系统中建立了三个主线程:1GUI 线程:用于执行 main主函数,响应用户的界面操作2tcpServer 侦听线程:用于对指定端口进行监听3tcpSocket 传输线程:负责消息的接收和回复。
下面以用户主动更新小区广播为例详细说明 Socket 通信的流程:1室内机首先启动一个线程,将用户的更新请求结构转化成标准的 XML 格式如果是新设备第一次开机,要先手动进行 IP 的设置,2调用connectToHost函数请求与中心机建立连接,处于监听状态的中心机接到请求后,就会分配一个 Socket 套接字来处理连接:首先根据解析出来的 XML 的 Type 节点判断请求类型,如果是纯文本则从数据库的 Text表读取,如果是图片则从硬盘读取,然后调用 QIODevice::write函数发送3室内机接到应答信号readyRead后就开始进行信息的收取,根据消息的 Type 节点类型分别写入数据库和硬盘。
Socket 多线程
通信流程如图 1 所示。
2.3 并行数据库
设计为了实现数据库的并行操作,使 GUI 界面与数据库相分离,从而让界面能更快地响应用户的一般操作,同样要用到 Qt 的多线程编程。
在系统启动时,首先要建立一个全局对象 m_query,以便于各个实体类与数据库类进行连接。
这样,每当有数据库操作请求时便会实例化一个 m_query 来创建一个线程用于处理该请求。
m_query 对象中包含两个类