(本文转载自:欧时电子)Node-RED 是对可在 Raspberry Pi 上运行的物联网进行布线的可视工具,并允许快速对项目进行原型制造。在本教程中,我们将首先在 Raspberry Pi 2 上设置 Node-RED,再创建读取温度传感器和控制 LightwaveRF 电源插座的流程。
我们将假定已在网络上设置您的 Pi,并可以对其进行 SSH 访问。
请确保您的发行版是最新的:
$ sudo rpi-update
$ sudo reboot
等待 Pi 重新启动,重新登录并执行:
$ sudo apt-get update
$ sudo apt-get upgrade
硬件
我们将使用以下硬件:
Raspberry Pi 2
DS18B20+ 温度传感器
433 MHz 发射器模块
试验电路板原型制造
跳线(如这个和这个)
4.7k 电阻器
LightwaveRF 电源插座(许多零售商有售)
长 174mm 的实心线(用作无线板的天线)
在这里我们将温度传感器和无线发射器连接到 Raspberry Pi。确保它们都通电、接地、有数据连接,并连接到 Pi 的 GPIO 管座上的正确引脚。另请确保天线连接到无线模块。
设置 LightwaveRF 控制
为了控制无线电源插座,我们需要安装 wiringPi 和 lightwaverf-pi。首先安装 wiringPi:
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build
现在测试 wiringPi 是否安装正确:
$ gpio -v
$ gpio readall
接下来安装 lightwaverf-pi:
$ git clone [/url]
$ cd lightwaverf-pi
$ make
$ sudo make install
执行测试发送命令:
$ sudo ./send 0
这应无错误执行。接下来,尝试将 Pi 与电源插座配对,来测试无线控制:
插入电源插座,并按下侧面的按钮直至指示灯开始呈橙色/蓝色闪烁,将其置于配对模式。然后传输开启信号:
$ sudo ./send 1
插座应与 Pi 配对。状态灯将更快速地闪烁以显示已成功完成。现在应能够使用以下命令开关插座:
$ sudo ./send 1
$ sudo ./send 0
安装 Node-RED
首先我们将安装 Node.js(请注意,与之前的 Pi 板对比,此过程在 Pi 2 上有所不同):
$ curl -sL [url]* | sudo bash -
$ sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs
接下来安装 Node-RED:
$ sudo npm install -g node-red
启动 Node-RED:
$ node-red-pi --max-old-space-size=128
这将在 Pi 上启动 Node-RED 服务器。打开新的 Web 浏览器选项卡并导航至 Pi 的 IP 地址、端口 1880。应看到 Node-RED 环境加载并随时可用。
现在我们将添加一个新节点以从 Node-RED 内使用 DS18B20 温度传感器。正确操作需要两个内核模块,我们将先加载这两个模块:
$ sudo modprobe w1-gpio
$ sudo modprobe w1-therm
尽管手动加载这些模块很简单,我们还是将其配置为在启动时自动加载。通过编辑 /etc/modules 文件可执行此操作:
$ sudo nano /etc/modules
在其自己的行中添加模块的名称:
现在我们将安装一个节点以从 ds18b20 模块读取数据:
$ cd /usr/lib/node_modules/node-red
$ sudo npm install node-red-contrib-ds18b20 --save
接下来我们需要向 /boot/config.txt 文件添加一行:
$ sudo nano /boot/config.txt
在文件末尾添加以下行:
dtoverlay=w1-gpio,gpiopin=4
保存并编辑此文件,然后重新启动并重新登录 Pi。
现在我们要测试温度传感器是否正确连接到 Pi,并可检索数据:
$ cd /sys/bus/w1/devices
$ ls
您应该能够看到类似上面的内容 - 此处传感器显示为 28-000006439bd5。更改到传感器目录:
$ cd
e.g.
$ cd 28-000006439bd5
传感器将写入信息到 w1_slave 文件,因此我们可以查看其中是否有任何数据:
$ cat w1_slave
这应显示两行。如果是,则表示传感器连接到 Pi 并为其提供数据。
构建 Node-RED 流
检查传感器节点是否正确安装,以便我们能够将温度数据写入 Node-RED:
$ node-red-pi
打开 Web 浏览器并转至 Pi 的 IP 地址、端口 1880。应看到新节点“ds18b20”朝向左侧菜单底部。将节点拖至工作区。我们需要配置节点并告知它要使用的传感器 ID,为此,双击此节点以打开编辑窗格。应可从第一个下拉选项卡中选择设备 ID。请注意,您也可更改温度读数之间的间隔时间(默认为 1 分钟)。您需要等到间隔时间过去,直到第一条信息显示在调试控制台上,因此您可能想在测试过程中将间隔时间更改为类似 0.1 的值。
在调试节点中拖动并将两个节点连接在一起。在 Node-RED 工作区中连接多个节点时,即称为一个流。流需要先部署,才能够在服务器上运行。单击工作区右上角的“部署”按钮以部署该流。如果进行了任何更改,则需要重新部署,以使更改对服务器上运行的程序生效。
至此我们已使用传感器测试了基本流,我们可以构建一个更复杂的流,该流将:
读取传感器温度
决定是否足够冷可以打开插座(加热器)
决定是否是打开插座的正确日子
决定是否是打开插座的正确时刻
将插座状态更改为开或关
Node-RED 捆绑许多有用的节点,其中一个是上面使用的调试节点。我们还会使用注入节点协助测试。这样只需单击节点上的按钮即可发送信息有效载荷,意味着您无需等待基于时间的数据即可测试节点。
我们将使用功能节点来实现逻辑并决定何时应打开和关闭插座。
最后,执行节点可让我们从 Node-RED 中执行外壳命令。我们将使用此节点来执行之前使用的发送命令以控制无线插座。
将执行节点拖至工作区,双击它以打开编辑器窗格,并将以下详细信息添加到“命令”字段中:
sudo //send
e.g.
sudo /home/pi/SW/lightwaverf-pi/send
在“名称”字段中添加文本 - 我们使用的是“switchExec”。为节点命名有助于提高可读性,特别是更大、更复杂的流。此执行命令现在将尝试执行节点每次接收输入信息时提供的命令。我们可以在信息有效载荷内发送命令附加参数。请注意,我们的命令为何不包括之前使用的“0”或“1”参数。这是因为我们会将这些参数传递到流中的执行节点。
我们稍后将使用功能节点执行此操作,但现在我们可以使用注入节点测试执行节点是否正常运行。在两个注入节点中拖动。轮流双击每个节点并确保“有效载荷”类型为“字符串”,并在“有效载荷”字段中都各有 0 或 1。
将每个注入节点的输出连接到执行节点,顶部执行输出连接到调试节点并部署流。现在,单击任一注入节点上的按钮时,都应看到执行节点将 ‘sending command’ 写入调试控制台。还应注意到电源插座将根据单击打开和关闭。请注意,建议不要太快切换插座,否则可能导致损坏。
现在我们的无线控制工作正常,我们可以构建流并向功能节点添加自定义节点。在功能节点中拖动并如上所示对所有项目布线。
双击功能节点并向其添加以下代码:
//Control mains socket based on day, hour and temperature
//create date object
var d = new Date();
var day = d.getDay();
var hour = d.getHours();
var DAY = day;
var HOUR = hour;
//line to accept numbers in for testing
//var day = parseInt(msg.payload);
// change var DAY to 0 or 1 depending on day - we want Monday-Friday
if (day >= 1 && day <= 5) {
DAY = 1;
}
else{
DAY = 0;
}
// change var HOUR to 0 or 1 depending on hour - we want 0700-1800
if (hour >= 7 && hour <= 17) {
HOUR = 1;
}
else{
HOUR = 0;
}
// Format payload out to 0 or 1 depending on HOUR, DAY and temp/msg.payload - we want day/time as above and temperature setting of 23 degrees C
if (HOUR == 1 && DAY == 1 && msg.payload <= 23) {
msg.payload = 1;
}
else{
msg.payload = 0;
}
return msg;
部署流。现在,电源插座可根据 Pi 读取的温度打开和关闭。我们现在要做的最后一件事是配置 Node-RED 以在启动时运行。我们将使用 PM2(Node.js 的流程管理器):
$ sudo npm install -g pm2
确定将 node-red 安装在 Pi 上的位置:
$ which node-red
$ pm2 start /node-red --node-args="max-old-space-size=128" -- -v
这将在后台启动 Node-RED。
有多种方式可检查 PM2 进程的状态:
$ pm2 status
$ pm2 info node-red
$ pm2 logs node-red
现在告知 PM2 在引导时启动:
$ pm2 startup
重新启动并检查一切正常。Node-RED 应按配置启动,并开始运行流。
功能节点可根据需要改变 - 尝试以不同值或不同条件进行实验。还有其他输出节点可轻松添加,如 Twitter 节点,可将其用于通知您何时打开或关闭插座。. |