基于Node-RED的边缘网关

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


本项目是一套基于Quectel Pi H1智能主控板构建的Node-RED边缘网关。

本项目以Quectel Pi H1智能主控板作为边缘侧计算与协议汇聚节点,在本地局域网内完成端侧设备接入、数据采集汇聚、规则编排与可视化展示,并将数据存储至本地数据库,形成“采集—处理—存储—展示”的闭环架构,适用于对实时性、可靠性与本地化部署要求较高的工业现场和边缘计算场景。

开发资源汇总

开发配件清单

备注

开发配件只是作为参考,不同的开发环境可能会有所差异,比如通过SSH远程连接进行开发,可以不使用USB扩展板扩充USB接口,显示屏也可以根据需要进行替换。

配件名称

数量

规格参数

Quectel Pi H1智能主控板

2

Quectel Pi H1智能主控板

Environment Sensor HAT

1

环境传感器扩展板

USB摄像头模组

1

OV5693 USB摄像头模组

USB-C电源适配器

2

27 W USB Type-C接口充电器1.2米线长中规电源PD电源适用于树莓派5代

CPU散热风扇(可选)

1

树莓派5代官方原装散热器带导热贴

Micro HDMI线

2

HDMI 2.0;线长:1 米;Micro-HDMI转标准HDMI连接线或Micro-HDMI线(Type-D公对Type-A公)

网线

2

线长:1 米;传输速率:千兆

显示屏

1

24英寸HDMI显示器

配件实物参考

../../../_images/image_WxNEb7vZNo5IPzxtQ8ucIAm9nIc.webp

快速上手

开发准备

本项目采用双板协同方案:主控板A(H1-A)作为边缘网关节点,负责数据汇总、Node-RED编排与大屏展示;主控板B(H1-B)作为现场采集节点,搭载环境传感器与摄像头进行数据采集。

Quectel Pi H1出厂预装Debian 13操作系统,通常无需重新烧录系统镜像。按照以下步骤操作即可:

硬件连接

网关端(H1-A)

按照以下步骤完成所有硬件连接(步骤编号与接口示意图中的标注一致):

../../../_images/image_XTgCbKUmYo6g1Rxi8GAcTk3HnWe.webp
  1. 散热风扇连接:先将散热风扇的排线插入智能主控板的 FAN 插槽中,再将散热器两端固定在主控板预留插孔中。

  2. 显示连接:将Micro HDMI线的一端连接到智能主控板的Micro HDMI接口,另一端连接到显示器的HDMI接口。

  3. 网络连接:确保路由器已接入互联网。将网线的一端连接到智能主控板的千兆以太网端口,另一端连接到路由器的以太网端口。

  4. 输入设备连接:将USB键盘、鼠标和OV5693摄像头模块等输入设备连接到智能主控板的USB接口。如果使用无线输入设备,将无线接收器连接到扩展坞的USB接口即可。

  5. 供电连接:将电源适配器接入电源,电源适配器的USB-C端连接到智能主控板的电源输入接口(建议连接好所有其他外设后再进行供电连接)。

采集端(H1-B)

  1. 网络连接

将网线一端接入智能主控板的千兆网口,另一端接入路由器的网口。

备注

若采用Wi-Fi无线连接,请确保采集端(H1-B)与网关端(H1-A)接入同一局域网(处于同一网段)。

../../../_images/image_Cz59beGV9o64u4x8AGjcNwgQnWf.webp
  1. 跳线帽连接

确认智能主控板左上角标有 AUTO_POWER_ON 丝印的排针已用跳线帽短接。

../../../_images/image_Tm9TbFHMAoUWaBxCdOTcWA4NnVp.webp
  1. 环境传感器扩展板连接

将环境传感器扩展板接到智能主控板的40-Pin排针上。

../../../_images/image_KNvmbrBuyou8tvx8UYecLw49nyd.webp

备注

注意传感器引脚对齐与朝向:将扩展板的Pin 1(通常标有圆点或方形焊盘)对准主控板40-Pin的Pin 1位置,扩展板主体朝向主板内侧平稳下压插紧,切勿错位或反插。

  1. 摄像头连接

将USB摄像头接入智能主控板的USB-A接口。

../../../_images/image_Y66tbnhDooDrAPxTfCyc7zAmngn.webp
  1. 供电连接

将电源适配器接入电源,电源适配器的USB-C端接入智能主控板的电源口(标注为 POWER IN)。

../../../_images/image_BZwobD5q7ovb7px9pm1cDxbqnHc.webp
  1. 连接完成参考

../../../_images/image_ZINebq03tofMNexrtbXc4LXNnfe.webp

项目实现

备注

本节按“网关端/采集端”拆分,便于部署。

网关端(H1-A)

  1. 更新软件源

sudo apt update
  1. 安装Node-RED

sudo apt install build-essential git curl
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

设置开机自启:

sudo systemctl enable --now nodered.service
sudo systemctl status nodered.service

要禁用开机自启服务,请运行以下命令:

sudo systemctl disable nodered.service
sudo systemctl restart nodered
  1. 安装Mosquitto和SQLite3

sudo apt install -y sqlite3 mosquitto mosquitto-clients

设置开机自启:

sudo systemctl enable --now mosquitto

创建并编辑Mosquitto配置文件:

sudo nano /etc/mosquitto/conf.d/edge-listener.conf

写入以下配置,然后依次按 Ctrl+O、Enter、Ctrl+X 保存并退出:

