基于树莓派的智能家居设计与实现①
2019-08-22张美平吴德平王灿杰谢玮铭
张美平, 吴德平, 王灿杰, 谢玮铭
1(福建师范大学 数学与信息学院,福州 350117)
2(福建省网络安全与密码技术重点实验室,福州 350007)
引言
近几年,随着物联网技术的快速发展,智能生活的理念越来越被大多数人接受,相关技术应用至各个行业的各个方面. 现如今,智能感知认知、多模态人机交互、云计算等智能化技术不断成熟,为智能家居的发展提供了坚实的发展基础.
由于中国现阶段的家庭大多数未能实现智能化,如何以低成本、高效率地智能化是物联网行业需要考虑的问题,所以在众多种类的设备中,树莓派的关注度逐渐提升. 国内对于智能家居的研究也已经开展起来.陈必东[1]等人通过将树莓派与UNO等开源组件结合的方式,对智能家居雏形系统进行了深入的探索与研究; 郝林炜[2]等人提出了一种以树莓派与云服务器的网络监控及智能家居控制系统的研究与实际应用,该远程实时监控以及远程家居控制系统不论是从成本上,还是从其功能上都具有相当大的优势,同时还能给用户带来良好的用户体验.
随着树莓派的火热发展,基于树莓派的物联网ZigBee网关的设计[3,4]也层出不穷,但大多数的树莓派网关的设计停留在数据传递的功能应用层面,树莓派的优势没有得到明显的体现. 且在机器人应用技术的推动下,国内各大企业都开启了对智能家居系统的开发. 但国内市面上的智能家居平台众多,架构复杂,功耗较大,且其交互方式较为单一.
针对以上的问题,本文阐述设计一套基于树莓派(raspberry pi)智能家居系统,该系统包含了图像识别、数据采集、AI语音对话、视频监控、语音控制、语音日志等功能. 用户可通过语音、手机微信、APP与树莓派和传感器进行交互,并能登录web界面查看相应底层数据并对传感器进行相应控制. 树莓派的应用得到了扩展,它既作为网关来传输数据,还可以作为应用来与用户交互. 具有低功耗、低成本、节约网络资源,压缩系统结构等特点.
1 系统整体功能
本系统主要功能模块可分为树莓派模块、用户应用模块、数据采集传输模块3个方面进行设计,其系统框架如图1所示.
树莓派模块:作为系统的主体部分,拥有语音识别、语音合成、图像识别、AI对话、微信交互、视频监控、传递数据等功能.
数据采集传输模块(智能家居):利用树莓派作为网关(GW),CC2530节点采集数据,ZigBee组网,通过MQTT协议与网关交互,网关进行协议转换之后使节点接入MQTT服务器.
应用终端模块:通过APP、网页后台查看底层节点的环境数据,控制节点状态及进行网页视频监控功能.
2 系统整体架构
考虑到使用环境为家庭环境,将系统压缩为适用家庭的简易三层结构,树莓派既作为应用终端,也作为底层节点的网关使用,压缩系统体积的同时,也满足了应用需求.
2.1 系统硬件
在家庭环境下部署传感器节点与执行节点,通过ZigBee通信协议实现数据的采集与传递的功能. 感知节点由CC2530开发板和各类传感器或执行器构成.节点采集数据之后,以数据包的形式将数据传至树莓派网关. 同理,网关对应用终端发来的指令也通过包的形式发送至执行节点. 节点间与树莓派网关的通信如图2所示.
图2 节点与树莓派网关通信
树莓派体积小,功能强大,兼容性强,最主要是它支持多种计算机语言,主流的有C、Python,其中Python最适合树莓派开发. 针对以上特性本设计中,树莓派除了作为网关使用,还扩展了其他交互功能,作为智能家居系统的主体,在树莓派上外接树莓派麦克风(respeaker-2mic),摄像头(PI-camera)和小型音箱,为用户提供多种与系统的交互方式.
在树莓派上进行对应编程,运用Mjpg-Streamer、MQTT通信协议、Snowboy唤醒、微信接入、Python串口读写、调用百度智能AI,tensorflow深度学习等技术实现视频监控,数据传输,语音对话,微信控制,图像识别等功能.
2.2 系统软件
系统软件集成在应用终端,提供底层数据的检测和对底层节点控制的Web与APP,应用终端与树莓派网关的网络通讯,采用MQTT通信协议规范[5]. MQTT结构由MQTT消息代理和MQTT客户端组成,图3是MQTT结构.
图3 MQTT结构
应用终端向MQTT服务器订阅(subscribe)数据主题,树莓派网关接收到数据后将数据及其主题发布(publish)至MQTT服务器,此时,MQTT服务器将数据推送至订阅对应主题的应用终端. 反之,执行指令的下发流程相同. 应用终端与树莓派网关的通讯框架如图4所示.
3 系统设计与实现
3.1 数据采集与传输功能模块
底层物联网设备通过ZigBee网络来连接,ZigBee网络支持星型、树型和网状网络拓扑结构,本系统采用树型结构,树型结构在传输距离上有一定优势,并且使用的时间会较长,成本低.
底层数据需要约定数据上传与反向控制的格式,方便树莓派网关和应用终端对数据的解析和对指令的生成,具体格式与设备编号如表1、表2所示.
图4 应用终端与树莓派通信
表1 数据/指令格式
表2 系统节点编号
3.2 树莓派功能模块
树莓派作为整个系统的主体部分,拥有语音识别、语音合成、图像识别、AI对话、微信交互、视频监控、传递数据等功能.
在语音识别与合成中,为了避免树莓派对无用的信息做出反应,利用Snowboy平台训练树莓派的唤醒词,做到先唤醒,再反应. 树莓派的语音识别[6]与语音合成调用了百度AI平台的Deep CNN+LSTM+CT架构和Deep Voice[7],利用TensorFlow深度学习实现对图像的数据识别.
AI对话功能主要利用图灵机器人平台的DeepQA系统. 为了方便与系统交互,树莓派实现了微信接入的功能,利用itchat可以实现对微信的调用.
视频监控功能是智能家居安全保护功能的主要体现,有以下两种方案:
(1) 在树莓派上搭建MJPG-streamer视频流服务器,就可以很方便地将树莓派摄像头所采集的视频流输出到网页服务器插件,则用户便能直接从浏览器中观察到树莓派所拍摄到的景物.
(2) 利用ffmpeg,ffmpeg[8]是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序. 鉴于树莓派没有被映射到公网中就不能从公网访问的局限性,使用ffmpeg将视频流推至rtmp服务器,从而突破树莓派视频监控只能在局域网下访问的限制. 其视频流向为:树莓派摄像头->ffmpeg->rtmp->nginx->VLC media player.
这里采用第二种方案,此方案支持公网通信访问.
除了以上功能,树莓派作为底层节点的网关,通过Python串口读写实现对环境数据的接收和控制指令的发送.
3.3 应用终端模块
应用终端是提供针对底层数据的检测和控制节点的网页管理系统和APP.
为了使代码能够便捷复用,Web端使用MVC框架进行开发,流程如图5所示,通MQTT协议对传输上来的数据进行相应的处理并显示,并下发控制指令到节点.
Android端调用web服务器提供出来的接口,获取数据,并通过调用web服务器的接口发送对应的控制命令.
4 运行效果演示
我们首先模拟一个家庭环境,部署数个传感器、执行器节点,接上灯泡模拟电器,在笔记本上搭建php、mosquitto服务器运行环境,场景模拟如图6.
在上述环境下进行语音测试.
通过对树莓派进行关键词唤醒,并说出相应的控制命令,检查语音识别是否正确,是否根据指令进行正确的操作,结果如图7所示.
用微信对树莓派进行控制,检查控制指令是否正确传达,是否根据指令进行正确的操作,如图8、9.
图5 MVC框架图
图6 场景模拟图
图7 语音测试表
图8 微信测试对话
图9 微信测试拍照
访问网页服务器,检查传感器数据是否正常显示,是否能对家庭电器进行控制,是否能正常开启监控及看到监控画面,效果如如图10、图11所示; Android端采集数据界面展示如图12所示.
图10 Web显示数据界面
图11 反向控制、视频监控界面
图12 Android界面效果
5 总结
本文提出了一种智能家居系统的设计方案,该方案主要对基础的智能家居进行完善和系统简化. 主要是在树莓派模块进行系统压缩和功能扩展,增加更多的智能应用功能,让树莓派作为数据传输的网关的同时,还能拥有更加智能的应用终端功能.
本文所述的系统总体有3个大的功能模块:数据采集传输模块、树莓派模块、应用终端模块. 本文中,感知节点通过ZigBee组网,将环境数据上传到树莓派网关,树莓派网关将数据发布到MQTT服务器,订阅对应主题的应用终端模块便能接收到对应数据. 树莓派模块以树莓派作为主控,外接硬件设备作为系统与外界的音频信息进行交互的途径. 由此,开发出本文所述,简约的,低功耗,低成本,节约网络资源的智能家居系统.