原文:Monitor Your Home With the Raspberry Pi B+
作者:M. Schwartz
译者:安翔
审校:苏宓

简介

市场上有许多设备提供从中央界面监控家庭环境的功能。在本文中,我们将自己 DIY 一套这样的监控设备。要做到这一点,我们将使用 B +型号的树莓派开发板和官方的树莓派相机模块。此外,我们还将使用温湿度传感器进行一些测量工作。

在文章末尾,你将能够构建一个界面,访问摄像机和传感器录像。我们还将展示如何从世界任何地方接入这个界面。让我们开始动手吧!

软硬件需求

开始项目之前,你需要的第一个东西就是树莓派 B +开发板。它具有很强大的功能(如4个USB端口),当然你也可以使用较旧版本的树莓派。

您将需要使用官方的 Raspberry Pi 相机模块来拍摄照片。还将使用 DHT11(或DHT​​22)传感器来测量家中的温度和湿度。

由于我们将远程访问 Rapsberry Pi,因此你将需要一个USB接口的无线网卡。

你还需要安装 Adafruit cobbler 工具包,面包板和一些跳线。你需要这些东西来实现Raspberry Pi、相机和传感器之间的连接。

以下是此项目所需组件的列表:

  • Raspberry Pi B +开发板(配套 microSD卡,microUSB 电缆和 HDMI 电缆)
  • Raspberry Pi 相机模块
  • 具有4.7k欧姆电阻的 DHT11 传感器
  • USB 无线网卡
  • Adafruit Cobbler工具包
  • 跳线
  • 面包板

检查你的 Raspberry Pi 上是否安装了 Linux 发行版。这是为了确保你有一个完整功能的Pi。该项目中,我使用的是 Raspbian 操作系统。

如果你还没有完成操作系统的安装,可以参考此文:http://www.raspberrypi.org/help/quick-start-guide/。

将 Raspberry P i连接到本地 WiFi 网络,并为 BCM2835 芯片安装驱动程序,以读取DHT11 传感器的数据。

你可以按照以下说明下载并安装这些驱动程序:
http://www.raspberry-projects.com/pi/programming-in-c/c-libraries/bcm2835-by-mike-mccauley。

整个项目都是基于Node.js. 它将作为一个服务器,从中我们可以访问我们的Raspberry Pi 的所有功能。

首先你需要在 Pi 上安装 Node.js。需要注意的是,你不能使用apt-get 工具安装 Node 包模块,因为你可能会安装一个旧的版本。要安装最新版本的Node.js,请遵循以下指导:
http://revryl.com/2014/01/04/nodejs-raspberry-pi/

你还需要安装 BCM2835 芯片的驱动程序。可以通过访问此页面下载并安装这些驱动程序:
http://www.airspayce.com/mikem/bcm2835/

之后,在 GitHub 上下载此项目的文件:
https://github.com/openhomeautomation/rpi-web-control

我们需要安装一些软件包,然后通过 rapsberrypi.local 访问本地 WiFi 网络上的Raspberry Pi。我们这样做之后就不需要通过其 IP 地址访问 Pi。

此后,你可以通过 SSH 登录 Raspberry Pi,或直接访问 Pi,然后键入以下命令:

sudo apt install avahi-daemon netatalk

硬件配置

如果你按照上述步骤进行操作,应该可以很轻松完成树莓派的配置。现在我们来添加其他的组件。

首先,我们将连接相机。按照 Raspberry Pi 网站上的说明进行安装。

以下是我使用的相机的图片。旁边是我的 Raspberry Pi:

请注意,我为我的 Raspberry Pi 使用了一个塑料盒。塑料盒在这个项目中并不是必需的。

接下来,我们将通过 Cobbler 套件将 DHT11 传感器连接到 Raspberry Pi 上。组装完成套件后,将其连接到 Raspberry Pi GPIO 接口。通过 PCB 适配器将电缆的另一面连接到面包板。

对于 DHT11 传感器,其引脚分布如下 :

