基于S5PV210的智能家居控制系统软件设计

时间:2022-10-20 09:38:16

基于S5PV210的智能家居控制系统软件设计

摘 要 随着信息技术的高速发展,家庭安全隐患已经日益突显,因此设计一款低成本、便捷、智能的家居控制系统成为一种必然趋势。为了迎合这种趋势,提出一种基于三星S5PV210处理器与多种传感器的智能家居控制系统的软件设计方法,它可以对室内的温度、烟雾以及红外门禁进行监控。与此同时,该系统还预留了部分支持硬件串口拓展的软件接口,以便于增强该系统的功能。除此之外,该系统还支持短信与Zigbee通信功能,当家庭有非法分子入侵时,触发红外门禁,并且启动Zigbee多点定位,运用相应的定位算法对定位信息进行处理,可以较为准确地确定非法分子在室内的位置,并且将定位信息反馈给用户。

关键词 智能家居控制系统;S5PV210;软件设计;传感器;Zigbee定位

中图分类号:TN92 文献标识码:A 文章编号:1671—7597(2013)041-042-03

随着电子、微电子、软件、通信、控制以及多媒体技术的发展,人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们的生活更加安全、舒适、便捷、智能。基于上述需求,我们迎来了智能家居的时代。

智能家居是一种以楼宇建筑为平台,利用网络通信技术、自动控制技术以及综合布线技术等实现住宅设施与家庭日常事务高效管理的集成控制系统。在国外,运用智能家居理念的著名建筑有位于日本东京的本田青山大厦、NEC办公大厦等。在中国,由于对智能家居的认知起步较晚,发展相对滞后,海尔、清华同方是现今国内为数不多的大型智能家居控制系统供应商之一。

在智能家居领域,安全是重中之重。一直以来,安全都是整个社会赖以生存与发展的基础,尤其在现代化技术高度发展的今天,犯罪手段越来越高明,潜在安全隐患越来越多,所以提升现代化安防技术就显得至关重要。

本文所述的智能家居控制系统主要包含三类监控功能:室内温度监控、室内烟雾监控以及红外门禁监控。与此同时,在软件实现上预留了串口转换硬件模块(GPRS转串口模块、Zigbee转串口模块)的接口,以便于实现硬件功能的拓展。系统的Zigbee模块不仅可以用于客户端与服务器端的通信,而且可以作为汇聚节点,将来自其它Zigbee锚节点的定位信号强度汇总,运用相应的定位算法进行处理,实现对进入室内非法分子的zigbee多点定位。

除此之外,该系统还支持软件版本查询、软件升级以及设备自检,实时采集硬件设备的使用状况(CPU频率、剩余内存、剩余闪存空间等),将相关的工作参数上报至操作与维护终端,并且可以手动配置相应参数。

1 开发环境

1)硬件开发平台。

天嵌TQ210开发板、温度传感器(DS18B20)、烟雾传感器(MQ-2)、红外传感器(D204S)、zigbee转串口模块(FBee_FZB5000+)等。

2)软件开发平台:Linux(Ubuntu_12.04)。

3)嵌入式Linux内核:Kernel_2.6.35.7。

4)根文件系统的制作工具Busybox:busybox_1.19.4。

5)辅助软件:QT4.8.1(qtcreator,qtdesigner)。

6)网络通信协议:用户数据报协议(User Datagram Protocol,UDP)。

7)网络环境:Ethernet。

8)编译器:gcc、arm-linux-gcc(4.4.6)。

9)软件调试工具:GDB。

2 系统的软件架构

智能家居控制系统的硬件组成主要包含四大部分:终端控制器、远程控制器、传感器模块以及硬件拓展模块。为了支持该系统的硬件,并且设计一个性能优良、可靠性高的软件系统,必须遵循合理的设计规范与系统架构。

图1 Linux开发环境的软件架构图

3 系统工作流程

1)服务器端:待系统上电之后,启动bootloader引导程序,初始化硬件、启动内核以及完成内存映射等;之后加载内核,初始化驱动程序,并且挂载根文件系统;待根文件系统挂载之后,初始化系统配置,挂载用户分区,启动应用程序。接下来,系统完成初始化日志与消息、创建4条线程以及创建服务器端socket通信等工作;最后,系统开启服务器端的业务流程,监控室内温度、烟雾以及红外门禁信息,并且启动信息查询与上报反馈机制。

2)客户端:首先启动客户端软件,加载主界面并且初始化界面元素信息;然后创建客户端socket通信,并且构建消息,将其传输给服务器端,等待服务器端的消息响应;最后接收来自服务器端的数据,直到服务器端线程结束,main函数返回为止。

