嵌入式智能家居系统的研究与设计
2019-12-05万凯
万凯
(五邑大学 智能制造学部,广东 江门 529020)
随着科技的进步,数字化和智能化的智能家居系统是未来发展的趋势[1]. 目前市场上常见的智能家居产品多以智能单品出现,如智能音箱、智能门锁、智能家电等. 系统化的智能家居产品因成本较高,难以在市场上大规模推广. 无线方案中的嵌入式智能家居系统多使用 WIFI 技术和 ZigBee技术的通信方案,虽然设备间通过WiFi 连接路由器比较方便,但是WiFi 连接的设备功耗相对较大,且多个设备之间存在相互干扰,想要取得稳定可靠的体验,对路由器的要求较高,同时也不能满足节能环保的要求. 因此,本文使用ZigBee 技术作为传感器数据的通讯方式. 另外,由于家庭控制中心需要24 小时不间断工作,家用PC 机不适宜作为控制中心. 本文使用嵌入式设备作为家庭内部控制中心,云服务器作为外部服务端,设计上同时兼顾内部控制的及时性和外部服务的跨地域特点,以期在系统功耗、成本控制和用户体验上有所提高.
1 系统结构设计
本文设计的智能家居监控系统,由嵌入式Linux 智能家居主机、Zigbee 协调器、云服务器和智能家居客户端软件组成. 系统使用嵌入式 Linux 主机和云服务器实现主副中心结构,分别为家庭内用户和外出用户提供服务,满足用户在任意位置都可以连接智能家居主机的要求. 同时,嵌入式linux主机作为家庭内部主控制中心,数据不需要经过外部网络传输,对危险信号的处理速度有很大提升,同时考虑外网出现延时或者故障时,内部网络不受到影响,系统保持正常运转. 系统采用ZigBee 技术代替传统的有线连接和 WiFi 连接,通过无线网络传输实现对家居环境信息的获取和家用电器的远端控制,具有安装方便、易维护、低功耗、便于扩展等优点.
本系统以智能家居网关为核心,一方面通过ZigBee 协调器连接底层无线传感器网络,另一方面利用Internet 网络向服务器程序传输家庭内部数据,系统的整体结构如图1 所示. 智能家居传感器采集到的数据和家用电器的控制状态信息使用ZigBee 技术先传输到智能家居网关上,再经过协议转换和数据整合发送到云服务器中. 家庭成员使用安装在手机或者电脑等接入设备的客户端软件向服务器获取家庭内部数据,或通过服务器向家庭内部设备发送控制命令. 系统硬件设备包括无线传感网节点设备、智能网关设备,服务器端使用云服务器. 其中无线传感器网络设备包括ZigBee 协调器节点和ZigBee 传感器终端节点.
图1 智能家居系统整体结构
2 系统硬件设计
智能网关使用讯为公司生产的ITOP4412 主板,该主板主控芯片是三星公司Cortex-A9 架构的嵌入式处理器 Exynos4412. 该处理器采用了32 nm 的制作工艺,同时配合动态电压管理和内核调节技术,功耗控制非常出色. 另外,处理器使用ARMv7 指令集,单核主频可达1.4 GHz,并且是4 核处理器[3],计算处理能力强大,适合作为智能家居系统中的控制中心. 该处理器可以运行Linux 系统,配备7 寸触摸屏,交互体验有极大提高. 基于以上优点,本文使用了Exynos4412 作为智能家居控制中心的处理器. 另外本系统中在芯片的外围配置了USB 接口,RJ45 网口等通讯接口. 为了方便连接,ZigBee 协调器与智能网关是通过USB 线进行连接的,在协调器上使用了FT232 芯片负责USB 转串口的工作.
ZigBee 节点采用德州仪器设备公司的 CC2530 无线收发芯片. 该芯片不仅可以负责 ZigBee 通讯,还可以作为 8 位单片机使用,拥有大量的外设接口,支持中断、PWM、ADC 等多种功能,满足了传感器设备的连接需求,适合作为本系统中传感器节点的控制器芯片. ZigBee 终端节点由无线收发模块、传感器和控制模块组成. 系统还配备了温湿度感应、人体红外感应、光线强度感应和危险气体检测等传感器设备. ZigBee 无线传感器网络部分的实物连接情况如图2 所示.
图2 ZigBee 无线传感器网络实物连接图
3 系统软件设计
智能家居系统的软件设计包括 4 个部分:无线传感器网络中 ZigBee 协议的移植;智能网关系统裁剪和移植;智能网关设备中的数据处理和向服务器发送数据程序;以及远程服务器端和客户端应用程序设计.
首先移植 ZigBee 协议栈 Z-Stack 到无线传感器,并在协议栈的基础上添加传感器数据采集驱动程序. 然后在节点程序中添加串口通信程序和数据转发程序. ZigBee 协调器节点负责连接家庭内部网络,对各个终端节点入网进行验证[4]. 在节点入网成功后,各节点周期性向协调器发送数据以保证数据的实时性. ZigBee 路由器节点的事件处理流程如图 3 所示.
在数据采集频率的控制方式中,传统的方式是定时上报和控制端主动请求. 对于普通家庭环境信息例如温湿度、光照等对实时性要求不高的数据来说,处理好定时上报的时间间隔和系统功耗就能够满足用户对智能家居的期望. 针对危险信息,本文设计了由中断触发任务,终端收到信号后立即上传危险数据,由控制中心根据危险数据种类,分别采取相应的措施. 当收到气体传感器的信号时,控制中心立刻发出关闭天然气阀门的命令和打开窗户命令进行室内通风,并通知用户危险情况和处理结果. 当收到人体红外检测传感器的信号时,控制中心发出报警声并通知用户. 危险信号的上传和处理通过这种方式将缩短消耗在定时器轮询上的时间,同时还减少了数据发送到服务器并返回的时间.
图3 ZigBee 节点程序流程
为了便于智能家居网关和ZigBee 无线传感器网络通信格式统一,本系统设计了通用数据传输协议,具体数据帧格式如表 1 所示. 设备地址 ADDR 为终端节点设备的网络短地址,是由 ZigBee 网络协调器在节点入网时分配. 通信数据分为传感器上传环境信息数据和网关下发对家用电器的控制命令数据,数据类型的区分是用功能码来实现的. 数据位的长度由终端节点上的传感器类型和数量来决定的. 节点在入网成功后首先会发送一条包含传感器类型的数据帧到上层控制中心,之后轮询发送传感器数据至控制中心. 本文采用传感器类型数据和采集数据分开传送的方式,即使数据帧被截获也无法解析响应的传感器数据,提高了数据传输的安全性.
表1 ZigBee 协议通信数据帧结构组成
智能网关程序首先要解决的是嵌入式系统移植的问题. 目前常用的嵌入式系统有 WinCE、Linux、Android 等[5]. 虽然 Android 系统有着更好的人机交互界面,但是从运行方式理解,Android系统是在Linux 系统基础上运行了虚拟机的大型应用系统,因此本系统采用了嵌入式Linux 系统. 系统采用了开源的 U-Boot 软件作为开机上电后的 BootLoader 引导程序. U-Boot 运行在系统内核启动之前的阶段,主要负责硬件的初始化,以及向内核传递参数和引导内核启动. Linux 系统内核使用了3.0.15 版本,并在该版本的基础上使用menuconfig 配置工具针对当前主板进行了内核的裁剪和移植,配置了触摸屏、网卡、USB 转串口等驱动模块. 系统的协调器和网关舍弃传统的串口线而采用USB线连接,提升了整体的美观程度,只需要在Linux 系统内核添加USB 转串口芯片FT232 的驱动程序即可. 文件系统选择使用BusyBox 工具制作最小根文件系统,并移植Qt4.7 版本作为应用层库文件,负责系统界面交互的操作. Qt 库文件相对Android 系统占用更少的资源,在交互体验感上几乎不受影响,并且 Qt 作为跨平台编程语言,代码重用性很好,减少了系统开发中的重复工作,提升了开发效率.
智能网关应用程序是整个智能家居系统中的关键部分,具有承上启下的重要作用. 现有的系统程序设计侧重连接的实现,而缺乏人性化的应用服务. 本文在系统设计中采用多线程的编程技术,分别处理串口通信、控制中心与云服务器通信、本地服务、界面显示等功能. 通过使用多线程的编程技术,它可以把ZigBee 网络数据、服务器通信数据、界面更新分开处理,且多个线程可同时运行,提高了系统的运行效率和稳定性. 智能网关与云服务器通信是通过Socket 来实现的,系统在网关和云服务器之间建立长连接,并通过心跳包的方式维持连接状态[6]. 在系统工作的主程序中,网关服务器不断地检测来自设备终端和来自用户终端的连接请求,当从任一端收到请求命令时,服务器被激活并创建一个子进程与发送请求端通信,直到通信结束服务器方才结束该进程,而主程序返回继续检测来自其他终端的连接请求. 智能网关的主界面如图4 所示.
图4 智能网关主界面
4 系统稳定性测试
考虑实际情况,系统需要在无人看管的情况下24小时不间断工作,因此,系统的稳定性显得尤为重要.
测试方案为:在无人照料模式下运行 3 天,将传感器节点部署到不同房间,节点间距尽量与二房一厅居室环境一致,保持系统正常运行状态,统计系统接收到终端上传环境信息报文的情况. 测试结果如表2 所示.
测试结果表明,系统运行3 天,偶尔有数据丢包现象,但在可接受范围内. 而且丢包率没有随着系统运行时间增长而变大,证明丢包率与系统运行时间长短无关.
表2 系统稳定性测试结果
5 结语
本文提出的嵌入式智能家居系统经实测完全满足设计要求. 由于采用ZigBee 无线传感器网络通讯,具有灵活增减前端传感控制点和便于安装的特点. 智能网关使用多线程技术,保证了前端多点大量的传感数据以及控制指令处理的顺畅和实时性. 整个系统选用的器件技术成熟通用,成本低.系统规模的扩展和裁剪灵活方便,满足一般家居要求.