基于Node-RED的边缘网关¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
本项目是一套基于 Quectel Pi H1智能主控板 构建的 Node-RED边缘网关。
以Quectel Pi H1作为边缘侧计算与协议汇聚节点,在本地局域网内完成端侧设备接入、数据采集汇聚、规则编排与可视化展示,并将数据落地存储至本地数据库,实现“采集—处理—存储—展示”的闭环架构,适用于对实时性、可靠性与本地化部署要求较高的工业现场与边缘计算场景。
开发资源汇总¶
开发配件清单¶
开发配件只是作为参考,不同的开发环境可能会有所差异,比如通过ssh远程连接进行开发,可以不使用USB拓展板,显示屏也可以根据需要进行替换。
配件名称 |
数量 |
规格参数 |
|---|---|---|
Quectel Pi H1智能主控板 |
2 |
|
Environment Sensor HAT |
1 |
|
USB摄像头模块 |
1 |
|
USB-C电源适配器 |
1 |
|
CPU散热风扇 |
1 |
|
HDMI线 |
1 |
规格:HDMI 2.0;线长:1m;接口:HDMI-A(公头)-HDMI-D(公头) |
网线 |
1 |
线长:1m;传输速率:千兆; |
显示屏 |
1 |
24英寸HDMI显示器 |
配件实物参考¶
快速上手¶
开发准备¶
Quectel Pi H1 智能主控板出厂默认搭载 Debian 13 系统镜像,因此无需再次烧录镜像,仅需按照如下步骤操作即可。
硬件连接¶
网关端(H1-A)¶
1.显示连接
将HDMI线一端接入智能主控板的HDMI接口,另一端接入显示器的HDMI接口。
2.输入设备连接
将USB键盘、鼠标接入智能主控板的两个USB-A接口上,若用无线输入设备,将接收器插入USB口即可。
3.网络连接
将网线一端接入智能主控板的千兆网口,另一端接入路由器的网口
平替方案:Wi-Fi连接同一局域网网络。
4.跳线帽连接
智能主控板左上角标有 AUTO_POWER_ON 丝印的排针,确保已经用跳线帽短接。
5.供电连接
将USB-A电源线的USB-A端接入电源适配器,USB-C端接入智能主控板的电源口(标注 POWER IN)。
6.连接完成参考
采集端(H1-B)¶
1.网络连接
将网线一端接入智能主控板的千兆网口,另一端接入路由器的网口
平替方案:使用WiFi连接同一局域网网络。
2.跳线帽连接
智能主控板左上角标有 AUTO_POWER_ON 丝印的排针,确保已经用跳线帽短接。
3.环境传感器扩展板连接
将环境传感器扩展板与Quectel Pi H1 40Pin引脚相接
4.摄像头连接
USB摄像头连接上USB-A接口即可。
5.供电连接
将USB-A电源线的USB-A端接入电源适配器,USB-C端接入智能主控板的电源口(标注 POWER IN)。
6.连接完成参考
项目实现¶
本节按“网关端/采集端”拆分,便于部署。
网关端(H1-A)¶
1.更新软件源
sudo apt update
2.安装Node-RED
sudo apt install build-essential git curl
bash <(curl -sL https://github.com/node-red/linux-installers/releases/latest/download/update-nodejs-and-nodered-deb)
设置开机时自启动:
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
如果你在Pi桌面上使用浏览器,可以打开地址:http://localhost:1880。
在从另一台机器浏览时,使用Pi的主机名或IP地址:你可以通过在Pi上运行 hostname -I 来找到IP地址。http://`
进去网页界面如下图:
安装必要节点:
进入编辑器后,依次点击右上角、Settings、Palette、Install 进入到节点安装界面,搜索下面节点安装。
node-red-node-sqlite
node-red-dashboard
6.导入Node-RED流程
1.将flow.json文件放置在 .node-red/lib/flows/ 下。
cd ~/.node-red/lib/flows/
2.在编辑器界面依次点击右上角,Import、Local、然后选择 flow.json、Import。
3.将流程导入后点击 Deploy 使流程生效。
采集端(H1-B)¶
采集端使用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接口配置文件
使能40Pin的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://`
Node-RED UI界面:http://`
数据库数据查询示例¶
本项目网关端将遥测数据写入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;
技术支持与贡献¶
如在使用过程中遇到问题,欢迎在 移远官方论坛 提交技术咨询,我们的技术支持团队将及时为您解答。