Skip to content

Repository files navigation

Zephyr 工业边缘网关

基于 zephyr_framework 的工业边缘网关参考设计。支持 CAN/485/Modbus/以太网多工业协议、自适应阈值异常检测、多云平台数据上云、断网续传。

👤 硬核嵌入式 —— 电气自动化转行嵌入式,正在用这套框架让一台两轮平衡车真正站起来(已实现首次自主站立 42s,全程真机实录) 📝 连载:知乎《平衡车调试笔记》·《真实工程重构实录》 | 📮 公众号「硬核嵌入式」 | 🌍 知识星球「硬核嵌入式」 | 📺 B 站「硬核嵌入式」 👉 完整介绍与内容索引

版本 v2.0
目标硬件 野火 RT1052 Pro / STM32H743 Pro / Nucleo L4R5ZI(验证)
开源许可 GPL-3.0(开源层)+ 商业模块授权(Pro 层)

架构概览

src/gateway/
├── gateway_init.c          # 业务入口:事件订阅总控
├── gateway_events.h/c      # 事件类型定义 + JSON 格式化
├── gateway_config.h        # 模块公共配置 + SYS_INIT 优先级
├── protocol_can.c/h        # CAN 总线数据采集
├── protocol_modbus.c/h     # Modbus RTU Master (UART/485)
├── network_manager.c/h     # 网络链路状态管理
├── protocol_mqtt.c/h       # MQTT 连接管理 + 认证接口
├── anomaly_detection.c/h   # 滑动窗口自适应阈值异常检测
├── cloud_upload.c/h        # 云数据上传业务(JSON格式化 + 速率控制 + 离线缓存触发)
├── cloud_provider.c/h      # 云平台抽象层(Provider 注册表 + 多播分发)
├── cloud_private.c/h       # 私有 MQTT Broker Provider
├── cloud_aliyun.c/h        # 阿里云 IoT 平台 Provider
├── cloud_tencent.c/h       # 腾讯云 IoT Hub Provider
├── cloud_aws.c/h           # AWS IoT Core Provider
├── offline_cache.c/h       # 断网续传本地缓存 (NVS)
└── webshell.c/h            # Shell 命令扩展

事件流

sensor 数据流(含 CAN/Modbus 原始帧)已迁移到 data_bus(详见 docs/industrial_gateway_design.md);event_system 仅承载告警与 网络状态等低频事件。

data_simulator / protocol_can / protocol_modbus
        │
        │ gateway_sensor_publish()
        ▼
data_bus 通道 "sensor" ──┬──> anomaly_detection
                          │          │
                          │          ├──EVENT_TYPE_ANOMALY_*──> cloud_upload
                          │                                   │
                          │                                   ├──(JSON格式化 + 速率控制)
                          │                                   │
                          │                                   └──> cloud_provider_publish_all()
                          │                                               │
                          │                   ┌───────────────────────────┼───────────────────────────┐
                          │                   ↓                           ↓                           ↓
                          │            cloud_private              cloud_aliyun              cloud_tencent
                          │                   │                           │                           │
                          │                   └──> protocol_mqtt     protocol_mqtt            protocol_mqtt
                          │
                          └──> cloud_upload (旁路订阅)
                                       │
                          (任一 Provider 失败) ──> cloud_handle_offline() ──> offline_cache
                                                                                  │
                                                                                  │(网络恢复)
                                                                                  └──> EVENT_TYPE_CLOUD_UPLOAD ──> cloud_upload (重发)

多云平台支持

通过 cloud_provider 抽象层,支持单云接入多云并行

平台 认证方式 特殊需求 Kconfig 开关
私有 MQTT Broker 用户名/密码或无 CONFIG_GATEWAY_CLOUD_PROVIDER_PRIVATE
阿里云 IoT 一机一密 HMAC-SHA1 Alink JSON 格式 CONFIG_GATEWAY_CLOUD_PROVIDER_ALIYUN
腾讯云 IoT Hub 密钥 HMAC-SHA256 设备证书 CONFIG_GATEWAY_CLOUD_PROVIDER_TENCENT
AWS IoT Core X.509 证书 mTLS TLS 8883 + 证书链 CONFIG_GATEWAY_CLOUD_PROVIDER_AWS

当前限制:所有 Provider 共享 protocol_mqtt 的单一 MQTT 连接(轮流设置认证参数)。如需真正多 Broker 并行,每个 Provider 需独立管理 mqtt_client 实例。


初始化

git submodule update --init --recursive

复制 framework/zephyr_config.env.templateframework/zephyr_config.env 并填写 ZEPHYR_BASE 等。


编译

Nucleo L4R5ZI(验证用)

west build -b nucleo_l4r5zi -d build . -p always

野火 RT1052 Pro

west build -b mimxrt1050_fire -d build_rt1052 . -p always

野火 STM32H743 Pro

west build -b stm32h743_pro -d build_h743 . -p always