listener 1883 0.0.0.0
allow_anonymous true

重启服务:

sudo systemctl restart mosquitto
  1. 初始化SQLite数据库

Node-RED的SQLite节点使用的数据库路径为(路径中的用户名 pi 请根据实际情况替换):/home/pi/edge_db/edge.db。

先创建目录并初始化表结构:

mkdir -p ~/edge_db
sqlite3 ~/edge_db/edge.db << 'SQL'
CREATE TABLE IF NOT EXISTS telemetry (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  deviceId   TEXT    NOT NULL,
  ts         INTEGER,
  gatewayTs  INTEGER,
  temperature REAL,
  humidity    REAL,
  pressure    REAL
);

CREATE INDEX IF NOT EXISTS idx_telemetry_device_ts ON telemetry(deviceId, ts);
SQL

备注

Node-RED写入数据库的字段为 (deviceId, ts, gatewayTs, temperature, humidity, pressure),并通过解析主题 edge/v1/<deviceId>/telemetry 获取 deviceId。

  1. 访问Dashboard

如果在智能主控板的桌面上使用浏览器,可直接打开 http://localhost:1880。

从另一台设备访问时,使用智能主控板的主机名或IP地址(在智能主控板上运行 hostname -I 可查看IP地址),访问地址:http://<网关端IP>:1880。

进入后的网页界面如下图:

../../../_images/image_KHJ5bLEyyoEcfrxaFPwcWzwZn4d.webp

安装必要节点:

进入编辑器后,依次点击右上角菜单、Settings、Palette、Install 进入节点安装界面,搜索并安装以下节点:

node-red-node-sqlite
node-red-dashboard
../../../_images/image_LMlHb88S1o1WItx4HeOcJNNOnGe.webp ../../../_images/image_P593b7ZZ9ov77ixMGgjcTGQpnvb.webp
  1. 导入Node-RED流程

1)将 flow.json 文件放置在 .node-red/lib/flows/ 下。

mkdir -p ~/.node-red/lib/flows
cd ~/.node-red/lib/flows/

2)在编辑器界面依次点击右上角菜单、Import、Local,选择 flow.json 后点击 Import。

3)将流程导入后点击 Deploy 使流程生效。

../../../_images/image_QQxkb5cgFoUVR5xVrcJcULvHntg.webp ../../../_images/image_KOH3bEkQeoNo77xIVtrcBZ36nHc.webp

采集端(H1-B)

采集端使用Python、paho-mqtt和smbus2实现,并调用mjpg-streamer输出MJPEG视频流:

  1. 安装基础组件

sudo apt update
sudo apt install -y git python3-venv v4l-utils cmake build-essential libjpeg-dev
  1. 配置40-Pin接口

使能40-Pin接口的I2C:在终端输入 sudo qpi-config 40pin set,然后重启智能主控板使配置生效。

  1. 安装mjpg-streamer(用于输出MJPEG视频流)

拉取源码并编译:

cd ~
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make && sudo make install
  1. 获取代码和创建Python虚拟环境

将 代码 文件夹 edge_h1_sensor 放置于用户目录 /home/pi 下,然后执行以下命令:

cd ~/edge_h1_sensor
python3 -m venv venv
source venv/bin/activate
  1. 更新pip并安装OpenCV与paho-mqtt

pip install --upgrade pip opencv-python paho-mqtt
pip install -U smbus2
  1. 启动程序

回到项目代码目录,激活Python虚拟环境并运行程序:

cd ~/edge_h1_sensor
source venv/bin/activate

# 示例程序代码需根据实际IP地址修改
sudo -E ~/edge_h1_sensor/venv/bin/python h1_sensor_agent.py

应用演示

Node-RED界面

Node-RED流编辑器(Flow Editor):http://<网关端IP>:1880 或 * http://localhost:1880* 。

../../../_images/image_JIfdbmhmjodJ8mxo2o7cMtb3nKe.webp

边缘网关可视化看板(Dashboard):http://<网关端IP>:1880/ui 或 http://localhost:1880/ui 。

../../../_images/image_SP2ybCYpdoYuLYxWkEfc8BiOnSh.webp

数据库数据查询示例

网关端将遥测数据写入SQLite数据库,默认配置如下:

  • 数据库文件:/home/pi/edge_db/edge.db。

  • 数据表:telemetry。

  • 字段:deviceId, ts, gatewayTs, temperature, humidity, pressure。

进入数据库

sqlite3 /home/pi/edge_db/edge.db

查看表与表结构

.tables
.schema telemetry

查看最新数据

将 h1-sensecam-001 替换为实际的设备ID:

SELECT deviceId, ts, gatewayTs, temperature, humidity, pressure
FROM telemetry
WHERE deviceId = 'h1-sensecam-001'
ORDER BY ts DESC
LIMIT 20;

将时间戳转换为可读时间

ts 单位:毫秒。

SELECT
  deviceId,
  datetime(ts/1000, 'unixepoch', 'localtime') AS time_local,
  temperature, humidity, pressure
FROM telemetry
WHERE deviceId = 'h1-sensecam-001'
ORDER BY ts DESC
LIMIT 20;
../../../_images/image_NXOlbBKceo7VH2xJNAZcAusYnxc.webp

技术支持与贡献

如在使用过程中遇到问题,欢迎在 移远通信官方论坛 提交技术咨询,我们的技术支持团队将及时为您解答。