2026寒假练 - 基于ESP32XIAOS3实现环境预测与场景联动
该项目使用了vscode-idf插件, C语言 + jupyter插件, Python语言,实现了ESP32XIAOS3开发板的设计,它的主要功能为:读取温湿度和光照数据,根据内部部署的AI模型进行风险预测,控制LED和蜂鸣器展示当前风险状态,并且使用OLED进行人机交互。
标签
嵌入式系统
ESP32S3
参加活动/培训
TensorFlow-Lite模型部署
E-lxl
更新2026-03-24
华中科技大学
27

1. 所选任务介绍

1-1 任务名称

环境预测与场景联动

1-2 任务要求

  1. 采集温度、湿度、环境光强、震动或倾斜等两种及以上的数据,并间隔一段时间持续记录。
  2. 使用TensorFlow等平台训练轻量模型,输出风险预测。
  3. OLED上显示各传感器实时值、预测评分与趋势、过往采集数据等,三色LED用红黄绿显示风险等级。
  4. 预测风险从正常转为可能存在风险时,蜂鸣器短鸣3次进行提示,三色LED由绿色转为黄色;预测风险达到阈值时蜂鸣器长鸣警报,三色LED转为红色。
  5. 可选加分:可自行设计桌面监测站3D外壳,需提交结构文件与装配说明。


2. 项目介绍

2-1 项目名称

基于ESP32的博物馆温湿度和光照检测报警系统

2-2 项目场景

博物馆文物需要合适的温湿度条件,否则可能会导致文物损坏,同时部分文物对光照敏感,所以禁止游客拍照,本项目基于该场景建立了基于ESP32的温湿度检测系统,同时检测闪光灯等强光影响

当预测风险从正常转为可能存在风险时,蜂鸣器短鸣3次进行提示,三色LED由绿色转为黄色,提示可能存在风险, 预测风险达到阈值时蜂鸣器长鸣警报,三色LED转为红色,提示文物处于危险状态,危险消除后蜂鸣器停止警报,LED转为绿色安全状态

3. 硬件介绍

  • ESP32XIAOS3开发板
  • DHT11温湿度传感器
  • 三色LED
  • 4按键模块
  • 蜂鸣器
  • OELD显示屏


4. 方案框图和项目设计思路介绍

4-1 方案框图

4-2 项目设计思路介绍

4-2-1 项目总体设计

本项目基于ESP32+FreeRTOS实时操作系统构建一个环境监测与风险预测系统。系统通过温湿度传感器和光敏传感器采集环境数据,并利用嵌入式AI模型进行风险预测,同时通过OLED、RGB_LED和蜂鸣器进行信息显示和报警提示。

系统采用FreeRTOS 多任务架构,将不同功能模块划分为独立任务运行,各任务之间通过互斥锁和事件组实现数据共享与同步,以保证系统运行的实时性与稳定性。

系统主要实现以下功能:

  • 实时采集环境温度、湿度和光照强度
  • 基于AI模型进行环境风险预测
  • OLED实时显示系统状态与数据
  • LED和蜂鸣器进行风险报警提示
  • 历史数据记录与查询
  • 系统运行状态监测

4-2-2 系统软件架构

系统软件采用 ESP32双核处理 + FreeRtos多任务架构设计,根据功能划分为三个任务模块:

  1. 系统运行监控任务(核0)
  2. 人机交互任务集(核0)
  3. 数据采集与处理任务集(核1)

各任务相互独立,通过共享数据结构和FreeRtos同步机制、互斥锁实现任务之间的通信。

4-2-3 系统任务设计

  • LED系统系统监控任务
    • 该任务用于检测系统运行状态,LED以2秒为周期持续闪烁,用于判断系统是否正常运行
  • 按键检测任务
    • 系统使用四个按键进行菜单控制,用户可通过按键实现页面切换、数据查看、历史数据浏览等功能
  • OLED菜单显示任务
    • OLED用于显示数据信息如温度、湿度、光照强度、AI风险预测结果以及历史数据和调试信息,信息展示全面具体。
  • 风险提示任务
    • 该任务根据 AI 模型预测结果进行风险提示,风险等级划分为三级:
      • 安全(risk < 1):三色LED显示为绿色,蜂鸣器关闭
      • 警告(1 ≤ risk < 2):三色LED显示为黄色,蜂鸣器短鸣3声
      • 危险(risk ≥ 2):三色LED显示为红色,蜂鸣器持续报警
  • DHT11温湿度采集任务
    • 该任务周期性读取 DHT11传感器数据,采集数据包括温度和湿度,采集的数据存入数据集中
  • 光敏传感器采集任务
    • 该任务通过 ADC 采集环境光照强度,采集的数据存入数据集中
  • AI风险预测任务
    • 该任务运行嵌入式AI模型进行风险预测,模型输入温度、湿度和光照强度,进行AI预测分析,输出风险值risk
  • 历史数据保存任务
    • 该任务用于保存和更新系统数据(温湿度,光强,AI风险预测等级)

4-2-4 系统运行流程

系统整体运行流程如下:

  1. 系统上电启动,ESP32 初始化硬件资源
  2. 初始化系统外设,包括 LED、OLED、定时器等模块
  3. 创建FreeRTOS各个功能任务
  4. 传感器任务周期采集温度、湿度和光照数据
  5. 采集数据写入系统数据结构与历史数据缓存
  6. AI 模型任务读取传感器数据并进行风险预测
  7. 预测结果更新系统风险值
  8. OLED显示任务实时更新环境数据和风险状态
  9. RGB_LED与蜂鸣器根据风险等级进行提示或报警
  10. 历史数据任务保存当前数据并更新历史记录
  11. 系统持续循环运行,实现环境监测与风险预测功能


5. 调试软件及使用的编程语言说明、软件流程图及关键代码介绍

5-1 编程语言与开发环境

本项目主要使用C 语言进行开发,基于ESP32平台和FreeRTOS实时操作系统实现系统多任务管理。

开发与调试工具如下:

工具

作用

VSCode

代码编写与项目管理

ESP-IDF

ESP32 官方开发框架

FreeRTOS

实现系统多任务调度

Python

AI模型训练与数据处理

TensorFlow / TensorFlow Lite

构建与部署风险预测模型

串口调试助手

查看系统运行日志与调试信息

在模型训练阶段,使用 Python 构建并训练环境风险预测模型,并将训练完成的模型转换为TensorFlow Lite格式,再部署到ESP32进行推理计算。

5-2 软件流程图

5-3 关键代码介绍

FreeRTOS任务创建:系统使用FreeRTOS创建多个独立任务,并将任务绑定到不同CPU核心执行。

  xTaskCreatePinnedToCore(task_LED , "task_LED" , 4096 , NULL , 1 , NULL , 0) ;
  xTaskCreatePinnedToCore(Task_Key4 , "Task_Key4" , 4096 , NULL , 1 , NULL , 0) ;
  xTaskCreatePinnedToCore(Task_Menu , "Task_Menu" , 4096 , NULL , 1 , NULL , 0) ;
 
  xTaskCreatePinnedToCore(Task_DHT11, "Task_DHT11" , 3072 , NULL , 1 , NULL , 1) ;
  xTaskCreatePinnedToCore(Task_Gray , "Task_Gray" , 4096 , NULL , 1 , NULL , 1) ;
  xTaskCreatePinnedToCore(Task_AI_Predict , "Task_AI_Predict" , 4096 , NULL , 1 , NULL , 1) ;
  xTaskCreatePinnedToCore(Task_RGY_Buzzer , "Task_RGY_Buzzer" , 4096 , NULL , 1 , NULL , 1) ;
 
  xTaskCreatePinnedToCore(Task_History_Save , "Task_H_Save" , 4096 , NULL , 1 , NULL , 0) ;


6. 功能展示图及说明

系统运行后可以实现以下功能(更多细节展示可以观看项目视频):

6-1 OLED实时数据显示

OLED界面实时显示环境监测数据,包括:

  • 温度
  • 湿度
  • 光照强度
  • AI预测风险值


6-2 风险等级可视化提示

系统通过 RGB LED 和蜂鸣器对风险进行提示:

风险值

LED颜色

蜂鸣器

安全

绿色

不报警

预警

黄色

短鸣三声提示

危险

红色

持续报警

当环境风险升高时,系统会自动发出报警提示


6-3 历史数据记录

系统会保存最近一段时间的环境数据,用户可以通过 OLED 菜单查看历史记录,从而了解环境变化趋势。


6-4 串口调试信息

系统通过串口输出调试信息,包括:

  • 传感器数据
  • AI预测结果

便于开发者进行系统调试和性能分析。


7. 项目中遇到的难题及解决方法

在项目开发过程中遇到了一些问题,主要包括以下几个方面。

7-1 多任务数据冲突问题

在多个任务同时访问传感器数据时,可能出现数据错误或系统异常。

解决方法:使用FreeRTOS提供的互斥锁对共享数据进行保护,确保同一时间只有一个任务访问数据。

7-2 AI模型在嵌入式平台部署问题

训练完成的模型体积较大,直接运行会占用较多内存。

解决方法:使用TensorFlow Lite将模型转换为轻量化格式,并减少模型参数规模,使其能够在ESP32上运行。

7-3 任务运行效率问题

如果所有任务运行在同一CPU核心上,可能会导致系统响应变慢。

解决方法:利用 ESP32的双核特性,将人机交互任务和数据处理任务分配到不同CPU核心上运行,提高系统运行效率。


8. 心得体会

通过本项目的设计与实现,加深了对嵌入式系统开发流程的理解,并掌握了FreeRTOS多任务系统的基本使用方法。

在项目开发过程中,不仅需要完成硬件驱动编写,还需要进行软件架构设计与任务划分,这对系统整体设计能力提出了更高要求。同时,通过将AI模型部署到嵌入式设备上,也进一步了解了嵌入式人工智能的基本实现方法。

在调试过程中,通过分析任务运行状态和系统日志,逐步定位并解决问题,提高了问题分析与调试能力。

总体来说,本项目将嵌入式系统、实时操作系统以及人工智能技术结合在一起,是一次综合性较强的实践过程,对提升工程实践能力具有重要意义。


9. 资源分享

网盘链接:

通过网盘分享的文件:代码文件

链接: https://pan.baidu.com/s/1h7dmoQ7_pVKC3pxzUEQvEQ?pwd=6666 提取码: 6666

--来自百度网盘超级会员v4的分享

附件下载
网盘链接.txt
zip文件大于30M,所以上传网盘链接
团队介绍
刘欣(E-lxl), 华中科技大学
团队成员
E-lxl
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号