树莓派(Raspberry Pi)是当前最为流行的开发板,是一个信用卡大小的单板计算机。我们可以通过它完成很多物联网应用,它是Node-RED的硬件最佳搭档之一。
Raspberry Pi OS使用了APT包管理器,内置了Node.js环境但是并不包含NPM工具,因此只需要安装NPM就可以通过NPM来安装Node-RED,具体代码如下:
但是,Raspberry Pi OS的APT官方软件库中并不是最新的Node.js和Node-RED版本,比如当前Node.js版本还是12,Node-RED版本还是2.x,如果希望使用最新的Node-RED版本,则推荐通过Node-RED的官方树莓派专用脚本进行安装,因为可以将环境的各种问题都通过脚本来处理。
如果你使用的是Raspberry Pi OS,Node-RED提供了一个脚本来将Node.js、NPM和Node-RED安装到Raspberry Pi上。该脚本还可用于升级到最新版本的Node.js和Node-RED。运行以下命令将下载并运行脚本:
上述链接如果访问速度较慢,可以通过以下链接下载使用此脚本:
注意:
该脚本适用于任何基于Debian的操作系统,包括Ubuntu和Diet-Pi。你可能需要先运行sudo apt install build-essential git curl命令,以确保NPM能够获取和构建需要安装的任何二进制模块。
脚本在Raspberry Pi上运行之前会涉及两个问题。第一个问题是,是否真的要继续安装:
输入Y,然后按Enter键继续。
第二个问题是,是否要安装Raspberry Pi特定的Node-RED包:
此问题是指安装Node-RED的同时安装Node-RED中关于树莓派的节点。同样,对于这个问题,输入字母Y,然后按Enter键继续。
该脚本将执行以下操作:
● 删除现有版本的Node-RED(如果存在)。
● 如果检测到Node.js已经安装,可确保版本至少是14。如果低于14,脚本将停止运行并让用户决定是继续使用Node-RED 1.0,还是将Node.js升级到更新的LTS版本,如图2-11所示。如果未找到任何内容,脚本将使用NodeSource包安装Node.js 16 LTS版本。
图2-11 在较低Node.js环境中的报错消息
手动升级Node.js的方法如下。
清除老版本,执行以下命令:
安装新版本,执行以下命令:
注意:
该脚本安装过程保持联网状态,如果安装失败和网络有关,可以反复多次安装,直到成功。
安装过程界面如图2-12所示。
图2-12 Node-RED在树莓派中的安装过程界面
与在计算机上本地运行Node-RED一样,你可以使用node-red命令在树莓派终端中运行Node-RED。然后,通过组合键“Ctrl+C”或关闭终端窗口来停止命令运行。
由于Raspberry Pi的内存有限,你需要使用附加参数启动Node-RED,以告诉底层Node.js进程释放未使用的内存。因此,你可以使用node-red-pi命令并传入max-old-space-size参数来替代node-red指令启动Node-RED。下面指令表示Node-RED使用内存超过256MB后会优先快速释放。
2.6.1节下载的安装脚本已经将Node-RED设置为后台服务运行,不需要单独配置。这意味着通过以下命令可以启动或停止Node-RED。
● node-red-start:启动Node-RED服务并显示日志输出。按下组合键“Ctrl+C”或关闭窗口不会停止服务,一直在后台运行。
● node-red-stop:停止Node-RED服务。
● node-red-restart:停止并重新启动Node-RED服务。
● node-red-log:显示服务的日志输出。
你还可以通过选择Menu→Programming→Node-RED选项在Raspberry Pi OS桌面启动Node-RED服务。
如果希望Node-RED在树莓派系统打开或重新启动时运行,可以通过运行以下命令:
可以修改以下文件的配置内容以不同用户身份运行Node-RED。该文件的位置如下:
可以根据需要更改User、Group和WorkingDirectory,还可以设置要使用的内存空间(以MB为单位)。脚本内容如下:
上述代码解释如下。
● Type=simple:指定Systemd服务的类型为简单类型。
● User=<your_user>:设置运行Node-RED的用户。可以将<your_user>替换为你希望使用的用户名。
● Group=<your_user>:设置运行Node-RED的用户组。可以将<your_user>替换为你希望使用的用户组名。
● WorkingDirectory=/home/<your_user>:设置Node-RED的工作目录,即Node-RED的根目录。可以将<your_user>替换为你希望使用的用户目录。
● Environment="NODE_OPTIONS=--max-old-space-size=256":设置环境变量NODE_OPTIONS,以调整Node.js的内存限制。在上述示例中,将Node.js的最大内存限制设置为256MB。你可以根据需要调整值。
编辑脚本文件后,运行以下命令重新加载systemd守护进程,然后重新启动Node-RED服务。
如果需要在Node-RED中对HTTP请求使用代理,可在nodered.service脚本文件中设置HTTP_PROXY环境变量,编辑/lib/systemd/system/nodered.service文件并添加一行:
其中,my-proxy-server-address换为实际的代理服务器IP地址,例如:
上述代码解释如下。
● Nice=5:设置进程的优先级。在这个示例中,将进程优先级设置为5。
● Environment="NODE_OPTIONS=--max-old-space-size=256":设置环境变量NODE_OPTIONS,以调整Node.js的内存限制。在这个示例中,将Node.js的最大内存限制设置为256MB。
● Environment="HTTP_PROXY=192.168.0.111":设置环境变量HTTP_PROXY,用于指定HTTP代理。在这个示例中,设置HTTP代理服务器IP地址为192.168.0.111。你可以根据需要修改代理地址。
编辑脚本文件后,运行以下命令重新加载systemd进程,然后重新启动Node-RED服务。
树莓派的硬件扩展都是通过一组GPIO接口对外扩展实现的,包括连接物联网的各种传感器、控制器等。迄今为止,通过GPIO接口已经扩展出一个树莓派的生态产业,无数的厂商在机器人、STEAM教育、微型计算机、物联网、自动化控制等领域提供对应产品。图2-13展示了树莓派的GPIO接口和定义。
图2-13 树莓派的GPIO接口和定义
一些Node-RED节点模块可与树莓派的GPIO接口进行交互。下面先介绍几个相关的模块。
注:Node-RED节点模块如何安装到Node-RED中请参考2.12节。
使用Node-RED的安装脚本时,此节点模块已与Node-RED一起预安装。它提供了一种监视和控制GPIO接口的简单方法。
Raspberry Pi OS已预先配置好让该节点正常工作。如果节点运行在不同的操作系统上,例如Ubuntu,则可能需要一些额外的安装步骤。节点的说明文件中有详细信息。
该节点模块使用pigpiod守护进程,提供了比默认节点更多的功能。例如,节点可以轻松配置为PWM输出或驱动服务。
该节点模块使用Johnny-Five库支持各种设备类型的GPIO。