将 VCC 引脚连接到 Raspberry Pi 3.3V 引脚,GND 连接 GND,将 DATA 连接到 GPIO 连接器上的4号引脚。最后,在 VCC 和 DATA 引脚之间连接 4.7K 欧姆电阻。下图显示了传感器的最终连接效果:

测试传感器和摄像头

我们现在要依次测试传感器和摄像头。

因为我们要构建一个基于 Node.JS 的应用程序,所以我们将使用 Node 连接 DHT11 传感器。为此,我们将使用已经存在的专用 Node 模块。
你将在项目代码中找到名为 sensors_test 的文件夹下的所有内容。以下是本部分的完整代码:

var sensorLib = require('node-dht-sensor');var dht_sensor = {initialize: function () {return sensorLib.initialize(11, 4);},read: function () {var readout = sensorLib.read();console.log('Temperature: ' + readout.temperature.toFixed(2) + 'C, ' +'humidity: ' + readout.humidity.toFixed(2) + '%');setTimeout(function () {dht_sensor.read();}, 2000);}
};if (dht_sensor.initialize()) {dht_sensor.read();
} else {console.warn('Failed to initialize sensor');
}

以上代码中,首先导入 DHT 传感器所需的模块。然后,每2000ms,我们从传感器读取数据,并使用console.log() 将数据显示在终端。该部分的代码在项目的 GitHub 仓库地址如下:
https://github.com/openhomeautomation/rpi-web-control

现在开始测试代码。从 GitHub 下载代码后,转到 sensors_test 文件夹,然后键入如下命令:

sudo npm install node-dht-sensor

以上命令的运行需要一段时间,请耐心等待。执行完成后,键入以下命令:

sudo node sensors_test.js

执行命令后应该能够看到在终端中打印的温度和湿度的值:

Temperature: 21.00C, humidity: 35.00%

摄像头的测试方法也非常简单。只需转到终端键入以下命令即可:

raspistill -o cam.jpg

然后,转到执行此命令的文件夹,你应该可以看到一张名为 cam.jpg 的照片。

通过 WiFi 监控你的家

我们现在要编写一个基于 Node.js 的应用程序来远程跟踪传感器和摄像头的数据。代码大致由三部分组成:

(1)Javascript 中的服务器代码
(2)包含接口的 HTML 页面
(3)连接以上两者的客户端 Javascript 文件

我们先看看服务器端的 Javascript 代码。它首先包括所需的 Node 模块:

(1)node-dht-sensor 模块来处理DHT传感器
(2)快速处理 HTTP 通信,如Web服务器

代码如下:

var sensorLib = require('node-dht-sensor');
var express = require('express');
var app = express();

我们还包括视图和公共目录。views 目录是我们将存储接口的地方,而公共目录是我们将把 JavaScript 代码和记录的图片放在一起的地方:

app.set('views', __dirname + '/views')
app.set('view engine', 'jade')
app.use(express.static(__dirname + '/public'))

我们将为接口创建路径,以便访问我们的项目:

app.get('/interface', function(req, res){res.render('interface');
});

