基于Node-RED的边缘网关

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


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

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

开发资源汇总

开发配件清单

备注

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


配件名称


数量


规格参数

Quectel Pi M2智能主控板


2


Quectel Pi M2智能主控板

Environment Sensor HAT


1

USB摄像头模块


1

USB-C电源适配器


2

HDMI线


1


规格:HDMI 2.0;线长:1 m;接口:HDMI-A(公头)-HDMI-D(公头)

网线


1


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

HDMI显示器


1


24英寸HDMI显示器

配件实物参考

../../../_images/image_GtPpbNdOfogm5gxHEFOcbBXwnLd.webp

快速上手

开发准备

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

Quectel Pi M2 智能主控板出厂默认搭载 Debian 13 系统镜像,因此无需再次烧录镜像,仅需按照如下步骤操作即可。

硬件连接

网关端

../../../_images/image_E84Ibazivo4aYBxmSYecEmJQnNd.webp
  1. 显示连接:HDMI线一端接主控板HDMI接口,另一端接显示器HDMI接口;

  2. 网络连接:千兆网线一端接主控板千兆网口,另一端接路由器网口(替代方案:通过Wi-Fi接入同一局域网);

  3. 输入设备连接:USB键盘、鼠标接入主控板的两个USB-A接口,无线输入设备则将接收器插入USB口即可;

  4. 供电连接:USB-A电源线的USB-A端接电源适配器,USB-C端接入主控板标注 POWER IN 的电源口。

采集端

采集端设备以Quectel Pi M2 上传传感器数据和摄像头画面为示例

接口外设连接:

../../../_images/image_VNeObnmQgopADpx6vAJcQalynlg.webp
  1. 显示连接:HDMI线一端接主控板HDMI接口,另一端接显示器HDMI接口;

  2. 网络连接:千兆网线一端接主控板千兆网口,另一端接路由器网口(替代方案:通过Wi-Fi接入同一局域网);

  3. 输入设备连接:USB键盘、鼠标接入主控板的两个USB-A接口,无线输入设备则将接收器插入USB口即可;

  4. 供电连接:USB-A电源线的USB-A端接电源适配器,USB-C端接入主控板标注 POWER IN 的电源口。

环境传感器扩展板连接

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

../../../_images/image_QB1pbgKGzohgYaxeIEocawx9nRt.webp

项目实现

备注

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

网关端

1.更新软件源

sudo apt update

2.安装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 nodered.service

要禁用该服务,请运行以下命令:

sudo systemctl disable nodered.service
sudo systemctl restart nodered

3.安装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

4.初始化SQLite数据库

Node-RED SQLite节点使用的数据库路径为:/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。

5.访问Dashboard

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

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

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

../../../_images/image_RQ9ebOFKRoLKL0xrQqPclqA8nih.webp

安装必要节点:

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

node-red-node-sqlite
node-red-dashboard
../../../_images/image_BKY2bKQBxoHhtJxM8ajcL5B2nBf.webp ../../../_images/image_TiA2beORzoX2t8xaZ86cVYUZnV6.webp

6.导入Node-RED流程

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

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

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

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

../../../_images/image_DioFb29k0okYaix6BhacyEVKnhe.webp ../../../_images/image_GwkMbyLI1oxBUXxyulzcTBBrn2g.webp

采集端

采集端使用Python + paho-mqtt + smbus2,并调用mjpg-streamer输出MJPEG:

1.安装基础组件

sudo apt update
sudo apt install -y git python3-venv v4l-utils

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

安装编译依赖:

sudo apt install -y git cmake build-essential libjpeg-dev

拉取源码并编译:

cd ~
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make

3.获取代码和创建Python虚拟环境

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

cd ~/edge_h1_sensor
python3 -m venv venv
source venv/bin/activate

4.更新pip并安装OpenCV与paho-mqtt

pip install --upgrade pip opencv-python paho-mqtt
pip install -U smbus2

5.配置40Pin接口配置文件

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

6.启动程序

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

cd ~/edge_h1_sensor
source venv/bin/activate
sudo -E ~/edge_h1_sensor/venv/bin/python h1_sensor_agent.py

备注

需要修改代码,将网关端IP改成实际IP地址。

应用演示

Node-RED界面

Node-RED编辑器界面:http://``:1880

../../../_images/image_PasZbTVNbo2zmvxHt7tcQww4nbh.webp

Node-RED UI界面:http://``:1880/ui

../../../_images/image_ZIOobKLfTo4H7JxU3CkcCoRTndh.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_Rq3nbGU59o793qxJmWjcFwl4njf.webp

技术支持与贡献

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