🍓 第十三章 IoT 实验范例:温湿度监控与 Node-RED
📄 一句话概括

Node-RED 把【写代码】变成【连电线】:每个功能是一个节点(定时、取数、判断、发请求),拖进画布用线连起来、点一下 Deploy 就运行——IoT 的胶水层从此不用写代码;本节装好它、锁好门、连出第一条流。

📝 本节和前面几节的关系

13-2 的 Flask 网站要你写全每一行;Node-RED 是它的【积木版】:定时器、HTTP 请求这些常见件全有人做好,你只管拼。13-1 说的 MQTT broker、13-3 的 HTTP 上传,在 Node-RED 里都是现成节点——它不替代传感器代码(那还是 Python+gpiozero 的地盘),它替代的是【胶水代码】。

一、五个词读懂 Node-RED

心智模型: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 即进编辑器。四件必做与必知:

⚠️ 老教程哪几处已失效(本章防坑段 ③)
  1. 编辑器默认没有密码——局域网里任何人都能改你的流!上线前必锁:node-red admin hash-pw 生成密码哈希,填进 ~/.node-red/settings.js 的 adminAuth 段,node-red-restart 生效;
  2. 别用 apt/npm 裁装——apt 仓库版本旧、npm i -g node-red 缺 systemd 配置;只有官方脚本一条正路;
  3. 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 订阅);
  4. 老教程的 node-red-pi --max-old-space-size=256——那是 Pi Zero 1G 时代的内存勒紧术;Pi 4/5 不需要。

三、动手 Demo:第一条流——定时消息走传送带

不接任何硬件,纯软件跑通【建流→部署→看消息】:

  1. 从左侧节点栏拖一个 inject 进画布(默认每分钟注入一次时间戳);
  2. 拖一个 debug 节点,双击它确认输出选 msg.payload;
  3. 从 inject 右侧小圆点拉一根线到 debug;
  4. 右上角点 Deploy;
  5. 点 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 这类取值就毫无神秘感。

五、常见误区

  1. 改了流忘了点 Deploy——画布改动只在浏览器里,不部署不生效;标签页上会出现【未部署改动】的小圆点。
  2. 以为 Node-RED 直接接管 GPIO 最方便——Pi 5 上两个 GPIO 节点全踩雷(防坑段 3);分工才是正路:Python 管硬件、Node-RED 管流转与展示,两者用 HTTP/MQTT 交接。
  3. debug 节点打印整个 msg 而找不到 payload——输出选 complete msg object 时信息量巨大,想看数据值就选 msg.payload;两者别混。
  4. 把 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?——编辑器默认无密码,局域网内任何人都能改你的流并间接操作设备。

相关笔记