Skip to content

数据流架构

从设备上电到 App 控制的完整数据闭环。

全链路概览

┌──────────┐    BLE 配网     ┌──────────────┐    WiFi/MQTT    ┌──────────────┐
│  ESP32   │ ──────────────→ │  移动端 APP   │ ──────────────→ │   服务端      │
│  固件    │ ←────────────── │  (Flutter)   │ ←────────────── │  (Go+Gin)    │
└──────────┘    WiFi 信息     └──────────────┘    设备注册/     └──────────────┘
                                    ↑             控制指令            ↑
                                    │                                │
                                    │   MQTT 消息                     │
                                    │                                │
                              ┌──────────────┐                      │
                              │  MQTT Broker  │ ──────────────────────┘
                              │  (内置)       │    设备上线/状态推送
                              └──────────────┘

                                    │ MQTT 连接
                              ┌──────────────┐
                              │   ESP32 设备   │
                              │  (WiFi 已连接)  │
                              └──────────────┘

阶段一:BLE 配网

设备首次上电进入配网模式(LED 五次快闪),移动端 APP 通过 BLE 扫描连接:

APP                          ESP32 设备
 │                              │
 │── BLE 扫描 ─────────────────→│ 设备广播: IoT-Switch-XXXX
 │                              │
 │── BLE 连接 ─────────────────→│ 建立 GATT 连接
 │                              │
 │── 写入 WiFi 信息 ───────────→│ {"ssid":"...", "password":"...", "apiUrl":"..."}
 │                              │
 │                              │── 连接 WiFi
 │                              │── 注册到服务端
 │                              │── 连接 MQTT Broker
 │                              │
 │←── 配网完成通知 ─────────────│ 设备上线
  • 设备蓝牙名称格式:IoT-Wakeup-XXXXIoT-Switch-XXXX
  • 配置数据 JSON:{"ssid": "YourWiFi", "password": "YourPassword", "apiUrl": "http://192.168.1.100:48080"}

阶段二:设备注册与激活

设备通过 WiFi 连接到服务端 API 完成注册:

ESP32 设备                   服务端 (Go)                MySQL
 │                              │                        │
 │── POST /api/v1/devices/      │                        │
 │   register ─────────────────→│── 写入设备记录 ────────→│
 │                              │                        │
 │←── 返回设备凭证 ─────────────│←── 确认 ───────────────│
 │                              │                        │
 │                              │                Redis
 │                              │                        │
 │── MQTT CONNECT ─────────────→│── 验证凭证 ───────────→│ 设备在线状态
 │   (使用注册凭证)              │                        │

阶段三:实时控制闭环

设备上线后,App 通过服务端 + MQTT 实现远程控制:

APP (Flutter)               服务端 (Go)              MQTT Broker           ESP32 设备
 │                              │                        │                     │
 │── POST /api/v1/control ─────→│                        │                     │
 │   {action: "on"}             │── PUBLISH 控制指令 ───→│                     │
 │                              │   topic: device/cmd/   │── 转发 ────────────→│
 │                              │                        │                     │── 执行动作
 │                              │                        │←── 状态上报 ────────│
 │                              │←── 订阅状态 ──────────→│                     │
 │←── 返回执行结果 ─────────────│                        │                     │
 │                              │                        │                Redis
 │                              │── 更新在线状态 ──────────────────────────────→│

关键组件说明

组件技术选型职责
服务端 APIGo + Gin + GORM设备/产品管理、认证、控制指令下发
MQTT Broker内置(替代 EMQX)设备消息路由、实时通信
MySQL8.x设备、产品、物模型持久化
Redis7.x设备在线状态缓存、会话管理
移动端 APPFlutter + DartBLE 配网、设备列表、远程控制
ESP32 固件Arduino + PlatformIO设备端 BLE/WiFi/MQTT 运行时

端口映射

端口服务协议
48080Core APIHTTP
48883MQTT BrokerTCP
48803MQTT BrokerWebSocket
48884MQTT DashboardHTTP
48306MySQLTCP
48379RedisTCP

相关文档