基于嵌入式的智能家居网关设计

2016-11-04 13:15江宁桂斌
科技视界 2016年23期
关键词:线程网关串口

江宁+桂斌

【摘 要】随着物联网技术的发展,智能家居已经悄然走进了千家万户。而在这些繁杂的系统中为了实现异地控制与监测,网关模块是必不可少的。本文正是根据这种需求提出了一种基于嵌入式Linux+QT的,使用433MHz作为通信媒介的一种智能家居网关设计。从而能够实现对智能家居子节点的协调、控制以及将它们接入互联网实现远程控制与监控等功能。

【关键词】物联网;嵌入式;433MHz通信;QT

0 概述

智能家居(英文:smart home, home automation)是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。

目前常见的智能家居网关产品有的直接采用微机系统,使用其他系统的产品也多采用基于wifi的通信手段并且软件定制化很强。因此,导致的结果是功耗较高、可容纳子节点较少、添加子节点后系统升级麻烦。本文正是为了解决这些缺点,提出一种可能的解决方案。

本文使用ARM核心板作为基础,配合433MHz无线收发模块设计了一个智能网关。该系统包含智能网关1个和用于与之测试通信的子节点若干。

1 硬件设计

1.1 硬件总设计

本系统包含智能网关1个和用于与之测试通信的子节点若干。在网关上应当配有方便人机交互的装置,例如触摸屏,同时应当能够接入到互联网,具有网卡控制器。对于节点而言,并不是本文讨论的重点,但是其应该具备一定的传感器或控制器,然后通过微处理器将传感器数据转换成特定格式的数据帧由无线通信模块发出与网关通信或者将接收到的数据根据相关逻辑驱动控制器动作。

而无线通信模块的选取必须避免人们日益宽敞的家居面积以及钢筋墙壁所带来的通信盲区。同时,由于设备24小时工作,其空闲功耗必须较低。而对于环境数据以及控制信号其数据量却并不大。为了满足上述需求,本文选取国产汇承HC-21 433MHz通信模块作为无线传输介质。其空闲电流小于1mA,而通信距离则可大于600m,并具有良好的穿墙能力。弥补了传统智能家居使用wifi带来的高功耗及穿墙能力不足,也避免了zigbee复杂的布设过程。

1.2 网关硬件设计

通过分析既定的需求,该系统必须能够流畅的执行多任务,因为至少有433MHz数据通信和网络请求处理两个繁重的任务需要不断执行。而且,最为整个家庭控制的核心,还需要有人机交互的友好界面,如果使用时下流行的LCD触摸屏对于系统的性能是有较高的用途的。因此综合上述分析,本文选取Banana pi开发板作为网关的核心。

本开发板拥有一颗Cortex-A7 双核核心以及1GB内存板载有线+无线网卡并且留有LVDS触摸屏接口。能够满足多任务并发同时CPU内置的显卡能够处理一般的人机交互界面。

1.3 子节点硬件设计

子节点负责对相关监测量进行采集或响应网关发来的指令控制相应的控制器动作,而这种工作状态具有实时性和突发性。因此,子节点需要有一定的逻辑处理能力,较好的I/O性能以及较低的功耗。

本系统选取温湿度采集和调光灯这两个常见的功能作为节点功能以供测试网关的功能。为了满足上述需求采用STM32F103C8T6作为控制核心,其具有Cortex M3的内核并且支持休眠模式。

2 软件设计

2.1 软件总设计

本系统软件部分除了提供有好的用户UI和实现网络控制的框架外。需要解决2个根本矛盾:互斥资源排他性访问、并发性与433MHz通信慢速的矛盾。对于矛盾1不能简单使用P-V操作来完成,因为家居操作具有明显的顺序性对于嵌入式系统利用这点这将节省大量硬件开销;针对矛盾2为了节省成本也不能采用增加收发器的方式来增加速率。

综上,本系统提出以下软件结构来解决这些问题。

