洪岚 王佳斌
【摘要】 随着物联网技术突飞猛进的发展,智能控制和无线传感领域正在发生着一场重大的技术变革,智能家居系统的出现就是物联网技术的典型应用。而智能网关作为整个智能家居系统的核心,实现了无线传感网络和互联网、移动网络的融合,完成不同类型的网络协议的转换,为远程监控和管理提供了桥梁。本文先介绍了目前通用的智能家居系统及其智能网关的硬件结构,随后着重介绍了智能网关的软件设计方案,使得网关可以实现与协调器的串口通信,以及网关和用户手持终端的通信。由于嵌入式Linux的可靠性较高且稳定性较好,因此网关的软件设计采用嵌入式Linux来实现。
【关键词】 智能网关 嵌入式Linux Zigbee
引言:近年来,随着科技的不断发展,信息化建设越来越广泛地应用在日常生活中。智能家居系统的出现,满足了人们对现代生活更简便更快捷的要求。通用的智能家居系统的主要功能是能够实现用户能远程地控制家中的家电设备并监控家里环境等,智能网关则是人和家中设备通信的一个桥梁,是智能家居系统中最重要的控制单元。一方面,智能网关通过zigbee与系统中的所有设备进行无线通信,读取数据,并发送指令。另一方面,智能网关通过TCP/IP等网络协议连接到网络中,方便人们对其进行访问和读取。由于接口的不同,通信方式存在差异,因此智能网关要完成不同设备之间的信息和数据交换的任务。智能网关的实现主要有电脑和嵌入式系统两种方式,其中嵌入式系统具有体积小巧,成本低廉,可靠性高,稳定性好、功耗小等优点,更能符合智能家居系统中智能网关的性能要求,因此,本文采用嵌入式的Linux来进行智能网关的软件设计。
一、智能家居系统的主要结构组成
在一个通用的智能家居系统中,主要是根据用户的需求来设置智能节点,通常包含门禁系统,视频监控,家用电器,数据采集等。智能家居系统主要包括终端节点、智能网关和上机位系统等三个部分,智能网关是统一管理终端节点的控制设备。如图1所示。
智能家居系统中终端节点主要有家用电器,水表电表,门禁节点,视频监控,防盗报警等等,这些设备通过Zigbee网络与智能网关进行通信,并把数据转输到网关中进行解析,智能网关把解析后的数据通过以太网传输到用户的手中,从而实现用户对末端节点的监测和控制。
二、网关的硬件结构
智能网关主要板载嵌入式处理器,Zigbee网关协调器,天线,串口,以太网接口等模块。
1、网关采用三星公司主流Cortex-A8嵌入式处理器,该处理器是采用的芯片是Samsung S5PV210,S5PV210采用了ARM CortexTM-A8内核,ARM V7指令集,主频可达1GHZ,64/32位内部总线结构,32/32KB的数据/指令一级缓存,512KB的二级缓存,可以实现2000DMIPS(每秒运算20亿条指令集)的高性能运算能力。其该处理器支持TCP/ IP协议,安卓软件和Zigbee等应用。。
2、Zigbee网关协调器是采用德州仪器设备公司主流CC2530无线收发芯片组成智能网关协调器,它作为ZigBee网络的协调器,负责家庭内网络的建立,对各个终端节点的入网加以验证。Zigbee发收模块部分,是将接收到的无线Zigbee信号通过串行通信的方式传送到处理器芯片,另一个面,处理器发送数据的时候,也是通过串行通信的方式,将数据传送到Zigbee收发模块,然后模块将数据以Zigbee协议进行发送。其采用的无线协议是zigbee2007。
3、网关通过外扩LAN9220网卡芯片和RJ-45的水晶头来实现联网功能。LAN9220集成了以太网的MAC和PHY,符合IEEE802.3/802.3u标准,支持全双工和半双工的模式,能够自动生成并检查32位的CRC,其引脚数少且体积小巧,适用于小型系统设计。
三、嵌入式Linux网关的软件设计
由于智能网关要处理的数据量比较大,不同设备之间的协议转换复杂,因此软件设计考虑采用多线程的编程技术。多线程的编程技术优点在它可以把上行数据和下行数据分开处理,且两个线程可同时运行,节省了运行时间。这样既充分发挥嵌入式Linux网关的网络性能,又能获得最大的通讯效率和稳定性[1]。网关的网络编程是通过Socket接口来实现的,系统在网关和上机之间建立了一个面向连接的服务,使网关用无线或者有线的方式和上位机进行通信。在系统工作的主程序中,网关服务器不断地检测来自设备终端和来自用户终端的连接请求,当从任一端收到请求命令时,服务器被激活并创建一个子进程与发送请求端通信,直到通信结束服务器方才结束该进程,而主程序返回继续检测来自其他终端的连接请求。智能网关软件设计主流程图如下图所示:
3.1 网关数据库的选择
嵌入式系统可用的数据库是很多种,本文选用SQLite数据库, SQLite是一种开源数据库,免费使用,功能完善,体积小巧,具有可自由授权,可移植且有多种API接口等特点[2]。首先把SQLite源码移植到网关平台上,然后在SQLite中创建一个用户终端信息表和一个设备终端信息表。用户终端信息表主要存储用户终端的信息,包括用户名和密码等。设备终端信息表主要记录设备终端的状态,从ZigBee 协调器发来的数据经解析后存在这张表中。
3.2 创建网关的多线程
在嵌入式Linux系统中,创建一个进程必须分配给它独立的地址空间,同时还要建立从多的数据表,而创建一个线程,可以共享相同的地址空间和很多数据,节约了运行时间。但时在创建线程时必须考虑到其执行的先后顺序,这样线程运行时才不会冲突[3]。在Lunux中,线程的创建要遵循POSIX线程接口,称为pthread。在编写程序时要先要调用pthread.h做为头文件,然后使用函数pthread_create来创建一个线程。在线程结束时,通过函数pthread_ exit来结束一个线程,并返回相关参数。
3.3 与串口RS-232的通信
RS-232是工业设备中常用的一种串口,由于其通讯简单,连线少而被定义为标准接口。嵌入式 Linux网关调用串口进行通信的基本流程为打開串口,初始化串口,读写串口,关闭串口。串口初始化包括串口选择、波特率设置、数据位数选择、校验码选择、停止位设置等。
3.4 网关服务器的socket编程
Socket(套接字)是两组网络数据实现双向通信并进行数据交换的一个端口,主要是描述IP地址和端口。Socket可看成是在网络应用层和传输层之间的一个虚拟层,当成一个接口以供不同程序的调用,以实现网络进程之间的双向通信。网络的Socket数据传输是一种特殊的I/O,因此Socket也是一种文件描述符,常用的有以下三种类型:流式Socket、数据报Socket和原始Socket[4]。本文所采用的是流式Socket编程技术,对客户端而言,智能网关相当于Socket的服务器。
四、结语
本系统的中软件设计,可以实现智能网关的功能,一方面可以读取终端节点的数据,另一方面可以通过Internet与电脑或手机通信,使人们可以方便地通过手机、平板电脑等设备与智能家居系统进行通信,远程读取信息,远程控制系统中的终端设备。但是智能家居系统是非常复杂且庞大的,涉及到的技术领域广泛,在设计网关的过程中,发现网关还有许多地方需要改善,比如网关的功能还比较单一,接口较少,在未来的研究工作中,还应多拓展网关的功能接口。另外,网关的系统安全性能还有完善,提高网关的安全性会使大大增加用户的满意度。
参 考 文 献
[1]吴晟,苏庆堂,罗斌等,基于Soctet和多线程技术的并发服务器的研究[J].昆明理工大学学报(理工版),2006,4:6-9.
[2]王京谦,万莅新,开源嵌入式数据库Berkeley DBt SQLlite的比较[J]。单片机与嵌入式系统应用.2005(2):5-7
[3] StevensW.R, Rago S A, Advanced Programming in the UNIX Environment(Second Edition),[M].London: Pearson Education, 2013.154-155
[4]文全刚,嵌入式Linux操作系统原理与应用[M]。北京:北京航空航天大学出版社,2011(3). 79-83