基于Linux/Qt的智能家居系统设计

发布者:sedsedq最新更新时间:2014-03-18 来源: elecfans关键字:Linux  智能家居系统  编解码器 手机看文章 扫描二维码
随时随地手机看文章

  针对智能家居的特点及应用背景,设计了一种家庭多功能控制系统。该系统采用飞思卡尔公司ARM Cortex A8系列的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类中的静态函数,其函数原型如下:

  Bool QObject::connect(const QObject* sender,

  const char*signal,const QObject* receiver,const char* member)

  其中,sender和receiver是指向QObject的指针,signal和slot是不带有参数的函数名。

  2.2 基于XML格式的Socket多线程通信

  Linux中的网络编程主要通过Socket接口实现,在Qt环境里,对Socket进行了封装,并建立了相应的QTcpSocket类来实现TCP客户端和服务器的通信。QTcpSocket继承了QIODevice,所以QTcpSocket可以使用QDataStream进行数据的读取和写入。

  可扩展标记语言XML(eXtensible Markup Language)是一种用于数据交换和数据存储的多用途文本格式。对于XML格式的数据,Qt中的QtXml模块提供了DOM和SAX两种处理方式。本文采用的DOM方式把XML文档转换成一个可以遍历的树形结构,这样便可以随意访问其中的节点,因此要明显简洁得多。

  室内机和中心机之间的通信采用多线程方式实现。多线程方式具有降低内存、提高程序响应速度等优点,特别适用于嵌入系统。系统中建立了三个主线程:(1)GUI线程:用于执行main()主函数,响应用户的界面操作;(2)tcpServer侦听线程:用于对指定端口进行监听;(3)tcpSocket传输线程:负责消息的接收和回复。下面以用户主动更新小区广播为例详细说明Socket通信的流程:(1)室内机首先启动一个线程,将用户的更新请求结构转化成标准的XML格式(如果是新设备第一次开机,要先手动进行IP的设置),(2)调用connectToHost()函数请求与中心机建立连接,处于监听状态的中心机接到请求后,就会分配一个Socket套接字来处理连接:首先根据解析出来的XML的Type节点判断请求类型,如果是纯文本则从数据库的Text表读取,如果是图片则从硬盘读取,然后调用QIODevice::write()函数发送;(3)室内机接到应答信号readyRead()后就开始进行信息的收取,根据消息的Type节点类型分别写入数据库和硬盘。Socket多线程通信流程如图1所示。[page]

  Socket多线程通信流程

  2.3 并行数据库设计

  为了实现数据库的并行操作,使GUI界面与数据库相分离,从而让界面能更快地响应用户的一般操作,同样要用到Qt的多线程编程。在系统启动时,首先要建立一个全局对象m_query,以便于各个实体类与数据库类进行连接。这样,每当有数据库操作请求时便会实例化一个m_query来创建一个线程用于处理该请求。m_query对象中包含两个类:(1)QueryThread,用于为每个数据操作创建一个线程;(2)Worker,用于实现数据库的相关操作,如加载数据库驱动、进行数据查询/插入/删除等。

  图2为数据库的查询操作流程。首先在实体类里创建两个connect连接,分别用于发送和接收查询结果,并生成SQL语句向QueryThread提交查询请求信号。QueryThread收到请求后为其创建一个线程,并交由Worker类进行具体数据库查询操作。Worker类得出查询结果后,先传递给QueryThread,再由其将查询结果返回到实体类。

  数据库的查询操作流程

  关键代码如下:

  connect( this,SIGNAL(seek(const QString& ) ),m_query,

  SIGNAL(seek_execute(const QString& )) );

  connect( m_query,SIGNAL(seek(const QList

  & ) ),this,SLOT( slotResult( const QList & ) ) );

  …

  void text:: database() {

  QString sql = “select * from Text order by date desc ”;

  emit seek_execute (sql);

  }

  2.4 音视频同步传输技术

  i.MX51处理器包含了支持硬件视频编解码的VPU单元,并自带了完整的多媒体解决方案。因此,系统中采用其自带的多媒体软件包进行音视频流的采集和编解码[2]。

  考虑到小区内可视通话时因并发数过大而可能导致的网络拥塞情况,系统还需要提供一定的QoS机制来保证在网络带宽较低时也能达到音视频的同步传输。本文采用基于时间戳的实时同步传输技术,通过设置可变大小的缓冲区机制,根据小区网络情况自动调节传输参数,以音频质量优先保证为原则,根据时间戳实时调节视频数据的播放。具体实现过程如下[3]:

  (1)发送端采用两个独立的进程分别对音视频信息进行采样和打包,然后放到各自的缓冲队列中等待发送。

  (2)音视频数据通过同一个通道发送到网络(采用信号量机制保证音视频数据对通道的互斥访问)。

  (3)由于音视频两个数据包的长度差别很大,所以将接收端收到的数据根据包的大小进行区分。

  (4)音视频各自拆包组帧。由于人的听觉对声音的不连续比视觉对图像的不连续更敏感,所以采用音频流作为主流,视频流作为从流。客户端接收到音频数据包后,不必与视频数据包协调就可立即播放,而视频帧到达时则根据时间戳进行对比,从而进行相应的同步处理。

  (5)为保证音视频的实时同步,采用多线程分别对音频和视频进行播放。

  3 i.MX51平台移植

  3.1 搭建LTIB开发环境

  ltib(Linux Target Image Builder)是飞思卡尔公司开发的一个用于部署BSP的工具,含有U-Boot等引导加载程序,支持Bootloader和内核映像的构建。利用该工具,可以定制出符合GNU/Linux标准的跨平台的根文件系统。本设计选择使用飞思卡尔公司提供的L2.6.31_10.07.11_ER_source.tar.gz集成源码包,在一台安装了Ubuntu 10.04操作系统的PC机上配置安装LTIB[4]。其过程如下:

  (1)解压缩源码包,执行。/install进入安装LTIB的命令提示。

  (2)执行。/ltib进入LTIB的配置界面。

  (3)在LTIB配置Platform时选择i.MX51平台。

  (4)配置Kernel时选择CLAA WVGA Panel(LCD触摸屏驱动)和SoC Audio support for IMX - SGTL5000(声卡驱动),其他保持默认。

  (5)将交叉编译工具arm-none-linux-gnueabi-gcc加入PATH环境变量,在ltib根目录执行下述命令,交叉编译Qt库:

  ./ltib -m prep -p qt-embedded.spec

  ./ltib -m scbuild -p qt-embedded.spec

  (6)执行make install,在ltib下的rootfs目录就会生成相应的U-Boot、内核和文件系统,将将其复制到目标板的TF卡上。[page]

  3.2 架设NFS文件系统

  为了简化调试过程和缩短开发周期,在Linux主机上建立了NFS网络文件系统,这样就实现了宿主机与目标板的文件共享。开发过程简化为:Linux主机编译生成目标平台的可执行文件→复制文件到NFS共享目录→目标板运行程序,从而省去了重复制作镜像、下载镜像、重启开发板等步骤,节省了大量的开发时间。目标板的NFS启动信息如图3所示。

  目标板的NFS启动信息

  4 系统测试及结果

  4.1 并发测试

  并发测试主要用来测试多个用户同时访问同一个应用程序、同一个数据记录时是否存在死锁或其他问题。由于本系统是面向一个小区的住户,因此系统的并发测试尤为重要。

  数据库并发测试:室内机开启多个线程同时访问中心机服务器,界面并不会因大量的数据操作而出现“冻结”现象,CPU占用稳定,数据库返回结果显示正常。

  信息发布测试:中心机开启多个线程同时发送广播信息,各室内机接收正常,不会出现显示错误或“丢包”现象。

  4.2 跨网段测试

  考虑到小区用户一般在几百甚至上千,一个网段的IP地址不能满足需求。为了检测在不同网段下通信模块能否正常工作,使用一台华为S5300交换机(switch)和两台华为5200交换机搭建了一个小型的网络环境进行相关测试。如图4所示,测试采用IPv4静态路由,使不同网段的任意两台室内机之间能够互通。测试表明,分属不同网段的室内机之间,可视通话、信息互发等模块均正常工作,从而验证了本设计方案的可行性。

  跨网段测试组网图

  4.3 可视对讲性能测试

  可视对讲性能测试主要是检测室内机终端中音视频的采集、编解码、收发和显示。对于音视频的采集、收发和显示,可通过扬声器和LCD显示直观地检测。而对编解码的测试则比较复杂,本设计是从最长时间、最短时间和平均时间三个方面来测试编解码一帧音视频所需要消耗的时间。i.MX51平台上音视频编解码的性能测试如表1所示。

  性能测试

  由表1可以看出,i.MX51平台上能够实时地完成音频和视频通信,且音频清晰、视频流畅、失真度小,达到了可视对讲对音视频编解码器的实时性要求。

  本文采用Linux和Qt相关技术,在飞思卡尔公司i.MX51平台上设计了一种多功能的智能家居控制系统,实现了客户端与服务器的Socke通信和音视频同步传输等核心功能。下一步还需要扩展家电控制、安防控制等功能。

