基于树莓派+云服务器的网络监控及家居控制系统的研究与实际应用

2016-11-09 19:07郝林炜梁颖
物联网技术 2016年9期
关键词:树莓派智能家居

郝林炜+梁颖

摘 要:树莓派(Raspberry Pi)卡片电脑原本是为学生计算机编程教育而设计开发的,自从其面世以来,树莓派由于其强大的可扩展性及其优异的性能在Geek圈以及物联网行业受到广泛关注。而目前“云计算”、“云存储”等“云”是当下IT行业发展的方向。将这二者结合而开发出的远程实时监控以及远程家居控制系统不论是从成本上,还是从其功能上都具有相当大的优势,同时还能给用户带来良好的用户体验。文中将使用目前相当流行的编程语言Java与Python来说明如何实现远程实时影像监控、室内温湿度检测及监控、家居电器控制等。

关键词:树莓派;云服务器;智能家居;云

中图分类号:TP212.9 文献标识码:A 文章编号:2095-1302(2016)09-0045-03

0 引 言

在国内,智能家居、智能电器等新产品大量上市。而普通民用的物联网设备往往需要购买昂贵的物联网系统设备,这极大地阻碍了物联网走向普通人家的道路。由于目前可用的互联网设备以及它们所采用的软件系统还有很多不人性化的细节及集成度不高等缺点,往往需要多个独立设备结合使用。因此,价格低廉且开发、扩展方便的树莓派便成为智能家居系统开发用机的不二选择。

1 硬件简介

1.1 树莓派简介

树莓派由英国慈善组织“Raspberry Pi基金会”开发,原本是为学生计算机编程而设计的一种价格低廉的卡片电脑,但由于其使用开源易扩展的Linux操作系统,性能较强,接口丰富,因此常用于物联网等自动控制设备方面。本文将以树莓派2代B型机作为开发机,它采用了Broadcom BCM2836作为其SOC(片上系统),CPU基于ARM Cortex-A7架构,共四个核心,运行频率为9 00 MHz,具有1 GB LPDDR2 RAM。在接口方面,树莓派拥有15-针头MIPI相机 (CSI)界面,可被树莓派相机 (无红外线版)使用;4个USB2.0规范接口;MicroSD卡槽;17个GPIO及HAT规格铺设。

1.2 其他使用到的硬件

考虑到智能家居需要灵活布置,因此树莓派连接网络使用USB无线网卡。在传感器方面,使用温湿度传感器DHT11。在视频监控方面,使用树莓派带红外线版CSI接口摄像头。除此之外,使用继电器控制家居的开关。DHT11数字温湿度传感器如图1所示。

2 系统设计方案

2.1 系统总体设计方案

整个系统包含服务器端与树莓派客户端。服务器负责存储数据、提供数据查询接口、提供控制家居的接口。树莓派客户端负责读取传感器数据、发送从摄像头获得的图像以及对家居(开/关)的控制。系统总体结构图如图2所示。

2.2 硬件设计方案

硬件设计方案主要将传感器、继电器与树莓派的GPIO接口相连,树莓派读取传感器获取的数据,并通过控制继电器的开/关来控制家电的开关状态。树莓派GPIO接口定义如图3所示。

DHT11接线示意图如图4所示。将DHT11传感器的2号针脚(DATA针脚)与树莓派GPIO针脚相连以进行数据传输;1号针脚(VCC针脚)与树莓派3 V正极供电连接;4号针脚接树莓派GND作为地线。

3 软件设计方案

树莓派端主要使用Python编程语言。使用基于Linux的Raspbian操作系统中的Rpi.GPIO Python库来对传感器、继电器等连接在GPIO接口的设备进行读取和控制;使用MySQLdb库读取云数据库中的数据并将传感器数据写入云数据库。远程监控方面使用C语言编写的mjpg-streamer将摄像头获取的画面进行编码并建立可访问的服务器,使用户通过http协议访问获得监控画面。

服务器端使用开源的MariaDB作为数据库,该数据库作为MySQL的开源版本,应用广泛。服务器使用Tomcat,服务器端的编写使用Java语言,运用SSH框架实现服务器端的软件功能。

4 云服务器端软件实现

4.1 云服务器环境框架

服务器端采用Tomcat+MariaDB架构,使用目前流行的SSH(Struts,Spring,Hibernate)框架搭建服务器端的软件。MariaDB负责存储整个系统产生的数据,包括温度、湿度、家居的开关状态及树莓派的IP地址等。SSH框架负责系统的逻辑处理并提供REST风格的接口供客户端调用。

4.2 REST风格的API