2.2 串口驱动层

这是由一系列类组成的软件模块,主要功能是向下连接操作系统API操纵串口,向上封装操作,将初始化、写、读等操作进行封装方便上层调用。串口驱动最主要要解决的是读取问题,由于Linux不支持事件驱动读取方式。故提出解决方案,创建守护进程监视串口,有数据来就启动软件定时器每次定时器到期就查看串口缓冲数据有没有增加,有则在启动一次定时器周期,若无则向轮询接收线程发送一信号,同步阻塞接收线程收到信号后返回缓冲区全部字节。

由于串口访问排他性,为了避免程序中错误的多次实例化需要将该类设为单例模式。同时,继续向上封装数据操作方法,并防止程序在多个线程内重复访问串口,在这些方法中均使用了互斥锁。

2.3 HTTP监听程序

HTTPListener类对TCP连接进行监听,然后解析Http数据包,并且将连接存入连接池。基于线程类QThread派生出HttpConnectionHandle和 HttpQuestHandler子类进行Http数据包的处理。最终QuestHandler继承HttpQuestHandler并重写虚函数Service实现获取请求内容。然后反序列化请求内容交由串行化调度器完成任务,期间阻塞本线程直到任务完成向客户端发回响应。若完成时间过长,则停止阻塞返回超时错误。

2.4 脱机寄存器

为了解决无线信道并发的冲突,本系统使用串行化调度器。但是实际应用中大多数时间信道是闲置的,仅当例如用户下达某一操作时信道将同时发生多个原子操作从而降低通信效率,433MHz的低速率特点将加剧这一现象。

因此,本系统采用脱机寄存器,将硬件控制位抽象到网关作为缓冲。从而解决了极低速通信与高并发之间的矛盾,而且增加了数据吞吐率和信道利用率。

2.5 串行化调度器和任务队列

串口的使用具有互斥性,虽然Linux底层对此有排他性访问限制,但是一次串口操作并不能满足一个逻辑功能。为了实现原子操作,解决方案有二:一是,剖析Linux底层代码,将这些特殊功能写入驱动,将串口进一步逻辑化,编写自己的设备。为了降低开发精力,故选择第二种方案,即在应用层人为调度这些任务。

首先为原子操作建立基类,然后添加到任务队列中,最后串行化调度器依照优先级取出这些操作,通过统一抽象入口函数进行处理。其工作流程如图3所示。

2.6 其他模块

UI采用派生自QWidget的丰富控件库构建,然后设置对应的槽接收来定时器的信号进行周期性更新。同时定时器也负责周期性更新离线寄存器的值。

最后网页服务采用Nginx服务器,其小巧、占用资源少、并发性好特别适合本系统。客户端采用HTML5+Ajax给用户提供美观、便利的界面。

3 小结

智能家居的发展体现出了人们追求高质量生活的趋势。而其中智能网关的发展程度充分体现出整个智能家居的发展程度。如今许多产品多在智能家居中扮演子节点,而多家产品又难以统一连接,加之网关标准的缺失使得其偏离了物联网的主旨。而本系统的提出正好解决了这个问题,在种种近距无线离通信技术不成熟的今天通过充分利用嵌入式系统的资源和对软件的合理设计完全可能设计出又“快”又“好”的智能系统。正如本文使用的433MHz模块,其优点不言而喻,若是用软件手段规避其超低速的缺点它依旧能够和主流技术抗衡。

因此,在通用型嵌入式硬件性能过剩的今天,如何合理组织软件系统利用现有硬件条件构建起完整的智能家居系统将是一个重要课题。

[责任编辑:许丽]

猜你喜欢
线程网关串口
浅谈AB PLC串口跟RFID传感器的通讯应用
浅谈linux多线程协作
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
应对气候变化需要打通“网关”
基于并行控制的FPGA多串口拓展实现
一种实时高效的伺服控制网关设计
基于Zigbee与TCP的物联网网关设计
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究