我们将包括 aREST API 的 Raspberry Pi 版本(http://arest.io/),以便我们通过 HTTP 控制 Raspberry Pi:

var piREST = require('pi-arest')(app);

此外,我们还给树莓派设置一个 ID 和名字:

piREST.set_id('1');
piREST.set_name('my_RPi');

最后,我们调用app.listen() 数来启动我们的应用程序:

var server = app.listen(3000, function() {console.log('Listening on port %d', server.address().port);
});

界面本身是用 Jade(http://jade-lang.com/)编写的。这将给我们一个 HTML 格式的结果。该文件存储在应用程序的视图目录中。我们添加一些标题,一些容器用于传感器测量,以及一个字段用来存储摄像头记录的图片:

doctype
htmlheadtitle Raspberry Pi Interfacescript(src="/js/jquery-2.0.3.min.js")script(src="/js/interface.js")link(rel='stylesheet', href='/css/style.css')bodyheaderdiv.mainContainerh1 Raspberry Pi Interfaceh2 Sensor Readingsp Temperature: span#temperature 0span  Cp Humidity: span#humidity 0span  %h2 Cameraimg#camera(src='')

正如你在代码中看到的那样,我们将在 Jade 模板中包含一个 Javascript 文件和一个jQuery。脚本文件将每2000ms调用 Raspberry Pi 的 aREST API 来刷新 DHT11 传感器的测量结果:

setInterval(function() {// Update temperature$.get("/temperature", function(data) {$("#temperature").html(data.temperature);});// Update humidity$.get("/humidity", function(data) {$("#humidity").html(data.humidity);});}, 2000);

摄像头每10秒钟拍摄一次照片:

setInterval(function() {// Take picture$.get("/camera/snapshot");}, 10000);

界面内的图片每秒刷新一次:

setInterval(function() {// Reload pictured = new Date();$("#camera").attr("src","pictures/image.jpg?" + d.getTime());}, 1000);

接下来测试界面,转到 pi_node 文件夹并键入如下命令:

sudo npm install node-dht-sensor express pi-arest

稍等一会,继续输入命令:

sudo node pi_node.js

最后,使用任意你最喜爱的浏览器并输入以下地址:

http://raspberrypi.local:3000/interface

如果是在树莓派上,仅仅需要输入以下地址即可:

http://localhost:3000/interface

不出意外,你应该可以看到项目的界面显示如下:

耐心等待传感器测量数据和图片出现在显示屏上。请记住,传感器测量会延迟2秒,图像则延迟10秒。

另外请注意,相机模块的 Node.js 模块 并不完美。在我的系统中,照片的拍摄和最终显示之间有一段延迟。

不过总体来说是成功的,你现在可以远程访问 Raspberry Pi 的传感器数据和摄像头了!

从任何地方访问你的树莓派

现在,我们看到了如何在家庭环境中使用电脑或手机访问这个界面。
这已经很不错了,但如果能够从世界任何地方访问该项目,检查摄像模块拍摄的图片,将会更酷。这其实很简单,接下来我将会告诉你如何实现。

我们将使用一个简单的工具 Ngrok 来实现。这个工具会在你的 Raspberry Pi 和远程服务器之间建立一个通道,因此你可以随时随地访问界面。第一步是下载 Ngrok:
https://ngrok.com/

将文件放在一个文件夹中,并通过 Raspberry Pi 上的终端访问此文件夹。然后键入以下命令:

./ngrok 3000

这将打开 Raspberry Pi 和 Ngrok 服务器之间的连接,确认消息如下所示:

你现在可以尝试一下,并在浏览器中输入网址。你应该可以看到与上一节中相同的界面,这意味着你可以从世界任何地方控制你的系统!

最后一句话:小心这一点。现在任何人都可以使用正确的 URL 访问此界面,现在它只是连接到一个实际上没有连接到任何东西的继电器,但是如果你的整个报警系统已经连接到了 Raspberry Pi,这样任意访问肯定是有风险的!在这种情况下,你最好在服务器上设置一个健壮的登录/密码系统,以便只有你自己可以访问它。

总结

我们构建了一个基于 Node.js 的应用程序来自动访问来自传感器的测量数据。我们还使用一个 Node.js 模块访问 Raspberry Pi 的摄像头模块。最后,我们将所有内容显示在一个漂亮的网页界面上,并且我们还展示了如何使用 Ngrok 从世界任何地方访问我们的项目。

你可以通过在项目中包含更多的传感器来进一步扩展该项目。例如,您可以添加光照强度传感器和运动传感器,在 Node.js 应用程序中显示这些传感器的状态非常容易。

使用树莓派打造家庭监控系统相关推荐

  1. 毕业设计 树莓派智能家庭监控系统

    文章目录 0 前言 1 简介 2 主要器件 3 监控系统 Python 实现 安装 OpenCV motion mjpg-streamer 4 部分代码 5 最后 0 前言

  2. 家用监控系统需要服务器吗,家庭监控系统实现(一)

    从本文开始,将逐步实现一个小型的家庭监控系统,可以实现实时视频监控和历史监控调取的功能. 主要硬件组件包括树莓派.camera.android前端设备. 实现思路为,树莓派上电,即开启视频录制功能,每 ...

  3. 家庭监控系统实现(一) -- 硬件准备及picamera使用

    转载请注明出处:https://blog.csdn.net/mymottoissh/article/details/83053587 从本文开始,将逐步实现一个小型的家庭监控系统,可以实现实时视频监控 ...

  4. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(二)

    现在开始介绍php+mysql+shell监控系统 1.目的 此监控系统主要是通过php+mysql+shell的方式,通过shell脚本对各个机器的其各个服务进行监控,达到及时的了解其各个应用服务的 ...

  5. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)

    前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没有,在我与经理的努力下,先搭建nagios+cacti监控平台,后来随着公司业务的增加,平台的功能与服务 ...

  6. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(五)

    4.监控视图 主要是通过shell脚本进行收集mysql的数据,然后同gnuplot软件进行数据视图化,然后php加载这些图片到web里显示,用到的php文件为view.php day.php.mon ...

  7. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(四)

    (5)数据库服务器(以甘肃数据库为例,脚本解释参照甘肃web) #!/bin/bash #ip db_ip=$(/sbin/ifconfig eth0|grep "inet addr&quo ...

  8. 【监控】使用 Grafana、collectd 和 InfluxDB 打造现代监控系统

    参考资料: Grafana 是 Graphite 和 InfluxDB 仪表盘和图形编辑器:http://www.oschina.net/p/grafana 使用 Grafana.collectd 和 ...

  9. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统

    转载来自:http://dl528888.blog.51cto.com/2382721/1034992 前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没 ...

  10. Android烟雾监控应用,基于Android的智能家庭监控系统研制

    摘要: 传统的家庭监控系统存在无法远程控制,布线复杂,智能化程度不高等问题.随着无线传感网络和移动互联网迅速的普及在人们的生活中,新一代开源嵌入式软件和硬件技术的不断进步,为智能家庭监控系统的发展提供 ...

最新文章

  1. 一个用户实体应该有它自己的实体验证,即一个实体应该有它的属性,方法,扩展属性及验证机制组成...
  2. opencv bug 合集
  3. 机器学习算法基础——逻辑回归
  4. 三次握手和四次挥手图解_图解TCP三次握手和四次挥手
  5. C#通过Redis实现分布式锁
  6. Learn day4 函数参数\变量\闭包\递归
  7. 从程序员到阿里技术总监之路
  8. 博主推荐【文件Hash校验工具V1.0 -免费版】
  9. java http响应头,java – HTTP响应标头内容处理附件
  10. 加载jsp页面报#{} is not allowed in template text
  11. androidpn php,服务器推送消息到Android终端方法
  12. GIS案例练习-----------第二天
  13. c语言程序由哪三个部分组成部分,C语言程序的组成部分
  14. unity3d 各种优化综合
  15. MATLAB印刷体汉字识别
  16. 第二章:JAVA编程基础
  17. Java全栈工程实践
  18. 从ToC到ToB,疫情给我们的影响是什么?
  19. ext布局问题之tab panel内的gridpanel内容数据变多,出现滚动条
  20. 寄存器与ROM与RAM

热门文章

  1. origin绘制双Y轴柱状图
  2. 解决双击事件触发两次单击事件
  3. 如何更改Excel2016中折线图的连接点颜色和样式?
  4. 计算机网络技术专业毕业论文参考选题,计算机网络技术专业毕业论文参考选题...
  5. 保温杯市场前景分析及行业研究报告
  6. 华为云认证体系介绍,认证的必要性
  7. adsl拨号服务器构建代理池
  8. 推荐几个高效文章搜索网站
  9. python在线朗读-python朗读软件
  10. 利用google搜索自己的博客