,,
(福建工程学院 福建省工业集成自动化行业技术开发基地,福建 福州 350118)
当前,智能家居产品的规范不统一,不同功能的产品由于需求不同会有不同的标准,相同功能的产品由于厂家的不同会有不同的规范,而且这些大的厂家为了在市场竞争中保持地位,始终坚持自己的协议标准,导致智能家居设备之间难以互联。这样一来,这些智能家居设备在一个家庭中宛如一座座信息孤岛,相互之间没有联系,反而带来使用的不便,针对这一现象,研究人员提出了智能家居网关的概念。
Gwang Jun Kim和Chang Soo Jang设计了智能家居系统的应用网关,应用ARM处理器进行基于3G和ZigBee的智能家居网关设计,可使接入系统的智能设备进行重构[1]。Qing-hua Wang等人用Cortex-M3 设计了支持多种协议的无线传感网络(WSN)网关,网关支持ZigBee、以太网和GPRS等协议[2]。孙润提出了一种基于WiFi智能家居的网关,其在基于Cortex-M3硬件平台和uC/OS-II操作系统上,使用传输层协议TCP、UDP,实现用户通过以太网接入系统,并结合了红外控制和ZigBee组网[3]。朱迪奇提出一种物联网智能家居网关设计方案,在ZigBee协议的基础上设计了智能家居应用框架和应用编程接口,实现网关服务应用和网关客户端[4]。这些研究几乎都是针对ZigBee网络或者其他WSN网络,网关的数据交互只限于文本数据和控制信令,缺少对媒体流的支持,不能满足智能家居系统通信的发展。
针对智能家居环境的需求,本文设计一种基于SIP的智能家居网关,满足了家庭网络对媒体流传输的需求,实现了向家庭外部网络提供统一的交互机制,对家庭内部网络集成了ZigBee通信和WiFi通信,还提供了语音控制功能。
SIP是由IETF提出的,为了创建、修改和终止点对点或者多方参与的多媒体会话的应用层控制协议,已成为NGN的核心协议之一和3rd Generation Partnership Project的移动通信系统多媒体域的控制协议[5]。SIP采用基于文本的编码形式,继承于HTTP和SMTP,它不是一个垂直集成的通讯协议,更像是一个开发框架,通过模块化的方式与多种协议或模块进行组合形成一个完整的多媒体流传输架构,就是这种极强的扩展性使得开发者在基于SIP上开发了许多功能不同的应用[6]。另外,SIP是一个位于应用层的协议,不干涉下层协议,它只管理会话而不定义会话类型,所以它能传输任何类型的数据流,而不仅限于多媒体流[7]。根据SIP网络对于SIP实体的定义,可以将SIP网络分为用户代理(SIP UA)和SIP网络服务器,用户代理是构成SIP通信的终端,SIP网络服务器负责提供路由、注册、重定向等服务[8]。
基于此,文献[9-10]对SIP在智能家居网关中的应用进行了研究,其以网关作为SIP服务器,智能家居设备作为SIP UA的方法来实现网关功能。但该方法要求在每个智能家居设备中都需要结合SIP协议。以目前智能家居的发展现状是很难满足这一要求的,而且作为智能家居网关的嵌入式设备,其硬件资源有限,若作为SIP服务器就很难向着更大的智能家居联网方向发展。因此,本文的设计方案改进了SIP在智能家居网关中的应用方法,将设计的智能家居网关作为SIP网络实体中的SIP UA,这样既不需要智能家居设备支持SIP通信,又将SIP服务器架设在云端,满足未来智能社区大联网的发展趋势。
智能家居网关采用嵌入式系统和模块化思维进行设计,以主处理器作为核心,配合ZigBee模块、WiFi模块和语音识别模块构成。图1是本智能家居网关总体设计结构图。
图1 智能家居网关总体设计结构图Fig.1 Overall design structure of smart home gateway
主处理器在硬件层面以S3C6410为处理芯片,在板集成电源模块、256M DDR内存、1GB Nand Flash、SDIO接口、4个UART接口、DM9000以太网接口和多种总线接口;在软件层面基于嵌入式Linux系统,移植开源的SIP协议栈PJSIP,基于PJSIP设计开发一个SIP UA应用,通过TCP服务器来实现与WiFi设备的数据通信,另外开发QT GUI程序来显示智能家居设备上传数据和操控管理智能家居设备。
ZigBee模块在网关中的作用表现为ZigBee协调器,它负责与所有使用ZigBee通信的智能家居设备组网,将设备传输过来的数据通过串口等形式传输给处理器,同时将处理器发送的控制命令通过编码后发送给相应的设备。
WiFi模块在网关中的作用表现为WiFi AP点,其功能与ZigBee模块相似,就不再赘述,只是其对象为使用WiFi通信的智能家居设备。
语音识别模块是以外载嵌入式扩展语音识别芯片设计实现的,其首先对非特定人声进行采集与处理,然后比较得出识别结果并生成对应的控制信号,最后通过串口将控制信号发送给主处理器。
首先通过比较几种常用的SIP协议栈,选取最适合嵌入式运行和SIP UA开发的开源协议栈PJSIP,然后通过配置编译将协议栈移植到网关中,值得注意的是,为了使网关支持媒体流的传输需在移植PJSIP之前,在网关中安装ALSA开发环境,最后进行智能家居网关的SIP UA应用设计。
本设计的SIP UA工作流程为:首先在UA启动时创建PJSUA和初始化PJSIP协议栈,然后对用户进行注册,并开放监听端口,让终端进入等待状态,等待用户连接或者主动发起会话,会话建立后UA作为本方的会话管理者为通信提供支持,待通信结束后关闭会话,UA将恢复到等待状态。最后,当不需要SIP服务时,退出PJSUA并关闭端口。图2是SIP UA工作流程图。
图2 SIP UA工作流程图Fig.2 Work flow chart of SIP UA
将整个UA的工作流程分为3个模块设计,分别是创建和初始化模块、注册模块和会话管理模块。
创建和初始化模块在app_init()函数中实现,首先创建一个pjsua,然后对其参数进行初始化,接着设置回调函数,回调函数在SIP会话状态发生改变时被调用,用来实现SIP功能,再创建pjsua通道,最后启动这个pjsua。其中,初始化参数必须要应用程序运行之前设置,否则将造成协议栈无法正常启动和运行。
注册模块的功能是向SIP注册服务器发送注册申请,只有已注册的UA才能在SIP网络中被发现。通过app_cfg结构体对UA的URI、域名、密码等属性进行设置,完成后调用pjsua_acc_add()向服务器申请注册,成功返回PJ_SUCCESS。
会话管理模块通过SIP信令实现对通信的管理。具体可分为SIP信令解析、SIP事务状态机和SDP协商机制。
SIP信令解析是按照SIP消息编码格式的顺序依次对SIP消息、URI和头字段进行解析,首先SIP消息解析通过调用pjsip_find_msg()函数对缓存buf中的数据包的合法性进行检测,通过后调用pjsip_parse_msg()将数据包解析为SIP消息,紧接着URI解析通过pjsip_parse_uri()来提取消息中包含的对端URI地址,最后通过hdr()或者headers()对头字段进行解析,hdr()是以行形式依次解析而headers()则是对多个头字段同时进行解析。
在SIP事务状态机中定义了事务类型、传输类型、定时器、事务状态及其处理函数等。在UA初始化的过程中,其创建了服务器事务和客户机事务,服务器事务用作改变会话事务状态,客户机事务用作发送请求和应答。
SDP协商机制负责两端SIP UA的通信能力协商。该机制通过5种状态的转换来实现,初始状态为NULL,当发送本地SDP描述时,状态变为LOCAL_OFFER,发送成功后进入WAIT NEGO状态,接收到对端的SDP描述时进入NEGOTIATING状态,此时双方协商使用双方都支持的形式进行通信,协商完成进入到DONE。若要会话中修改通信能力则从DONE状态变为LOCAL_OFFER状态,开始新一轮的协商。
本设计智能家居网关的关键模块包括ZigBee模块、WiFi模块和语音识别模块。
网关中的ZigBee模块以协调器的形式存在,设计采用基于IEEE802.15.4标准的无线收发芯片CC2530,其具有运行稳定、穿透性强和价格低廉的等特点。协调器的工作流程图设计如图3,其中组网工作由Z-Stack协议栈完成,在协议栈的APP层实现网关功能,分别有初始化、数据上传和命令下达。初始化包括对连接网关处理器串口的初始化和将通讯模式设置为点播;数据上传是在协调器接收到由终端节点传输过来的数据后,首先调用接收函数向消息列队提取数据,然后根据事件号判断并调用消息处理函数SampleApp_MessageMSGCB(),最后在通过调用HalUARTWrite()将数据发送给网关处理器;命令下达是网关处理器通过串口将控制命令发送给协调器,协调器利用event函数和串口定时器来判断是否有命令下达,如果存在且命令格式符合要求将通过AF_DataRequest()函数将命令发送给终端节点。
图3 ZigBee协调器工作流程图Fig. 3 Work flow chart of ZigBee coordinator
网关中的WiFi模块以AP点的形式存在,设计采用ESP8266作为WiFi芯片,其体积小、功耗低且很少出现丢包现象。ESP8266官方提供基于AT指令的rom,因此在程序中通过输出AT指令来实现AP点的启用与管理。首先通过AT+CWMODE=3将模块配置为AP+Station模式,返回成功后重启设备,然后由AT+CWSAP=指令来设置AP点名称、密码、加密方式和通道号,ESP8266作为slave存在于网关中,不需要进行数据处理,因此,最后通过AT+CIPMODE=1将传输模式设置为透传。
语音识别模块设计采用由ICRoute公司推出的LD3320作为语音识别芯片。该模块首先对通过MIC采集到的声音进行频谱分析并提取出声音的特征,然后将特征值保存到内部存储器中等待MCU的调用,最后通过执行程序来对比内部存储器的语音信号与关键词列表的语音信号,将相似度最高的数据传输给网关主处理器,由它将识别生成的命令转发给终端设备。
为了对设计的网关进行功能测试,本文设计了4个装有温湿度传感器和LED灯的终端用来模拟智能家居设备,其中两个终端通过ZigBee与网关通信,另外两个通过WiFi与网关通信,还设立一台PC作为远程用户,最终搭建的网关测试系统如图4。
图4 网关测试系统图
网关功能测试由以下几部分组成:(1)启动QT程序观察能否读取终端的温湿度数据,测试结果如图5,再依次对每个终端的开关灯按钮进行测试,发现对应终端能够成功执行指令控制LED亮灭;(2)通过PC端的SIP应用Linphone连接网关,在Linphone上再次进行第1步测试,验证远程用户通过网关监控终端的功能;(3)在网关上通过SIP应用与远程用户进行语音通话,实验中语音通话连贯且清晰验证了媒体流传输的功能,实验图如图6,图6左图为网关上的通话界面,右图为远程用户的通话界面;(4)检测语音控制功能,依次说出口令,如“客厅灯亮”“客厅灯灭”,观察对应的终端LED灯执行,经过反复试验得出10 m范围内语音控制功能的有效性达到90%以上。
图5 设备监控测试图Fig.5 Test diagram of equipment monitoring
图6 媒体流传输测试图Fig. 6 Test diagram for media stream transmission
本文主要针对智能家居网关的通信进行研究,通过分析SIP协议的特性及工作模式,改进了以往SIP协议在智能家居网关设计中的应用方法,提出在网关中开发一个SIP UA来实现家庭内部网络和外部互联网的通信。并且,在网关中集成了ZigBee和WiFi的家庭内部组网,通过设计语音识别模块来实现语音控制功能。最后,通过实验模拟智能家居环境来对本设计的智能家居网关进行测试,结果表明该设计方案具有可行性。