# 嵌入式竞赛 **Repository Path**: yoq-source-control/embedded-competition ## Basic Information - **Project Name**: 嵌入式竞赛 - **Description**: 嵌入式竞赛 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-07 - **Last Updated**: 2026-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智能教室 — 嵌入式竞赛项目 基于 ESP32-S3 的智能教室管理系统,集成行人检测、自动空调控制、语音交互、环境监测与物联网云平台。 ## 目录 - [项目简介](#项目简介) - [硬件平台](#硬件平台) - [软件架构](#软件架构) - [功能模块](#功能模块) - [引脚映射](#引脚映射) - [快速开始](#快速开始) - [目录结构](#目录结构) - [任务优先级设计](#任务优先级设计) - [技术亮点](#技术亮点) - [参与贡献](#参与贡献) --- ## 项目简介 智能教室系统通过 **OV5640 摄像头 + ESP-DL 端侧推理** 实现教室内行人检测,根据人数自动调节 **红外空调档位** 与 **分区灯光**。同时集成 **ASRPRO 离线语音** 控制、**SHT30 温湿度采集**、**陶晶驰串口屏** 显示,并通过 **巴法云 MQTT** 将数据上报到物联网平台。内置 **省电模式**,长时间无人时自动休眠摄像头和推理引擎,实现低功耗运行。 ### 核心功能 | 功能 | 描述 | |------|------| | 行人检测 | ESP-DL PICO_S8_V1 模型,端侧推理,四区域人数统计 | | 自动空调 | 按人数自动调节红外空调档位(1-4 档 + 关闭) | | 语音控制 | ASRPRO 离线语音,支持空调/灯光/模式切换 | | 环境监测 | SHT30 温湿度传感器,每秒采集 | | 串口屏 | 陶晶驰串口屏,显示温度/湿度/空调/灯光/人数 | | 物联网 | 巴法云 MQTT,定时上报人数、温湿度、空调状态 | | 省电模式 | 无人超时自动休眠摄像头 + 检测,有人唤醒 | | 分区灯光 | 四区域独立 LED 控制,有人区域亮灯 | --- ## 硬件平台 | 组件 | 型号/规格 | |------|-----------| | 主控 | ESP32-S3 (N32R16V) — 16MB Flash + 16MB Octal PSRAM | | 摄像头 | OV5640 500W 自动对焦 DVP 模组(自带 24MHz 晶振) | | 温湿度 | SHT30(UART 通信) | | 语音 | ASRPRO 离线语音模块(I2C 从机模式) | | 屏幕 | 陶晶驰串口屏(UART2) | | 红外 | 红外发射管(UART1 共享) | | LED | 4 路区域指示灯 | --- ## 软件架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ main (app_main) │ ├─────────────────────────────────────────────────────────────┤ │ Middlewares │ │ ┌───────────┬──────────┬───────────┬────────────────────┐ │ │ │ IOT_APP │ CAMERA │ PED_DETECT│ ASRPRO_VOICE │ │ │ │ (巴法云) │ (OV5640) │ (ESP-DL) │ (I2C从机 0x28) │ │ │ ├───────────┼──────────┼───────────┼────────────────────┤ │ │ │ IR_AIRCON │ SHT30 │ LED_CTRL │ POWER_SAVE │ │ │ │ (红外空调) │ (温湿度) │ (4区灯光) │ (省电管理) │ │ │ ├───────────┼──────────┼───────────┼────────────────────┤ │ │ │ TJC_SCREEN│ SHARED │ │ │ │ │ │ (串口屏) │ _UART1 │ │ │ │ │ └───────────┴──────────┴───────────┴────────────────────┘ │ ├─────────────────────────────────────────────────────────────┤ │ BSP │ │ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ │ │ │GP_TIM│ES_TIM│ IIC │ KEY │ LED │ SPI │ UART │ EXIT │ │ │ └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ │ ├─────────────────────────────────────────────────────────────┤ │ Components │ │ ├── CLOUD_MQTT (巴法云 MQTT 客户端) │ │ ├── WIFI (WiFi STA 连接管理) │ │ ├── esp32-camera (OV5640 驱动, override_path 修复版) │ │ └── pedestrian_detect (PICO_S8_V1 模型封装) │ └─────────────────────────────────────────────────────────────┘ ``` ### 数据流 ``` OV5640(DVP) → PSRAM缓冲 → 采集任务(P4) → 帧队列(2) → 检测任务(P5) → ESP-DL推理 │ ┌─────────┼─────────┐ ▼ ▼ ir_aircon_control tjc_screen_update _by_people() _people_count() │ │ ▼ ▼ 红外空调队列 串口屏UART2 ``` --- ## 功能模块 ### 1. IOT_APP — 物联网模块 - WiFi STA 连接到路由器 - MQTT 连接巴法云(`bemfa.com:9501`) - 定时上报:人数、温湿度、空调档位 - 上报间隔:5 秒 ### 2. CAMERA_APP — 摄像头模块 - OV5640 DVP 接口,JPEG 输出,QVGA (320×240) - 双帧缓冲(fb_count=2),反压式采集 - 支持 Suspend/Resume(省电模式) - 自修复:OV5640 PLL 补偿、PSRAM 跳过 EOI 检查 ### 3. PEDESTRIAN_DETECT_APP — 行人检测 - ESP-DL PICO_S8_V1 行人检测模型 - 四区域统计(左后/右后/左前/右前) - 时序滤波:连续 2 帧有人确认、连续 5 帧无人确认 - 置信度阈值:0.55,NMS 阈值:0.5 - 检测结果驱动:空调档位、灯光分区、串口屏显示 ### 4. ASRPRO_VOICE — 语音控制 - ESP32-S3 作为 I2C 从机(地址 0x28) - 接收 ASRPRO 语音指令: - `0x01~0x04`:空调 1~4 档 - `0x05`:空调关闭 - `0x06`:开灯 - `0x07`:关灯 - `0x08`:自动模式 ### 5. IR_AIRCON — 红外空调 - AUTO/VOICE 双模式控制,语音优先级高于自动 - 按人数自动映射档位:0人→OFF / 1人→L1 / 2人→L2 / 3人→L3 / 4人以上→L4 - 语音命令自动切换为 VOICE 模式,阻止自动控制覆盖 - `0x08` 命令恢复 AUTO 模式 ### 6. SHT30_APP — 温湿度采集 - UART 通信 SHT30 传感器 - 1 秒周期定时器采集 - 温度/湿度数据同步更新到串口屏 ### 7. TJC_SCREEN — 串口屏 - 陶晶驰串口屏,UART2 通信(115200bps) - 显示控件:温度(t_temp)、湿度(t_humi)、空调(t2)、灯光(t3)、人数(t_people) ### 8. LED_CTRL — 灯光控制 - 4 路 GPIO 控制 4 个区域指示灯(与四区域检测一一对应) - AUTO 模式:有人区域自动亮灯,无人区域自动熄灯 - MANUAL 模式:仅语音命令控制(`0x06` 开灯 / `0x07` 关灯) - `0x08` 恢复自动模式后,灯光状态立即按当前人数刷新 ### 9. POWER_SAVE_APP — 省电管理 - 状态机:NORMAL → SLEEP → CHECK - 无人超时可配后休眠摄像头+检测(deinit 降低功耗) - 梯度唤醒间隔:30s → 2min → 5min,逐渐降低检查频率 - 语音命令可强制唤醒,省电恢复后自动应用当前控制模式 --- ## 引脚映射 ### 摄像头 (OV5640 DVP) | 信号 | GPIO | 备注 | |------|------|------| | D0 | GPIO1 | 数据总线 | | D1 | GPIO2 | | | D2 | GPIO42 | | | D3 | GPIO41 | | | D4 | GPIO40 | | | D5 | GPIO48 | | | D6 | GPIO47 | | | D7 | GPIO18 | | | PCLK | GPIO45 | VDD_SPI strap | | HREF | GPIO3 | JTAG strap | | VSYNC | GPIO21 | | | RESET | GPIO4 | | | PWDN | GPIO8 | | | SIOD | GPIO39 | SCCB SDA | | SIOC | GPIO38 | SCCB SCL | | XCLK | NC | 模组自带晶振 | ### 队友外设 | 外设 | GPIO | 备注 | |------|------|------| | LED1 | GPIO13 | 左后 | | LED2 | GPIO12 | 右后 | | LED3 | GPIO11 | 左前 | | LED4 | GPIO10 | 右前 | | ASRPRO I2C SCL | GPIO5 | I2C_NUM_0 | | ASRPRO I2C SDA | GPIO6 | I2C_NUM_0, 从机 0x28 | | TJC UART2 TX | GPIO15 | 串口屏 | | TJC UART2 RX | GPIO14 | | | 共享 UART1 TX | GPIO17 | SHT30 + 红外 | | 共享 UART1 RX | GPIO16 | | --- ## 快速开始 ### 环境要求 - **ESP-IDF** v5.4.4 - **Python** 3.8+ - Windows / Linux / macOS ### 编译步骤 ```bash # 1. 激活 ESP-IDF 环境 . $IDF_PATH/export.sh # Linux/macOS # 或运行 ESP-IDF 命令提示符(Windows) # 2. 设置目标芯片(ESP32-S3) idf.py set-target esp32s3 # 3. 拉取托管组件依赖 idf.py reconfigure # 4. 编译 idf.py build # 5. 烧录并查看日志 idf.py -p COMx flash monitor ``` ### 串口屏配置 陶晶驰串口屏工程需要包含以下控件: | 控件名 | 类型 | 用途 | |--------|------|------| | `t_temp` | 文本 | 温度显示 | | `t_humi` | 文本 | 湿度显示 | | `t2` | 文本 | 空调状态 | | `t3` | 文本 | 灯光状态 | | `t_people` | 文本 | 人数显示 | ### 巴法云配置 在 `components/CLOUD_MQTT/cloud_mqtt.h` 中修改: ```c #define MQTT_CLIENT_ID "你的巴法云用户私钥" #define MQTT_TOPIC "你的主题名称" ``` --- ## 目录结构 ``` Intelligence_QianSai/ ├── main/ # 主程序 │ ├── main.c # app_main 入口 │ ├── lv_conf.h # LVGL 配置 │ └── idf_component.yml # 托管组件依赖 ├── components/ │ ├── BSP/ # 基础驱动层 │ │ ├── ESPTIM/ # 软件定时器 │ │ ├── EXIT/ # 外部中断 │ │ ├── GPTIM/ # 通用定时器 │ │ ├── IIC/ # I2C 驱动 │ │ ├── KEY/ # 按键 │ │ ├── LED/ # LED 基础驱动 │ │ ├── SPI/ # SPI 驱动 │ │ └── UART/ # UART 驱动 │ ├── CLOUD_MQTT/ # 巴法云 MQTT │ ├── WIFI/ # WiFi 管理 │ ├── Middlewares/ # 中间件层(业务模块) │ │ ├── ASRPRO_VOICE/ # 语音控制 │ │ ├── CAMERA_APP/ # 摄像头应用 │ │ ├── IOT_APP/ # 物联网应用 │ │ ├── IR_AIRCON/ # 红外空调 │ │ ├── LED_CTRL/ # LED 控制 │ │ ├── PEDESTRIAN_DETECT_APP/ # 行人检测 │ │ ├── POWER_SAVE_APP/ # 省电管理 │ │ ├── SHARED_UART1_BUS/ # UART1 共享总线 │ │ ├── SHT30_APP/ # SHT30 温湿度 │ │ └── TJC_SCREEN/ # 串口屏 │ ├── esp32-camera/ # OV5640 驱动(override_path) │ └── pedestrian_detect/ # 行人检测模型封装 ├── partitions-32MiB.csv # 32MB Flash 分区表 ├── sdkconfig.defaults # SDK 默认配置 ├── CMakeLists.txt # 顶层 CMake └── README.md ``` --- ## 任务优先级设计 | 优先级 | 任务 | 说明 | |:---:|------|------| | 7 | ASRPRO 语音识别 | 最高优先级,语音命令最快响应 | | 6 | 红外空调控制 | 空调命令优先于检测 | | 5 | SHT30 温湿度 / 行人检测 | 同优先级,FreeRTOS 时间片轮转 | | 4 | 摄像头采集 | 采集慢于处理,自然反压 | | 3 | 省电监控 | 最低业务优先级,空闲时执行 | | 2 | 物联网数据上报 | 不影响核心功能 | | 1 | 软件定时器服务 | IDLE 回调 | --- ## 技术亮点 1. **端侧 AI 推理**:ESP-DL PICO_S8_V1 模型在 ESP32-S3 上实现行人检测,无需云端 2. **时序滤波**:连续确认/否认机制消除单帧误检闪烁 3. **省电策略**:梯度唤醒间隔(30s→2min→5min),平衡功耗与响应 4. **引脚零冲突**:摄像头 DVP 总线与队友外设完全避开 5. **竞争避免**:FreeRTOS 队列 + 互斥锁保护共享资源(UART、帧缓冲、检测结果) 6. **模式兼容**:空调/灯光 AUTO/VOICE 双模式,语音可随时介入 7. **驱动修复**:OV5640 PLL 补偿 + PSRAM EOI 跳过,解决摄像头兼容问题 --- ## 参与贡献 1. Fork 本仓库 2. 新建 `Feat_xxx` 分支 3. 提交代码 4. 新建 Pull Request