关键字:Linux  智能家居系统  编解码器 引用地址:基于Linux/Qt的智能家居系统设计

上一篇:ARM“进军”低功耗系统设计
下一篇:基于ARM11+Linux的无线视频监控系统

推荐阅读最新更新时间:2024-03-16 13:38

GPS模块与ARM-Linux平台数据传送研究
  本文主要研究GPS模块与ARM-Linux平台之间采用异步串行传送方式进行 数据传送 的问题,利用多线程编程技术实现GPS信号采集与处理,并介绍了一种WGS坐标向地方坐标的转换方法。与GPS通信可选的协议有很多种,目前普遍采用的是NMEA-0183通信协议。   1 NMEA-0183通信协议   NMEA-0183协议 是为了在不同的GPS导航设备中建立统一的海事无线电技术委员会(BTCM)标准,由美国国家海洋电子协会NMEA(National Marine Electronics Association)制定的通信协议,其中规定了海用和陆用GPS接收设备输出的定位位置数据、时间、卫星状态、接收机状态等信息。除NMEA-
[单片机]
GPS模块与ARM-<font color='red'>Linux</font>平台数据传送研究
嵌入式Linux NFS根文件系统的构建及研究
随着信息技术的发展,嵌入式系统技术已经广泛应用于国防、通信、工业控制、消费电子等诸多领域。其中,Linux作为一款开源、成熟且高效稳定的多任务操作系统,先天具有许多不可比拟的优势,已成为目前最具潜力的嵌入式操作系统。众所周知,构建根文件系统对于嵌入式Linux开发至关重要,它是内核启动后加载的第1个文件系统,是决定系统能否正常启动的关键所在。在开发阶段,程序往往需要反复多次的调试,鉴于此,构建基于NFS(Network File System)的根文件系统就尤为重要;这样就免去了对目标开发板的反复烧写,方便地在线对程序进行更改与调试。本文以Busybox软件为基础,介绍了一种实用的NFS根文件系统构建方法。 1 嵌入式根文件系统简
[单片机]
嵌入式<font color='red'>Linux</font> NFS根文件<font color='red'>系统</font>的构建及研究
22.Linux-RTC驱动分析及使用
    linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24xx为主,所以它的RTC驱动为rtc-s3c.c 1.进入./drivers/rtc/rtc-s3c.c     还是首先进入入口函数,如下图所示:     这里注册了一个“s3c2410-rtc”名称的平台设备驱动     而“s3c2410-rtc”的平台设备,在./arch/arm/plat-s3c24xx/dev.c里定义了,只不过这里没有注册,如下图所示:     当内核匹配到有与它名称同名的平台设备,就会调用.probe函数,接下来我们便进入s3c2410_rtcdrv- probe函