即提供访问功能的URI(如开灯),客户端使用GET方法请求http://example.com/smart/openlight此URI即可,方便客户端的使用及编码,因此在服务器中采用REST风格的API是实现客户端与服务器端交互的不二之选。使用Struts2框架提供的action机制编写对应的action操作控制数据库中的家居状态标识,树莓派通过轮询机制监测家居状态的更改进而做出相应的动作。

5 树莓派端软件实现

5.1 安装操作系统

从Raspberry Pi官方网站下载最新的Raspbian镜像解压得到img文件。将空白SD卡插入电脑,使用diskutil list命令确定SD卡的路径,然后使用dd命令将img文件写入SD卡,镜像路径为/Users/pi/Downloads/2016-03-18-raspbian-jessie.img,SD卡路径为/dev/disk2,在终端中使用如下命令写入磁盘镜像:

将已写入系统的SD卡插入树莓派的SD卡插槽并通电开机,在终端使用如下命令安装Python操作MySQL数据库的必要组件python-mysqldb:

5.2 温湿度传感器软件实现

DHT11是一款数字信号输出的温湿度复合传感器,其信号如图6所示。每个DHT11出厂前都会在校验室中校准,校准系数以程序的形式存在OTP内存中。DHT11的原理图以及在树莓派上使用Python读取DHT11信号关键代码如下:

j+=1

5.3 家居控制软件实现

使用继电器控制家居的开关。树莓派通过轮询方式每隔一定时间便会查询云服务器数据库家居状态表,如果查询到有相应的开关变化,通过控制与继电器相连的GPIO输出电平的高低来控制继电器的开关以达到控制家居开关的目的。

5.4 视频监控软件实现

树莓派上提供了专供摄像头使用的CSI接口,使得基于树莓派的远程视频监控系统成为可能,我们只需将摄像头与树莓派上的CSI接口相连并在系统设置raspconfig中开启支持摄像头的选项,摄像头就可以正常使用了。

由于远程监控需要通过互联网远程查看摄像头所捕获的画面,因此我们还需要使用一款开源软件——mjpg-streamer。mjpg-streamer从webcam摄像头采集图像,并将图像以流的形式通过基于IP的网络传输到网络浏览器。由于大部分编码工作都是由摄像头完成的,因此mjpg-streamer仅需要很少的CPU和内存资源就可以工作,非常适用于功耗较低的树莓派。

mjpg-streamer使用C语言编写,因此首先需要使用如下命令在树莓派上安装C编译器cmake:sudo apt-get install cmake。除此之外,mjpg-streamer还需要jpeg编码库libjpeg8-dev的支持,同理,使用sudo apt-get install libjpeg8-dev在树莓派上安装该支持库。

要配置mjpg-streamer需经过如下几个步骤:

(1)将mjpg-streamer的压缩包解压;

(2)修改mjpg-streamer的配置文件,在树莓派上用文本编辑器修改mjpg-streamer-master/mjpg-streamer-experimental/plugins/input_raspicam下的input_raspicam.c文件,根据自己的网络带宽调整监控图像的帧率(fps)以及分辨率(width和height);

(3)编译mjpg-streamer,将当前路径移动到mjpg-streamer-experimental,使用make clean all命令进行编译;

(4)制作启动脚本,方便开启监控,新建一个sh文件,将cd mjpg-streamer-master/mjpg-streamer-experimental./mjpg_streamer -i “./input_raspicam.so” -o “./output_http.so -w ./www”这两条命令写入文件并保存,使用 chmod 744命令赋予该文件可运行的权限;

(5)将运行该脚本的命令加入/etc/init.d文件,使其开机自动运行。

完成上述步骤后重启树莓派,通过浏览器访问http://树莓派的ip:8080即可查看实时监控情况。

6 结 语

基于树莓派+云服务器的解决方案能较好地实现从公网远程控制智能家居及远程实时视频监控,树莓派的功耗和发热极低,即使长时间运行也不会出现故障,而又因树莓派采用Linux操作系统,可扩展性高,易于在其基础上开发出更多的功能模块,且系统设计简单、搭建方便、成本低廉,是普通家庭采用智能家居方案的绝佳选择。

参考文献

[1]瞿中,熊安萍,蒋溢.计算机科学导论(第3版)[M].北京:清华大学出版社,2010.

(下转第页)

(上接第页)

[2]Peter Norton.计算机导论(第 6 版)[M].杨继萍,钱伟,等,译.北京:清华大学出版社,2009.

[3]郭卫斌,杨建国.计算机导论[M].上海:华东理工大学出版社,2012.

猜你喜欢
树莓派智能家居
基于PLC的智能家居控制系统研究
智能家居发展或将实现弯道超车
智能安全防盗探测小车
基于嵌入式技术的农村医疗系统设计
基于LD3320的智能家居控制