# xiaokui **Repository Path**: Blight001/xiaokui ## Basic Information - **Project Name**: xiaokui - **Description**: 小葵 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-14 - **Last Updated**: 2026-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 小葵阳光智能管家 面向太阳能巡检 / 家居安防场景的端到端智能控制项目,由 **Android 手机端、ESP32 中转端、STM32 下位机** 三端组成。手机经 WiFi 直连 ESP32 热点,完成传感器展示、视频预览、运动与灯光控制,以及 AI 助手对话;底层执行与采集由 STM32 完成,ESP32 负责网络桥接与摄像头。 --- ## 系统架构 ``` ┌─────────────────────┐ │ Android App │ 小葵管家(TCP Client + HTTP 拉流 + AI) │ 手机端 │ └──────────┬──────────┘ │ WiFi SoftAP(SSID: Xiaokui_Camera) │ TCP 192.168.4.1:58101 · MJPEG :81/stream ┌──────────▼──────────┐ │ ESP32_Relay │ SoftAP · TCP/HTTP 桥 · 摄像头 · UART 转发 │ 中转端 │ └──────────┬──────────┘ │ UART 115200(key:value#) ┌──────────▼──────────┐ │ STM32_Firmware │ 传感器 · 电机/舵机 · 自主模式 │ 下位机 │ └─────────────────────┘ ``` 数据与控制链路: | 方向 | 路径 | 内容 | |------|------|------| | 下行控制 | App → TCP → ESP32 → UART → STM32 | 电机、舵机、模式、传感器开关等 | | 上行遥测 | STM32 → UART → ESP32 → TCP → App | 温湿度、火焰、人体、CO、光照、距离等 | | 视频 | App → HTTP → ESP32 Camera | MJPEG 实时流 | | 上网(可选) | 手机移动数据 | AI / 外网;本地控制仍走 ESP32 热点 | --- ## 三端介绍 ### 1. Android 手机端 — `Android_App/` **定位**:用户交互与业务入口。连接 ESP32 后,集中展示环境数据、视频与控制面板,并集成 AI 助手。 | 项目 | 说明 | |------|------| | 工程路径 | `Android_App/` | | 应用名 | 小葵管家 | | 技术栈 | Kotlin · Android View · ViewModel · TCP/HTTP | | 默认连接 | TCP Client → `192.168.4.1:58101` | | 视频流 | `http://:81/stream`(由 ESP32 下发 `cam_ip`) | **主要能力** - **传感器面板**:火焰、PM2.5、温湿度、人体红外、CO、光照、超声波等实时展示 - **视频预览**:拉取 ESP32 MJPEG 流 - **运动 / 模式控制**:左右轮(`LS`/`RS`)、太阳能舵机(`SA`)、巡逻 / 灯光 / 自动避障(`MB`)等 - **TCP 调试**:原样发送/查看协议文本 - **AI 助手**:对话界面(走公网 API 时依赖手机流量) **核心代码** | 文件 | 作用 | |------|------| | `MainActivity.kt` | 页面与底部连接状态 | | `MainViewModel.kt` | 协议解析、命令发送、传感器与摄像头 URL | | `TcpClient.kt` | 自动连接 / 断线重连 | | `HttpBridgeClient.kt` / `AiApiService.kt` | HTTP 桥接与 AI 接口 | **调试构建** ```powershell cd Android_App .\gradlew.bat :app:assembleDebug ``` 产物也可使用目录内已有 release/debug APK。通信细节见 [`Android_App/TCP_BLE_COMMUNICATION_PROTOCOL.md`](Android_App/TCP_BLE_COMMUNICATION_PROTOCOL.md) (文件名含 BLE 为历史原因,当前主链路为 SoftAP + TCP)。 --- ### 2. ESP32 中转端 — `ESP32_Relay/` **定位**:网络与协议网关。不直接驱动大部分传感器/电机,而是把手机与 STM32 串成一条可靠链路,并提供摄像头与状态展示。 | 项目 | 说明 | |------|------| | 工程路径 | `ESP32_Relay/ESP32_Relay/` | | 入口 sketch | `ESP32_Relay.ino` | | 硬件取向 | XIAO ESP32S3 + 摄像头扩展(见 `board_config.h` / `camera_pins.h`) | | SoftAP | SSID `Xiaokui_Camera` · 密码 `12345678` · 网关多为 `192.168.4.1` | | TCP | Server,端口 `58101` | | 摄像头 HTTP | 控制/拍照 `:80`,MJPEG `:81` | | 对下 UART | 115200,D7=RX / D6=TX → STM32 USART1 | **主要能力** - 创建 SoftAP,手机直连,无需路由器或 BLE 配网 - TCP 文本桥:App ↔ STM32 双向转发(按 `#` / 换行切包) - 摄像头 JPEG 流与拍照 HTTP - 可选 OLED 显示桥接状态 / 遥测摘要 - 过滤本端消息(如 `cam_ip`、`[APP]...`),其余转 STM32 **关键文件** | 文件 | 作用 | |------|------| | `ESP32_Relay.ino` | 摄像头初始化 + 启动桥接与 HTTP | | `bridge.cpp` / `bridge.h` | SoftAP、TCP Server、UART 转发 | | `app_httpd.cpp` | 摄像头 HTTP / 流服务 | | `oled_display.*` | 本地 OLED | 协议与参数见 [`ESP32_Relay/ESP32_BLE_PROTOCOL.md`](ESP32_Relay/ESP32_BLE_PROTOCOL.md)。 --- ### 3. STM32 下位机 — `STM32_Firmware/` **定位**:实时硬件层。只负责本地采集、执行器与自主逻辑;不连 WiFi,全部经串口与 ESP32 对话。 | 项目 | 说明 | |------|------| | 工程路径 | `STM32_Firmware/Keil_Project/` | | MCU | STM32F103C8T6(Keil 工程 `STM32_CGMCU`) | | 通信 | USART1 · 115200 8N1 · PA9 TX / PA10 RX | | 报文风格 | `key:value#\n`(与 App/ESP32 一致) | **硬件模块(`HARDWARE/`)** | 类型 | 模块 | |------|------| | 传感器 | 火焰 IR、PM2.5(ADC)、DHT11 温湿度、HC-SR501 人体、MQ-7 CO、LDR 光照、HCSR04 超声波 | | 执行器 | 双电机 `MOTOR`、舵机 `SERVO` | | 人机 / 告警 | OLED、LED、蜂鸣器 | **主要能力** - 周期/按需采集传感器并上报(`fire`、`temp`、`humi`、`body`、`CO`、`light1`、`ultrasonic`、`PM` 等) - 执行 App 经 ESP32 下发的电机、舵机、模式指令 - 本地自主模式(如巡逻、寻光、避障等,与 `MB` 等指令对应) **关键目录** | 路径 | 作用 | |------|------| | `USER/main.c` · `control.c` | 初始化、主循环、检测与控制逻辑 | | `HARDWARE/*` | 各传感器与执行器驱动 | | `SYSTEM/serial/` | 串口协议收发 | 串口协议见 [`STM32_Firmware/STM32_SERIAL_COMMUNICATION_PROTOCOL.md`](STM32_Firmware/STM32_SERIAL_COMMUNICATION_PROTOCOL.md)。 --- ## 快速上手 ### 上电与连接顺序(推荐) 1. 烧录并启动 **STM32** 固件 2. 烧录并启动 **ESP32** 固件(会创建 `Xiaokui_Camera` 热点) 3. 手机连接 WiFi:`Xiaokui_Camera` / `12345678` 4. 若提示「WLAN 无法访问互联网」,选择 **保持连接** 5. 打开 **小葵管家** App,自动 TCP 连接并拉流 ### 手机连热点后如何上网 ESP32 SoftAP 本身不提供公网。需要 AI 或浏览网页时: 1. 打开移动数据 2. 连接 `Xiaokui_Camera` 3. 系统提示无法访问互联网时选择 **保持连接** 4. **本地控制 / 视频** 走 WiFi 热点;**AI / 外网** 走 4G/5G ### 与 VPN / 网络加速器同时使用 Android App 采用按连接分流:ESP32 控制、遥测和 MJPEG 视频只绑定到 `Xiaokui_Camera` 的物理 WiFi,AI 与其他公网请求继续使用 Android 默认网络, 因此可以由移动数据、VPN 或网络加速器承载。App 不再把整个进程绑定到无公网的 ESP32 WiFi。 如果加速器启用了“禁止局域网”“全局锁定 VPN”或类似选项,仍需在加速器中允许 局域网访问,或将 `192.168.4.0/24` 加入直连/绕过列表。RTSP 链接会交给外部播放器, 外部播放器也需要单独允许局域网访问。 ### 目录速查 | 目录 | 角色 | |------|------| | `Android_App/` | 手机端 App | | `ESP32_Relay/` | ESP32 中转固件 + 协议文档 | | `STM32_Firmware/` | STM32 Keil 工程 + 串口协议文档 | --- ## 协议文档索引 | 文档 | 内容 | |------|------| | [Android TCP 通信说明](Android_App/TCP_BLE_COMMUNICATION_PROTOCOL.md) | App 连接流程、指令表、消息格式 | | [ESP32 桥接与网络参数](ESP32_Relay/ESP32_BLE_PROTOCOL.md) | SoftAP / TCP / 摄像头 / UART 行为 | | [STM32 串口协议](STM32_Firmware/STM32_SERIAL_COMMUNICATION_PROTOCOL.md) | 上下行键值、硬件与波特率 | --- ## 开发提示 - 三端报文统一为 **UTF-8 文本**,片段多为 `key:value#`,便于串口抓包与 TCP 调试页联调。 - App 只维护 **一个** 活动 TCP 客户端;ESP32 侧新连接会替换旧连接。 - 修改热点名、密码或 TCP 端口时,请同步改 `ESP32_Relay/.../bridge.h` 与 App 内默认地址。 - 当前主链路 **不依赖 BLE 配网**;文档中若出现 BLE 字样,以 SoftAP + TCP 实现为准。