2026 M-Design设计竞赛-基于ESP32-s3实现智能家居环境检测
该项目使用了ESP32-S3开发板,Arduino编程语言,实现了智能环境监测装置的设计,它的主要功能为:搭载SHT45温湿度传感器与LTR390光照传感器,实时采集环境温度、湿度、光照强度数据,通过OLED本地显示,并利用WiFi将数据实时传输至手机TCP服务端。。
标签
嵌入式系统
环境检测
ESP32-S3
王世烨
更新2026-06-09
福建农林大学
12

一、项目介绍与创意说明

本项目以 ESP32-S3 为主控芯片,结合 SHT45 温湿度传感器、LTR390 环境光传感器以及 OLED 显示屏,设计并实现了一个小型环境监 测系统。系统能够实时采集周围环境的温度、湿度和光照强度,并将数据显示在本地 OLED 屏幕上,同时通过 Wi-Fi 网络以 TCP 的方式发送到上位机或服务器,实现本地显示与远程传输相结合的环境信息监测。本项目的创意点主要体现在“本地可视化 + 远程联网”的双重功能设计上本项目强调的是“低成本、易实现、可扩展、可联网”。实现了环境信息采集、数据显示、异常提示、网络传输等多个功能模块,较好体现了嵌入式系统设计中软硬件协同的思想。

二、使用到的硬件介绍

本项目使用的主要硬件如下:

ESP32-S3:作为系统核心控制器,负责完成传感器数据采集、OLED 显示刷新、Wi-Fi 连接以及 TCP 数据发送等任务。ESP32-S3 运算能力较强,集成 Wi-Fi,适合物联网项目开发。

SHT45 温湿度传感器:用于检测环境温度和相对湿度。该传感器测量精度高、稳定性好、响应速度快,适合环境监测类项目使用。

LTR390 光照传感器:用于检测环境光照强度。本项目中将其配置为 ALS 模式,用于采集可见光强度数据,从而反映环境明暗变化。

OLED 显示屏:用于本地显示采集到的温度、湿度和光照数据,方便用户直接观察设备运行状态。

Wi-Fi 网络:依托 ESP32-S3 内置无线功能,将采集到的数据发送到 TCP 服务器,实现远程监控。

此外,系统还使用了 I2C 通信总线分别连接传感器模块,其中代码中使用了 Wire 和 Wire1 两组总线,说明设计时考虑了不同设备引脚分配和总线资源管理问题。

三、方案框图与项目设计思路

方案框图:
image.png
设计思路上,项目分为以下几个阶段:

1. 完成硬件选型,确定主控与传感器之间的连接方式。

2. 编写底层驱动初始化代码,确保 OLED 和传感器能够正常工作。

3. 实现 Wi-Fi 连接和 TCP 通信,保证数据具备远程发送能力。

4. 设计主循环逻辑,使传感器采集、数据显示和数据上传协同运行。

5. 对异常情况进行处理,例如传感器未连接、网络未连接等。



四、软件流程图与关键代码介绍

本项目的软件结构主要由 setup() 初始化函数和 loop() 主循环函数组成。

软件流程图:

关键代码说明:

Serial.println("Connecting to Wi-Fi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWi-Fi connected!");

说明:

WiFi.begin(ssid, password):使用设定好的 WiFi 名称和密码连接路由器。

WiFi.status() != WL_CONNECTED:不断检测是否连接成功。

连接成功后,ESP32-S3 就能通过局域网把传感器数据发到手机。

sensors_event_t humidity, temp;
float als = 0;

sht4.getEvent(&humidity, &temp);
if (ltr.newDataAvailable()) {
als = ltr.readALS();
}

说明:

sht4.getEvent(&humidity, &temp):从 SHT45 获取湿度和温度数据。

ltr.newDataAvailable():判断 LTR390 是否有新数据。

ltr.readALS():读取环境光照值。

if (!tcpClient.connected()) {
Serial.println("Attempting to connect to TCP server...");
if (tcpClient.connect(tcp_server, tcp_port)) {
Serial.println("✅ Connected to TCP server!");
} else {
Serial.println("❌ Connection failed.");
}
}

说明:

tcpClient.connected():检查当前 TCP 是否已连接。

tcpClient.connect(tcp_server, tcp_port):连接手机端的 TCP 服务器地址和端口。

如果手机上运行了 TCP 接收工具,就能接收 ESP32 发来的数据。

if (tcpClient.connected()) {
String data = "Temp:" + String(temp.temperature, 1) + "C,"
+ "Hum:" + String(humidity.relative_humidity, 1) + "%,"
+ "Light:" + String((int)als) + "\n";

tcpClient.print(data);
Serial.print(" Sent via TCP: ");
Serial.print(data);
}

说明:

把温度、湿度、光照拼接成一行字符串。

tcpClient.print(data):通过 TCP 发给手机。

同时串口输出,方便调试。


五、功能展示图及说明



本设备整体功能完善、运行稳定、实测效果良好。设备正常上电后可立即进入监测状态,OLED屏幕实时刷新温度、湿度、光照强度和紫外线强度数据。WiFi联网成功后,ESP32-S3与手机接入同一热点,手机开启TCP服务端即可持续接收设备上传的所有环境数据,数据更新实时、无延迟。

image.png

在实际功能测试中,对LTR390光照传感器进行光源测试,将台灯逐渐靠近传感器,环境亮度明显提升,设备读取的光照强度数值随之快速、平稳升高,数值变化灵敏且贴合实际亮度变化;撤走台灯后,环境亮度回落,光照数据同步平稳下降。


六、设计中遇到的难题与解决方法

第一个问题是传感器初始化与总线分配问题。ESP32-S3 引脚资源丰富,但不同外设的引脚复用较复杂,如果 I2C 引脚设置不当,就可能导致传感器无法识别。为了解决这个问题,我在程序中分别使用 Wire 和 Wire1 初始化两组 I2C 总线,并明确指定引脚,使 SHT45与 LTR390 能稳定通信。

第二个题是传感器状态判断与异常处理问题。如果某个传感器接线错误或供电异常,系统会一直处于无效运行状态,调试起来比较困难。对此,我在初始化阶段增加了传感器检测逻辑,一旦 begin() 失败,就立即在 OLED 上显示 “No SHT4x!” 或 “No LTR390!”。这种方式使故障定位更直接,减少了排查时间。

第三个题是网络连接稳定性问题。Wi-Fi 和 TCP 通信在实际运行中可能会因为信号波动或服务器状态变化而中断。为此,代码中加入了“未连接则自动重连”的逻辑,每次主循环都会检测 tcpClient.connected(),如果断开则重新发起连接,提高了系统的可靠性。

第四个题是多任务协同问题。系统既要读取传感器,又要刷新 OLED,还要进行网络通信。如果逻辑安排不合理,就可能出现显示卡顿或通信不稳定。最终我采用了循环定时采样的方法,并在每次循环末尾加入 delay(2000),使采集和发送周期保持稳定,保证了整体运行效果。


七、竞赛心得体会与建议

通过本次环境监测项目的设计与实现,我对嵌入式开发流程有了更深入的理解。以前更多是单独学习某一个模块,比如传感器读取或者OLED 显示,而这次竞赛让我真正体会到,一个完整作品需要把硬件连接、底层驱动、数据处理、用户界面、网络通信和异常处理全部结合起来。只有把这些环节都打通,项目才能真正跑起来。在实践过程中,我也认识到调试能力的重要性。很多问题并不是代码本身复杂,而是硬件接线、通信地址、初始化顺序、数据刷新节奏等细节没有处理好。尤其是在物联网项目中,网络部分常常会带来新的不确定性,因此必须重视串口输出、状态判断和错误提示设计。

从竞赛收获上看,这次项目锻炼了我的系统设计能力、代码整合能力和问题分析能力,也提升了我对 ESP32-S3 的熟悉程度。更重要的是,我学会了从“实现某个功能”转变为“完成一个完整作品”的思维方式,这对以后进行更复杂的工程项目开发非常有帮助。对于竞赛本身,我认为如果后续可以增加一些统一的测试环境说明、传感器接口指导或网络调试示例,会让参赛者更快进入状态。同时,如果能在比赛前安排一次关于嵌入式系统调试方法的培训,例如 I2C 扫描、串口日志分析、网络联调技巧等,相信会对参赛作品质量提升有较大帮助。

附件下载
WIFItest.ino
团队介绍
王世烨 福建农林大学
团队成员
王世烨
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号