[单片机]
22.<font color='red'>Linux</font>-RTC驱动分析及使用
基于嵌入式Linux的磁场测量系统的设计
1 引言 随着科技的发展,嵌入式操作系统在越来越多的领域发挥着重要的作用,目前已成为产品技术水平的标志之一。其中Linux因为其拥有开放性、多用户、多任务、良好的用户界面、丰富的网络功能、可靠的系统安全和良好的可移植等特性被广泛的应用到仪器测量设备中。    传统的磁场测量设备(持斯拉计、高斯计)普遍存在精度低(典型测量精度为1.5%)、操作不便等缺点。本文提出一种基于嵌入式Linux的中频磁场测量系统,它不但可以满足当前磁场测量数据采集的需要,还因为其嵌入了操作系统Linux,使具有可靠性好、升级方便的特点,既提高了磁场测量的准确性,又为仪器的功能升级带来便利。可应用于实验室仪器,医疗仪器,姿态控制,安全检测等需磁场检测的领域。
[测试测量]
基于嵌入式<font color='red'>Linux</font>的磁场测量<font color='red'>系统</font>的设计
Linux发明者痛批英特尔芯片设计
据外媒报道,对于近期闹得沸沸扬扬的芯片漏洞事件,Linux OS的发明者Linus Torvalds表示有话要说了,他表示,英特尔真的需要好好地去看看他们的CPU了。在其看来,与其花力气写公关文倒不如承认他们的芯片存在缺陷。 很显然,Torvalds当谈及这些问题的时候完全不会忌讳什么。而英特尔的合作商们则在悄然采取修复行动的同时还特别提到了存在于AMD芯片和ARM构架的另一个漏洞--Spectre。确实,在科技行业中,批评向来都是比较温和的,但在Torvalds那儿却是行不通的: 或者英特尔说的是‘我们一直致力于并将一直向你们销售狗屁玩意儿,并且决定不会修复?’ 因为如果是这样的话,或许我们应当开始关注ARM64。
[半导体设计/制造]
基于Linux的串口服务器设计
随着互联网的迅猛发展,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集和控制设备也在逐步地走向网络化,以便共享网络资源。所以,在电子设备日趋网络化的今天,利用串口服务器来实现网络通信具有十分重要的意义。利用基于TCP/IP的串口数据流传输的实现来控制管理设备,无需投资大量的人力、物力即可完成对传统设备的管理、更换或者升级。 串口服务器的功能 串口服务器是一种通信协议转换器,它设有两类通信端口:一类是标准的RS232/422/485格式的串行端口,远程的RTU(远程终端设备)监控模块通过串行控制总线接入串口服务器的此类端口;另一类是以太网口,通过网线将串口服务器接入局域网的交换机等设备中。 串
[工业控制]
基于<font color='red'>Linux</font>的串口服务器设计
OK6410A 开发板 (八) 61 linux-5.11 OK6410A 进程通信机制1 信号
信号 异步通信机制 不可靠/可靠 信号处理方式 忽略 // SIGILL 和 SIGSTOP 不可忽略 捕捉 // SIGILL 和 SIGSTOP 不可捕获 默认 // 信号处理对每一个信号有default(不是上面的默认)处理方式 // 而用户可以修改 // 也就是说如果一个信号如果默认为忽略,但是我可以将其改为 捕捉 常见信号默认用途 ctrl-c SIGINT 终止 除0 SIGFPE 终止 无效内存引用 SIGSEGV 终止 网络带外数据到来 SIGURG 忽略 写一个读终止的管道 SIGPI
[单片机]
linux内核编译错误
内核版本:2.6.14 交叉编译器:arm-linux-gcc 4.3.3 错误: arch/arm/mm/alignment.c: In function 'proc_alignment_write': arch/arm/mm/alignment.c:119: error: read-only variable '__r2' used as 'asm' output arch/arm/mm/alignment.c:119: error: read-only variable '__r2' used as 'asm' output arch/arm/
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved