# 基于Node-RED的边缘网关
***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.***
---
本项目是一套基于 **Quectel Pi M2智能主控板** 构建的 **Node-RED边缘网关**。
以Quectel Pi M2作为边缘侧计算与协议汇聚节点,在本地局域网内完成端侧设备接入、数据采集汇聚、规则编排与可视化展示,并将数据落地存储至本地数据库,实现“采集—处理—存储—展示”的闭环架构,适用于对实时性、可靠性与本地化部署要求较高的工业现场与边缘计算场景。
# 开发资源汇总
## 开发配件清单
```{note}
开发配件只是作为参考,不同的开发环境可能会有所差异,比如通过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显示器
|
## 配件实物参考
```{image} images/image_GtPpbNdOfogm5gxHEFOcbBXwnLd.webp
:width: 1046px
:height: 621px
:align: center
```
# 快速上手
## 开发准备
本项目采用双板协同方案:主控板 A作为边缘网关节点,负责数据汇总、Node-RED 编排与大屏展示;主控板 B作为现场采集节点,搭载环境传感器与摄像头进行数据采集。
**Quectel Pi M2** 智能主控板出厂默认搭载 **Debian 13** 系统镜像,因此无需再次烧录镜像,仅需按照如下步骤操作即可。
## 硬件连接
### 网关端
```{image} images/image_E84Ibazivo4aYBxmSYecEmJQnNd.webp
:width: 627px
:height: 463px
:align: center
```
1. **显示连接**:HDMI线一端接主控板HDMI接口,另一端接显示器HDMI接口;
2. **网络连接**:千兆网线一端接主控板千兆网口,另一端接路由器网口(替代方案:通过Wi-Fi接入同一局域网);
3. **输入设备连接**:USB键盘、鼠标接入主控板的两个USB-A接口,无线输入设备则将接收器插入USB口即可;
4. **供电连接**:USB-A电源线的USB-A端接电源适配器,USB-C端接入主控板标注 **POWER IN** 的电源口。
### 采集端
采集端设备以Quectel Pi M2 上传传感器数据和摄像头画面为示例
**接口外设连接:**
```{image} images/image_VNeObnmQgopADpx6vAJcQalynlg.webp
:width: 627px
:height: 463px
:align: center
```
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排针上。
```{image} images/image_QB1pbgKGzohgYaxeIEocawx9nRt.webp
:width: 1126px
:height: 844px
:align: center
```
## 项目实现
```{note}
本节按“网关端/采集端”拆分,便于部署。
```
### 网关端
**1.更新软件源**
```bash
sudo apt update
```
**2.安装Node-RED**
```bash
sudo apt install build-essential git curl
```
```bash
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
```
设置开机时自启动:
```bash
sudo systemctl enable nodered.service
```
要禁用该服务,请运行以下命令:
```bash
sudo systemctl disable nodered.service
sudo systemctl restart nodered
```
**3.安装Mosquitto和SQLite3**
```bash
sudo apt install -y sqlite3 mosquitto mosquitto-clients
```
设置开机自启动:
```bash
sudo systemctl enable --now mosquitto
```
创建并编辑Mosquitto配置文件:
```bash
sudo nano /etc/mosquitto/conf.d/edge-listener.conf
```
写入以下配置,然后依次按 *Ctrl+O*、*Enter*、*Ctrl+X* 保存并退出:
```bash
listener 1883 0.0.0.0
allow_anonymous true
```
重启服务:
```bash
sudo systemctl restart mosquitto
```
**4.初始化SQLite数据库**
Node-RED SQLite节点使用的数据库路径为:*/home/pi/edge_db/edge.db*
请先创建目录并初始化表结构:
```plaintext
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
```
```{note}
Node-RED写库字段为 *(deviceId, ts, gatewayTs, temperature, humidity, pressure)*,并通过解析主题 *edge/v1/``/telemetry* 获取deviceId。
```
**5.访问Dashboard**
如果在智能主控板的桌面上使用浏览器,可直接打开 [http://localhost:1880]()。
从另一台设备访问时,使用智能主控板的主机名或IP地址(在智能主控板上运行 *hostname -I* 可查看IP地址),访问地址为 *http://``:1880*。
进入后的网页界面如下图:
```{image} images/image_RQ9ebOFKRoLKL0xrQqPclqA8nih.webp
:width: 1920px
:height: 1080px
```
安装必要节点:
进入编辑器后,依次点击右上角菜单、**Settings**、**Palette**、**Install** 进入节点安装界面,搜索并安装以下节点:
```plaintext
node-red-node-sqlite
node-red-dashboard
```
```{image} images/image_BKY2bKQBxoHhtJxM8ajcL5B2nBf.webp
:width: 376px
:height: 608px
```
```{image} images/image_TiA2beORzoX2t8xaZ86cVYUZnV6.webp
:width: 1675px
:height: 941px
```
**6.导入Node-RED流程**
1.将 *flow.json* 文件放置在 *.node-red/lib/flows/* 下。
```bash
cd ~/.node-red/lib/flows/
```
2.在编辑器界面依次点击右上角菜单、**Import**、**Local**,选择 *flow.json* 后点击 **Import**。
3.将流程导入后点击 **Deploy** 使流程生效。
```{image} images/image_DioFb29k0okYaix6BhacyEVKnhe.webp
:width: 327px
:height: 483px
```
```{image} images/image_GwkMbyLI1oxBUXxyulzcTBBrn2g.webp
:width: 732px
:height: 576px
```
### 采集端
采集端使用Python + paho-mqtt + smbus2,并调用mjpg-streamer输出MJPEG:
**1.安装基础组件**
```bash
sudo apt update
sudo apt install -y git python3-venv v4l-utils
```
**2.安装mjpg-streamer(用于输出MJPEG视频流)**
安装编译依赖:
```bash
sudo apt install -y git cmake build-essential libjpeg-dev
```
拉取源码并编译:
```bash
cd ~
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make
```
**3.获取代码和创建Python虚拟环境**
[代码]() 文件夹(***edge_h1_sensor***)放置于用户目录 */home/pi* 下,然后执行以下命令:
```bash
cd ~/edge_h1_sensor
python3 -m venv venv
source venv/bin/activate
```
**4.更新pip并安装OpenCV与paho-mqtt**
```bash
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虚拟环境并运行程序:
```bash
cd ~/edge_h1_sensor
source venv/bin/activate
sudo -E ~/edge_h1_sensor/venv/bin/python h1_sensor_agent.py
```
```{note}
需要修改代码,将网关端IP改成实际IP地址。
```
# 应用演示
## Node-RED界面
Node-RED编辑器界面:*http://``:1880*
```{image} images/image_PasZbTVNbo2zmvxHt7tcQww4nbh.webp
:width: 1920px
:height: 1080px
```
Node-RED UI界面:*http://``:1880/ui*
```{image} images/image_ZIOobKLfTo4H7JxU3CkcCoRTndh.webp
:width: 1920px
:height: 1080px
```
## 数据库数据查询示例
本项目网关端将遥测数据写入SQLite数据库,默认路径为:
- 数据库文件:*/home/pi/edge_db/edge.db*
- 数据表:*telemetry*
- 字段:*deviceId, ts, gatewayTs, temperature, humidity, pressure*
### 进入数据库
```bash
sqlite3 /home/pi/edge_db/edge.db
```
### 查看表与表结构
```plaintext
.tables
.schema telemetry
```
### 查看最新数据
将 *h1-sensecam-001* 替换为实际设备ID:
```plaintext
SELECT deviceId, ts, gatewayTs, temperature, humidity, pressure
FROM telemetry
WHERE deviceId = 'h1-sensecam-001'
ORDER BY ts DESC
LIMIT 20;
```
### 将时间戳转换为可读时间
*ts* 单位:毫秒。
```plaintext
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;
```
```{image} images/image_Rq3nbGU59o793qxJmWjcFwl4njf.webp
:width: 529px
:height: 495px
```
# 技术支持与贡献
如在使用过程中遇到问题,欢迎在 [移远官方论坛]() 提交技术咨询,我们的技术支持团队将及时为您解答。