# 基于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
|

Quectel Pi H1智能主控板
| | Environment Sensor HAT |

1
|

环境传感器扩展板
| | USB摄像头模块 |

1
|

OV5693 USB摄像头模块
| | USB-C电源适配器 |

1
|

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

1
|

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

1
|

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

1
|

线长:1m;传输速率:千兆;
| | 显示屏 |

1
|

24英寸HDMI显示器
| ## 配件实物参考 ```{image} images/image_IKzNbfENpouy3bxfTP9cmOuAnac.webp :width: 553px :height: 316px ``` # 快速上手 ## 开发准备 **Quectel Pi H1** 智能主控板出厂默认搭载 **Debian 13** 系统镜像,因此无需再次烧录镜像,仅需按照如下步骤操作即可。 ## 硬件连接 ### 网关端(H1-A) **1.显示连接** 将HDMI线一端接入智能主控板的HDMI接口,另一端接入显示器的HDMI接口。 ```{image} images/image_Saj1bhcPhom86axMPsTc3Q39njg.webp :width: 554px :height: 314px ``` **2.输入设备连接** 将USB键盘、鼠标接入智能主控板的两个USB-A接口上,若用无线输入设备,将接收器插入USB口即可。 ```{image} images/image_RRCHbvEhjoXdBwxwvyKcqikMnbg.webp :width: 554px :height: 328px ``` **3.网络连接** 将网线一端接入智能主控板的千兆网口,另一端接入路由器的网口 > 平替方案:Wi-Fi连接同一局域网网络。 ```{image} images/image_PZKgbaV9Cocq6WxHFkvcXPqznGh.webp :width: 554px :height: 347px ``` **4.跳线帽连接** 智能主控板左上角标有 **AUTO_POWER_ON** 丝印的排针,确保已经用跳线帽短接。 ```{image} images/image_FpFcbmp7joF9fuxpThOcy4g6nxc.webp :width: 541px :height: 330px ``` **5.供电连接** 将USB-A电源线的USB-A端接入电源适配器,USB-C端接入智能主控板的电源口(标注 **POWER IN**)。 ```{image} images/image_DodQb4LM4ojqMSxHwINcGDxnnjb.webp :width: 554px :height: 380px ``` **6.连接完成参考** ```{image} images/image_ZuIQbEJHTowqN9xvWnQcj8zunNc.webp :width: 554px :height: 395px ``` ### 采集端(H1-B) **1.网络连接** 将网线一端接入智能主控板的千兆网口,另一端接入路由器的网口 > 平替方案:使用WiFi连接同一局域网网络。 ```{image} images/image_XB9Bb5CJmoT9QkxAdnGcQCoMnlh.webp :width: 554px :height: 347px ``` **2.跳线帽连接** 智能主控板左上角标有 **AUTO_POWER_ON** 丝印的排针,确保已经用跳线帽短接。 ```{image} images/image_I0XlbfrEhogWDtxA1QdcFOr8nUf.webp :width: 541px :height: 330px ``` **3.环境传感器扩展板连接** 将环境传感器扩展板与Quectel Pi H1 40Pin引脚相接 ```{image} images/image_J8gTb0KXDoJPBXxtmMNcx99dnxc.webp :width: 554px :height: 341px ``` **4.摄像头连接** USB摄像头连接上USB-A接口即可。 ```{image} images/image_XDASbGrmOo9oZdxBuQocAsHAnxd.webp :width: 554px :height: 396px ``` **5.供电连接** 将USB-A电源线的USB-A端接入电源适配器,USB-C端接入智能主控板的电源口(标注 **POWER IN**)。 ```{image} images/image_OQOobzE0QoZDojxRuA0cjh7xnmf.webp :width: 554px :height: 380px ``` **6.连接完成参考** ```{image} images/image_WOLNbxOXFoGAFkxRu1Yc4ca2nTb.webp :width: 554px :height: 386px ``` ## 项目实现 > 本节按“网关端/采集端”拆分,便于部署。 ### 网关端(H1-A) **1.更新软件源** ```plaintext sudo apt update ``` **2.安装Node-RED** ```plaintext sudo apt install build-essential git curl ``` ```plaintext bash <(curl -sL https://github.com/node-red/linux-installers/releases/latest/download/update-nodejs-and-nodered-deb) ``` 设置开机时自启动: ```plaintext sudo systemctl enable nodered.service ``` 要禁用该服务,请运行以下命令: ```plaintext sudo systemctl disable nodered.service sudo systemctl restart nodered ``` **3.安装Mosquitto和SQLite3** ```plaintext sudo apt install -y sqlite3 mosquitto mosquitto-clients ``` 设置开机自启动 ```plaintext sudo systemctl enable --now mosquitto ``` 创建并编辑Mosquitto的配置 ```plaintext sudo nano /etc/mosquitto/conf.d/edge-listener.conf ``` 配置如下,*ctrl+o,enter,ctrl+x* 保存退出 ```plaintext listener 1883 0.0.0.0 allow_anonymous true ``` 重启服务 ```plaintext 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 ``` > Node-RED写库字段为 *(deviceId, ts, gatewayTs, temperature, humidity, pressure)*,并通过解析主题 *edge/v1/``/telemetry* 获取deviceId。 **5.访问Dashboard** 如果你在Pi桌面上使用浏览器,可以打开地址:[http://localhost:1880]()。 在从另一台机器浏览时,使用Pi的主机名或IP地址:你可以通过在Pi上运行 *hostname -I* 来找到IP地址。*http://``:1880* 进去网页界面如下图: ```{image} images/image_Vg9Hb5RQGo966QxzbYEcYtLLnAb.webp :width: 1920px :height: 1080px ``` 安装必要节点: 进入编辑器后,依次点击右上角、*Settings*、*Palette*、*Install* 进入到节点安装界面,搜索下面节点安装。 ```plaintext node-red-node-sqlite node-red-dashboard ``` ```{image} images/image_Q88JbNxxKohbqIxHTtscSjqunmd.webp :width: 376px :height: 608px ``` ```{image} images/image_LHJvbbrrmobUirxeJFJc5HISnPb.webp :width: 1675px :height: 941px ``` **6.导入Node-RED流程** 1.将flow.json文件放置在 *.node-red/lib/flows/* 下。 ```plaintext cd ~/.node-red/lib/flows/ ``` 2.在编辑器界面依次点击右上角,*Import*、*Local*、然后选择 *flow.json*、*Import*。 3.将流程导入后点击 *Deploy* 使流程生效。 ```{image} images/image_DHMQbispUoxyXFxl5KgciwfDnIg.webp :width: 327px :height: 483px ``` ```{image} images/image_LGUdbGTaUoB5RgxcjLVcdJUmnRe.webp :width: 732px :height: 576px ``` ### 采集端(H1-B) 采集端使用Python + paho-mqtt + smbus2,并调用mjpg-streamer输出MJPEG: **1.安装基础组件** ```plaintext sudo apt update sudo apt install -y git python3-venv v4l-utils ``` **2.安装mjpg-streamer(用于输出MJPEG视频流)** 安装编译依赖: ```plaintext sudo apt install -y git cmake build-essential libjpeg-dev ``` 拉取源码并编译: ```plaintext cd ~ git clone https://github.com/jacksonliam/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental make ``` **3.获取代码和创建Python虚拟环境** [代码]() 文件夹(***edge_h1_sensor***)放置于用户目录 */home/pi* 下, ```plaintext cd ~/edge_h1_sensor python3 -m venv venv source venv/bin/activate ``` **4.更新pip并安装OpenCV与paho-mqtt** ```plaintext 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虚拟环境运行程序: ```plaintext 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* ```{image} images/image_EPOdbWPZvondZxxQ6OMc9QPdnbc.webp :width: 1920px :height: 1080px ``` Node-RED UI界面:*http://``:1880/ui* ```{image} images/image_ACv7bwDjFo2GwNxbMRycFF8Knxh.webp :width: 1920px :height: 1080px ``` ## 数据库数据查询示例 本项目网关端将遥测数据写入SQLite数据库,默认路径为: - 数据库文件:*/home/pi/edge_db/edge.db* - 数据表:*telemetry* - 字段:*deviceId, ts, gatewayTs, temperature, humidity, pressure* ### 进入数据库 ```plaintext 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_BXiZbnd83oSjraxnbgYcTm7bnlc.webp :width: 529px :height: 495px ``` # 技术支持与贡献 如在使用过程中遇到问题,欢迎在 [移远官方论坛]() 提交技术咨询,我们的技术支持团队将及时为您解答。