DIY组合:用树莓派和Node.js来控制湿度

Posted 嵌入式资讯精选

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DIY组合:用树莓派和Node.js来控制湿度相关的知识,希望对你有一定的参考价值。

利用ThingWorx物联网开发平台,我们能快速搭建一套物联网应用。本文旨在演示在树莓派上使用Node.js的不同模块,DIY项目也预留了扩展空间。


ThingWorx是一家提供物联网平台的公司。利用ThingWorx开发平台,我们能快速搭建一套物联网应用。


终极游戏

我不是仅仅因为提到了树莓派,就称这是一篇关于物联网(Internet of Things)的文章,但我敢拍着胸脯说这是一个互联网自动化(Internet Automation)项目,不需我额外动作就能解决一个小问题。


在本文中,我将会提供大量有用的外部资源,使得我们能尽快熟悉项目中所涉及的node.js和javascript部分。


问题描述

在寒冷的冬季,我们希望用加热器来使家里/办公室处于温暖舒适的温度。然而,在封闭的环境里使用加热器会影响室内湿度。我们用加湿器解决了这个问题!文章里我将用到一个连接插座的便携式加湿器。


我的目的是根据屋内的湿度等级,能够自动调节加湿器的开关。


如何实现呢?

硬件:如果我们能实现自动控制加湿器所连接的插座(或开关),那么问题就迎刃而解了。因此,我们需要有一个能用互联网完美控制的插座。为了实现这个功能,我选用了Belkin公司互联网控制开关Wemo Switch。


(请注意:许多便携式加湿器也自带自动开关或者定时器,但我们为的是DIY。所以在此不讨论。)


IFTTT的Maker平台为我们提供了(需要注册后才能使用它们的服务):

1.连接Wemo 开关;

2.使用Maker API来控制Wemo开关状态(根据你的账号和设备创建)。


显然我们还需要能连接树莓派的传感器。我强烈推荐使用树莓派SenseHAT而不是独立连接的传感器,SenseHAT已经集成了许多传感器,像一顶戴在树莓派上的帽子。它们还提供了丰富的Python库来读取传感器的数据。


最后,我们需要把树莓派连接到互联网。简单地把WiFi模块插在树莓派的USB端口上就能实现。当然,在树莓派上需要设置WiFi。(提示:使用Linux命令或者IDE)


软件:因为树莓派上可以运行操作系统,比如Linux和Windows,我们很容易在上面安装Node.js。因此,node.js是我们从传感器读取数据并通过IFTTT Maker平台调用API控制Wemo Switch状态的核心骨干。


正如早先所提到的,我们还需要依赖大量SenseHAT所提供的python脚本。我们就不再介绍这些python脚本了,它们在SenseHAT API 手册里都能找到。但我们会讨论如何用node.js应用来驱动这些python脚本。


Node.js App,此应用分三步实现功能:


驱动python脚本,以固定的频率读取传感器数据(也就是温度,也可以是湿度数据)比较读取到的数据和预设条件,判断Wemo Switch是否需要关闭调用IFTTT Maker的接口,打开或者关闭Wemo Switch开关,接下去我们来看每一步的具体代码:


步骤一:读取传感器数据

Node.js提供了child_process的模块,它的一个方法exec能够执行操作系统的命令。这一步需要此模块来驱动python脚本。还记得吗,我们想以固定的频率来执行python脚本,因此需要在外面包装一层JavaScript的setInterval函数。


setInterval(function(){

   require('child_process').exec(command, function(error, stdout, stderr) {

 if (error == null) {

 var data = stdout.replace("\n","");

 // ... Call Stage 2

 }

 else {

 console.log("Error occured. " + error);

 }

 }); child_process.exec

}, 60000); // frequency = 60 seconds


步骤二:判断条件

这里只是简单地比较一下上一步读取的信息。但是,你也可以在这里添加其它的功能,比如将数据存入数据库,保持最近几次读取值,判断最近几次的数值是否持续增加或减少,等等。这里我们则是基于最近一次传感器数据做出判断。


// assumption: We are looking for Temperature in Stage 1

var YOUR_API_KEY = "?????"; // obtain this from IFTTT

var wemoState = "off"; // or as defined in IFTTT Maker

if(data > 35) { // deg. Celsius is what SenseHat APIs returns

 wemoState = "on";

}

// ... Call Stage 3


步骤三:调用IFTTT Maker接口


如上文所提到的,我们不再讨论如何创建一个IFTTT Maker API来控制某个设备的状态,或是调用另一个API。你可以参考手册或是这篇博客。


接下去,到了真正使用Node.js调用接口的时候了,我们使用node.js的https模块,它提供了request的方法。


var makerAPI_host = "maker.ifttt.com";

var makerAPI_path = "/trigger/"+wemoState+"/with/key/"+YOUR_API_KEY;

var https = require('https');

 var optionsget = {

 method : "GET",

 host : makerAPI_host, 

 port : 80,

 path : makerAPI_path

 };

var reqGet = https.request(optionsget, function(resp) {

 var str = "";

 resp.setEncoding('utf8');

 resp.on('data', function(d) { // data chunk

 str += d;

 });

 resp.on('end', function() { // all data sent

 console.log(str); // We are Done!

 }); 

});

reqGet.on('error', function(e) {

 error = {

 message : "Error occured",

 error : e

 };

 console.log(error);

});

reqGet.end();


或者,也可以使用第二步中的child_process.exec()方法。


var callAPI = "curl -X GET https://maker.ifttt.com/trigger/"+wemoState+"/with/key/"+YOUR_API_KEY;    

require('child_process').exec(callAPI, function(error, stdout, stderr) {

 if (error == null) {

 console.log(stdout); // We are Done!

 }

 else {

 console.log("Error occured. " + error);

 }

}); child_process.exec


小结

总而言之,本文旨在演示在树莓派上使用Node.js的不同模块,DIY项目也预留了扩展空间。我所想到的一个复用方法是用同样的装置来控制任何与互联网连接的设备,如Nest恒温器等,创造更多新奇的互联网自动化DIY项目。



免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。


以上是关于DIY组合:用树莓派和Node.js来控制湿度的主要内容,如果未能解决你的问题,请参考以下文章

DIY一个基于树莓派和Python的无人机视觉跟踪系统

树莓派能干啥

树莓派跟电工有关系吗

树莓派.使用Node.js控制GPIO

有个树莓派和一个激光雷达还需要啥配件

如何用树莓派和Kali Linux搭建便携式的黑客工作站