多云平台编译示例

# 仅私有 MQTT(默认)
west build -b nucleo_l4r5zi -d build .

# 阿里云单云
west build -b nucleo_l4r5zi -d build . -DCONFIG_GATEWAY_CLOUD_PROVIDER_PRIVATE=n -DCONFIG_GATEWAY_CLOUD_PROVIDER_ALIYUN=y

# 私有云 + 阿里云 + 腾讯云 并行
west build -b nucleo_l4r5zi -d build . -DCONFIG_GATEWAY_CLOUD_PROVIDER_PRIVATE=y -DCONFIG_GATEWAY_CLOUD_PROVIDER_ALIYUN=y -DCONFIG_GATEWAY_CLOUD_PROVIDER_TENCENT=y

ESP32-C6-DevKitM-1(原生 Wi-Fi)

首次构建前需一次性拉取乐鑫 Wi-Fi/BLE 闭源 blob:west blobs fetch hal_espressif (若报 429 Too Many Requests,属临时限流,增量重试即可)。

推荐用脚本,一行即可(自动叠加 Wi-Fi conf,并生成可直接烧 0x0 的合并镜像 zephyr_flash_0x0.bin):

.\scripts\build.ps1 -Board esp32c6_devkitm -BuildDir build_esp32c6

或直接用 west-D 参数须加单引号,否则 PowerShell 会在 .conf 处误拆参数):

west build -b esp32c6_devkitm -d build_esp32c6 . -p always -- '-DEXTRA_CONF_FILE=boards/esp32c6_devkitm_esp32c6_hpcore.conf'

boards/esp32c6_devkitm_esp32c6_hpcore.conf 开启 CONFIG_WIFI / CONFIG_CONNECTIVITY_BACKEND_WIFI / CONFIG_PROVISIONING_SHELL 等,详见文件头注释。ESP32-C6 为 Simple Boot,zephyr.bin 已含镜像头, 烧录用 esptool --chip esp32c6 write-flash 0x0 build_esp32c6\zephyr\zephyr_flash_0x0.bin。 烧录后用 prov set-wifi <ssid> <psk> 注入凭据(持久化到 NVS), 再调用 connectivity_module_connect(CONNECTIVITY_LINK_WIFI)(或对应业务入口)发起连接。

PowerShell 脚本

.\scripts\build.ps1 -Board nucleo_l4r5zi
# esp32c6_devkitm 会自动叠加 Wi-Fi conf 并生成 0x0 合并镜像,无需手动传 -WestExtra
.\scripts\build.ps1 -Board esp32c6_devkitm -BuildDir build_esp32c6

Shell 命令

命令 说明
gateway status 显示所有模块状态
can stats CAN 接收/发送/错误统计
modbus read <addr> <count> 手动读取 Modbus 保持寄存器
anomaly config <sensor> <w> <c> [e] 配置异常检测阈值
cloud status 所有已启用云平台的连接状态
cache info 离线缓存条目数
cache clear 清空离线缓存
module list 列出所有已注册模块及其依赖

双层策略

本设计采用开源层 + 商业层的双层 demo 策略:

功能 开源层 商业层(Pro)
异常检测 本地告警(屏幕打印) 事件路由 + 速率限制 + 持久化
黑匣子 仅实时事件流 事件持久化 + 回放
OTA MCUboot 基础引导 A/B 槽 + ECDSA 签名 + 灰度
WebShell 基础命令 RBAC + 审计日志 + TLS
多云接入 基础 MQTT + 阿里云 全平台适配 + 自动容灾 + 流量计费

商业层功能在代码中用 #ifdef CONFIG_USE_EVENT_SYSTEM_PRO 包裹,升级时应用代码零修改。


详细设计

docs/industrial_gateway_design.md


与 framework 的关系

  • framework/ 为子模块,不动核心代码
  • src/gateway/ 为业务代码,完全开源
  • boards/ 为本项目设备树 overlay,不覆盖 framework 中的文件

关于作者 · 更多内容

本项目基于的 Zeplod 框架由【硬核嵌入式】独立开发维护(知乎 / 公众号 / 知识星球 / B 站同名;CSDN 为「硬核开源」)——电气自动化出身、从 PLC 行业转行嵌入式;项目在 AI 大模型辅助下开发、设计与调试,所有结论经构建、测试与真机实验验证。

围绕该框架的系列内容(连载中):

  • 📝 知乎专栏:《真实工程重构实录》(框架怎么造、怎么崩、怎么修)·《平衡车调试笔记》(真机调试破案实录)
  • 🚗 实战载体:基于该框架的两轮自平衡车已实现首次自主站立(42s),整车 turnkey 工程将在调试收官后开放
  • 📮 公众号「硬核嵌入式」:项目月度进度
  • 🌍 知识星球「硬核嵌入式」:完整调试实录、可复现工程资料与答疑
  • 📺 B 站:真机实战视频连载

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages