Node-RED 把【写代码】变成【连电线】:每个功能是一个节点(定时、取数、判断、发请求),拖进画布用线连起来、点一下 Deploy 就运行——IoT 的胶水层从此不用写代码;本节装好它、锁好门、连出第一条流。
13-2 的 Flask 网站要你写全每一行;Node-RED 是它的【积木版】:定时器、HTTP 请求这些常见件全有人做好,你只管拼。13-1 说的 MQTT broker、13-3 的 HTTP 上传,在 Node-RED 里都是现成节点——它不替代传感器代码(那还是 Python+gpiozero 的地盘),它替代的是【胶水代码】。
一、五个词读懂 Node-RED
- 节点(node):一个功能积木。输入类(inject 定时注入、http in 收请求、mqtt in 订阅)、处理类(function 写 JS、switch 分流、change 改字段)、输出类(debug 打印、http response 回应、file 存文件)
- 连线(wire):消息(msg)沿连线流动;msg.payload 是默认主角
- 流(flow):一张画布上连成一串的节点组合,存成 JSON
- 部署(Deploy):右上角一键,改动即刻生效,不用重启服务
- 调色板(palette):节点商店,社区五千多种,装来即用
心智模型:Flask 是【函数调函数】,Node-RED 是【传送带接力】——msg 从左往右流,每个节点接力改造它。
二、安装与开门五件事
官方安装脚本(自己装 Node.js 22 LTS+systemd 服务,别用 npm 全局装):
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
node-red-start # 启动(stop/log/restart 同族)
浏览器打开 http://<树莓派IP>:1880 即进编辑器。四件必做与必知:
- 编辑器默认没有密码——局域网里任何人都能改你的流!上线前必锁:
node-red admin hash-pw生成密码哈希,填进~/.node-red/settings.js的adminAuth段,node-red-restart生效; - 别用 apt/npm 裁装——apt 仓库版本旧、
npm i -g node-red缺 systemd 配置;只有官方脚本一条正路; - GPIO 节点在 Pi 5 上双坑——
node-red-node-pi-gpio底层是 RPi.GPIO(Pi 5 失效);node-red-node-pi-gpiod底层是 pigpiod(Trixie 仓库已退场)。正路=GPIO 交给 Python(gpiozero)采好,Node-RED 只吃现成数据(http in 收 13-2 式的上报,或 mqtt in 订阅); - 老教程的
node-red-pi --max-old-space-size=256——那是 Pi Zero 1G 时代的内存勒紧术;Pi 4/5 不需要。
三、动手 Demo:第一条流——定时消息走传送带
不接任何硬件,纯软件跑通【建流→部署→看消息】:
- 从左侧节点栏拖一个 inject 进画布(默认每分钟注入一次时间戳);
- 拖一个 debug 节点,双击它确认输出选
msg.payload; - 从 inject 右侧小圆点拉一根线到 debug;
- 右上角点 Deploy;
- 点 inject 节点左侧的小方块(手动触发一次)。
看到什么算成功:右侧调试面板打印出形如 2026-09-24 ... 的时间戳字符串;inject 的定时触发每分钟自动刷一条——你已经写出了第一个不写代码的 Node-RED 程序。
读结果:双击 inject 看配置——它默认 payload 是 timestamp,可改成字符串/数字/JSON。这根【inject→debug】的线是所有实验的试电笔:以后任何新节点,先用它喂一段样例数据看输出,再接进真流。
四、30 秒实验:把定时器调快,看 msg 的结构
双击 inject,把重复间隔改成 every 1 seconds,Deploy;再把 debug 的输出从 msg.payload 改成 complete msg object。
看到什么算成功:调试面板每秒刷出一整个对象——_msgid(消息身份证,每条不同)、topic、payload……这就是 msg 的真面目:一个普通 JS 对象。看完把间隔改回 1 分钟,否则面板很快刷成瀑布。理解了 msg 是对象,13-5 的 function 节点里 msg.payload.temperature 这类取值就毫无神秘感。
五、常见误区
- 改了流忘了点 Deploy——画布改动只在浏览器里,不部署不生效;标签页上会出现【未部署改动】的小圆点。
- 以为 Node-RED 直接接管 GPIO 最方便——Pi 5 上两个 GPIO 节点全踩雷(防坑段 3);分工才是正路:Python 管硬件、Node-RED 管流转与展示,两者用 HTTP/MQTT 交接。
- debug 节点打印整个 msg 而找不到 payload——输出选
complete msg object时信息量巨大,想看数据值就选msg.payload;两者别混。 - 把 function 节点当 Python 写——function 节点里是 JavaScript(
msg.payload.toFixed(1)这种),不是 Python;写错语言 Deploy 时立刻报错,别惊讶。
自测三问(点开对答案)
1. Node-RED 的五个核心词是什么?——节点、连线、流、部署、调色板。 2. Pi 5 上两个 GPIO 节点分别死于什么?正路是什么?——pi-gpio 死于 RPi.GPIO 不支持 RP1、pi-gpiod 死于 pigpiod 在 Trixie 退场;正路=Python+gpiozero 采集、Node-RED 经 HTTP/MQTT 吃现成数据。 3. 为什么装完第一件事是加 adminAuth?——编辑器默认无密码,局域网内任何人都能改你的流并间接操作设备。- ☐ 下一节(13-5 物联网实验范例:Node-RED 仪表板)
相关笔记
- Web 界面的 GPIO 控制 —— Python 侧采集上报的原型
- 物联网实验范例:温湿度监控与 ThingSpeak —— 同一份数据的另一条去路(云端)
- 架设 Web 服务器 —— 端口与 HTTP 服务的先修
- 🍓 树莓派 · 索引 —— 全课路线图