4 具体技术实现

根据实际需要,设计基于arm体系结构的智能家居控制系统主要分为以下几个步骤。

4.1 Bootloader

Bootloader是在系统内核加载之前运行的一段精简的引导程序,它担负着硬件初始化与操作系统引导的双重职责。也就是说,我们不仅可以通过这段程序实现初始化硬件设备、建立内存空间映射以及坏块检测等功能,为系统的软硬件搭建一个良好的交互环境,而且可以将操作系统从NAND Flash等存储器中加载至RAM中,为最终运行Linux操作系统内核做准备。

Bootloader可以分为Stage1与Stage2两大部分,前者主要实现与系统硬件体系结构关联程度高的引导程序代码与板级初始化代码,通常使用汇编语言编写;后者主要实现功能更加复杂的,并且具有好的可读性与可移植性的程序代码,通常使用C语言编写。

4.2 驱动程序开发

嵌入式Linux系统的设备驱动可以分为三大类型:字符设备驱动(Character Device Driver)、块设备驱动(Block Device Driver)、网络设备驱动(Network Device Driver)。

它作为内核的一部分,主要完成以下功能:

1)设备的初始化、与设备相关系统资源的分配与回收。

2)在底层硬件与内核之间建立信息交互环境,以便于传递数据。

3)在设备与应用程序之间实现数据交互。

4)检测与处理设备出现的异常或者错误。

驱动开发的一般流程如图2所示。

图2 底层驱动的基本开发流程

除此之外,在驱动程序的开发过程中还会用到中断处理、定时器、等待队列、内存与I/O访问、Input子系统以及平台总线架构等机制。

4.3 封装接口函数,制作动态库

通过系统调用,实现面向用户态接口函数的封装,变量的封装形式采用结构体,功能的封装采用函数,使用指针传递参数。

动态库的制作很简单,只需要使用如下指令即可:

arm-linux-gcc-fpic-shared xx.c-o libxx.so-I include_path

4.4 根文件系统的制作

根文件系统的制作主要依赖于BusyBox工具。

1)首先在busybox目录下,执行make menuconfig命令配置相应的属性;然后修改busybox自带Makefile文件,将第164行与第190行分别修改成为CROSS_COMPILE?=arm-linux-与ARCH?=arm;最后顺序执行make与make install指令,根据Makefile可以得知busybox的缺省安装目录在/_install目录下。

2)在根文件系统rootfs中创建必要的目录(例如:etc、sys、proc、tmp、var、home、lib、etc、root等)。

3)库文件的部署。将一些必要的库文件与加载器拷贝到根文件系统rootfs中/lib/目录下,若不清楚库文件的存放位置,可以使用which is arm-linux-gcc进行查找;若需要查看busybox使用共享库(动态库)信息,可以使用arm-linux-readelf-d busybox与arm-linux-readelf–a app|grep“shared”命令进行查看。

4)文件系统瘦身。可以使用sudo arm-linux-strip*命令对文件进行瘦身,以便于缩小文件系统的体积,节约内存或者闪存空间。

5)添加必要的配置信息(例如:etc/inittab、etc/fstab、etc/profile、etc/init.d/rcS等)。

6)配置相应的环境,通过NFS挂载测试。

7)制作文件系统镜像。在制作文件系统镜像时,最常用的几种文件系统格式如下所示:cramfs、ramdisk、initramfs、yaffs2等。

图3 根文件系统镜像的制作流程

上述的四种文件格式也可以综合使用,本文综合它们的优点,使用cramfs(rootfs)+yaffs2(userdata)方式制作镜像文件。

4.5 运行在开发板上的监控软件的设计

1)底层硬件驱动程序的编写与修改。

2)封装用户态的接口函数,并且将其封装成为动态库(*.so)。

3)依次完成设备初始化,创建4条并行独立线程以及完善相应的线程处理函数等工作,在main()函数返回之前,必须使用pthread_join()分别等待线程的结束。

4.6 设备操作与维护软件的设计

1)完成服务器端的配套功能。

在该项目中不需要过多考虑数据安全性与完整性校验问题,因此选用UDP(用户数据报协议))的通信模式。

创建服务器端socket通信函数create_socket(),在该函数中以结构体类型指针的方式传递数据包内容,并且完成数据包接收与解析工作,判断下一步应该做出哪种类型的响应;与此同时,完成消息请求处理与反馈功能。

2)完成客户端界面设计与功能的实现。

使用Qt4.8.7进行上位机界面设计与功能实现。

①通过QtCreator与QtDesigner设计上位机的图形界面。

②创建客户端socket通信,完成信号函数与相应槽函数的匹配连接(通过QObject::connect()实现)。

③实现消息通信与处理机制。

④实现2种不同方式(串口登录与网口登录)的登录功能。

4.7 终端软件设计(支持实时性)

1)使用QtCreator与QtDesigner设计终端软件的图形界面。

2)完成相应功能(接受来自传感器与系统内部的实时信息并且将其反馈至图形界面)。

3)Qt库的移植:

①下载并且解压Qt的私有函数库与触摸屏TouchScreen的函数库;

②首先在vi环境中cd到解压之后的tslib目录下,先后执行./autogen-clean.sh与./autogen.sh脚本,然后依次执行./configure--host=arm-linux--prefix=/opt/arm/tslib、make、make install指令;

③首先在vi环境中cd到解压之后的qt-everywhere-opensource-src-4.8.4目录下,执行cp../build.sh.命令将上级文件夹中的build.sh可执行脚本文件拷贝到当前目录中,修改./mkspecs/qws/linux-arm-g++/qmake.conf文件,在arm-linux-gcc或者arm-linux-g++之后添加-lts,保存退出,然后./build.sh,接下来make,最后make install。

4)交叉编译:在Qt工程目录下,依次执行/opt/arm/qt/bin/qmake–project、/opt/arm/qt/bin/qmake、make命令。

5)Qt库的部署:构建文件系统rootfs中/etc/目录下的profile文件,在该文件中添加export QWS_KEYBOARD="TTY:/dev/event1"命令设置相应的环境变量;并且将文件夹qt与tslib拷贝到开发板rootfs指定目录下。

5 Zigbee定位算法

将采集到的Zigbee信号强度信息导入shadowing模型

(1)

其中,d为射频信号接收端与发射端自检的距离,d0为参考距离,Pr(d)为基站接收到用户节点的信号强度,Pr(d0)为基站接收到由参考点发送的信号强度。

利用(1)式可以计算出锚节点到未知节点之间的距离d,接下来建立定位模型(在100×100的试验区域内),本文采用基于三边测距的LMS格型滤波改进算法对定位信息进行处理,仿真结果如图5所示。

6 结束语

该系统基于ARM体系结构与Linux开发平台,通过三类传感器对家庭环境中的温度、烟雾以及红外门禁进行实时监控,并且可以通过Internet远程查看与设置系统的各类参数,也可以通过串口对系统功能进行拓展。与此同时,该系统支持短信与Zigbee通信功能,当家庭有非法分子入侵时,触发红外门禁,并且启动Zigbee定位,运用该定位算法可以较为准确地确定非法分子在室内的位置,并且将定位信息反馈给用户,增强了系统的功能。

该系统稳定可靠、智能化程度较高,并且具有较好的拓展性,这些优点使它具有很好的应用前景与巨大的市场潜力。

参考文献

[1]Xiong Tang,Chunxiu Xu,Muqing Wu,Jingrong Wen,“A DESIGN OF SMART-HOME STSTEM BASED ON 6LOWPAN WIRELESS SENSOR NETWORKS”[C].2012 IEEE 2nd International Conference on Cloud Computing and Intelligence Systems,2012,pp.1511-1515.

[2]王刚,夏平,陈仲滔.智能家居无线远程控制技术[J].电脑开发与应用,2008,21(3):67-69.

[3]宋玲.智能住宅安全防范系统的设计与实现[D].成都:电子科技大学,2010.

[4]杜春雷.ARM体系结构与编程[M].北京:电子工业出版社,2003.

[5]曾宝国.基于RFID的移动基站维护管理终端的研究[J].中国西部科技,2010,26(9):28-30.

[6]曹颖鹏.基于嵌入式Linux驱动程序的研究与设计[D].西安:西安电子科技大学,2010.

[7]刘长柱.基于嵌入式的提花织袜机控制器的设计[D].合肥:合肥工业大学,2009.

[8]W.Richard Stevens,Stephen A.Rago.UNIX环境高级编程[M].北京:人民邮电出版社,2006.

[9]蔡志明.精通Qt4编程[M].北京:电子工业出版社,2011.

作者简介

章文兴(1986-),男,汉族,陕西师范大学物理学与信息技术学院,硕士研究生,研究方向:无线传感器定位算法与物联网应用。

上一篇:基于校园网络的综合布线系统设计 下一篇:弭金玲:开展面向生活的教学