当前位置: 首页 > news >正文

ESP32光传感器监测项目

项目Github地址

https://github.com/WuQinghui-00/ESP32-Light-Sensor-Monitor

项目演示视频

https://b23.tv/NFFXEWc

硬件清单与接线图

清单:ESP32、光敏传感器、LCD1602、1k电阻、LED灯、杜邦线、面包板。

接线图:硬件清单与接线

项目概览

一个基于ESP32的智能环境光监测系统,可实时采集光照强度自动控制LED开关并通过本地LCD显示,为智能家居、农业大棚等场景提供低成本监测方案

功能特性

  • 实时监测:通过光敏电阻模块实时采集环境光照强度。
  • 本地显示:通过I2C接口的LCD1602屏幕实时显示光照状态(亮BRIGHT/暗DARK)和LED的开关状态(关OFF/开ON)。
  • 串口调试:输出带时间戳的详细日志,方便调试与数据分析。
  • 自动控制:可根据预设阈值自动控制LED开关(可扩展)。
  • 易于部署:使用Arduino框架,代码结构清晰,注释完整。

核心代码实现

#include<Wire.h>//I2C通信库引入I2C通信协议库。LCD1602通过I2C与ESP32通信,必须要有这个库。

#include<LiquidCrystal_I2C.h>//I2C LCD驱动库

//初始化LCD

LiquidCrystal_I2Clcd(0x27,16,2);//LCD每行可显示的字符数(16个)2行。

//定义光敏传感器D0引脚连接的GPIO4

constintdoPin =4;

constintledPin =5;

//变量,用于记录上一次的状态,避免频繁刷新LCD

intlastSensorState = -1;// 记录“上一次”的传感器状态。初始化为-1,确保第一次循环一定会触发状态变化。

intcurrentSensorState =0;// 存储“当前”读取到的传感器状态。

unsignedlonglastChangeTime =0;// `unsigned long` 类型用于存储时间值,防止溢出。记录上一次状态“发生变化”的时刻

voidsetup(){

// put your setup code here, to run once:

Serial.begin(115200);//初始化串口通信

pinMode(doPin,INPUT);//将引脚设置为输入模式,用于读取数字信号

pinMode(ledPin,OUTPUT);

digitalWrite(ledPin,LOW);

//初始化lcd

lcd.init();

lcd.backlight();//打开背光,否则看不见显示

lcd.clear();//清屏

//显示静态标题

lcd.setCursor(0,0);

lcd.print("Light Monitor");//打印固定标题

//显示动态标题

lcd.setCursor(0,1);

lcd.print("State:");

Serial.println("系统启动。传感器信号正常,开始监控状态变化");//串口打印启动

}

voidloop(){

// put your main code here, to run repeatedly:

currentSensorState =digitalRead(doPin);

digitalWrite(ledPin,currentSensorState);

if(currentSensorState != lastSensorState){

lastChangeTime =millis();//更新上次状态

lastSensorState = currentSensorState;//更新记录的状态

//更新lcd第二行显示

lcd.setCursor(6,1);

if(currentSensorState == HIGH){

lcd.print("Dark,ON");//多打几行空格,用于覆盖上一次可能更长的字

}else{

lcd.print("Bright,OFF");

}

Serial.print("【状态变化】时间: ");//打印固定的提示字符串

Serial.print(millis());//打印系统启动到现在的毫秒数

Serial.print("ms | 新状态: ");

//打印原始状态值和 可读解释

Serial.print(currentSensorState);//打印传感器的原始数值

Serial.print(" (");

//使用三元运算符生成可读的状态描述

Serial.print(currentSensorState == HIGH ?"暗/HIGH":"亮/LOW");//如果(currentSensorState等于HIGH,返回“暗/HIGH”:“亮/LOW”);

Serial.print(") | 已更新LCD显示: ");//打印执行的操作结果

Serial.println(currentSensorState == HIGH ?"Dark, ON":"Bright, OFF");//等于HIGH,返回Dark,否则返回Bright

}

delay(100);

}

开发中遇到的问题及解决

1.Lcd上显示“Dark,onoff”,应该在Dark,on后面多加几个空格,用于覆盖上一次可能更多的字符。

http://www.jsqmd.com/news/477295/

相关文章:

  • 别再被参数带偏了!哪个品牌的护眼灯最好?从真实使用体验出发,深度对比书客、明基、柏曼、霍尼韦尔等12款热门护眼台灯,一次讲清选灯的核心逻辑
  • 2026年主流降论文AI率工具实测:哪款效果最好?
  • 别被割韭菜!过来人揭秘:赛一证书对零基础AI求职的真实价值
  • 类加载子系统
  • ISTA 3E 和 3B 的区别
  • OpenClaw 3.12 重磅更新:全新 Dashboard、移动端适配与安全增强
  • 教资笔记资源合集
  • 快速搭建Django投票应用
  • 封神!技术面试答“线上紧急故障”,用《孙子兵法》拿捏面试官[特殊字符]
  • 程序员为什么不自己开发应用赚钱
  • 新手教师管班:别让你的善良没有锋芒
  • Laravel 9.x 核心特性全解析
  • 二叉树的中序遍历
  • 什么是 Java 内存模型(JMM)?
  • OpenClaw 换机迁移指南
  • LLM几种主要的开源方式及优劣
  • EIG旗下MidOcean Energy将从JERA手中收购Gorgon LNG项目额外权益;双方探讨建立战略联盟
  • 2026 实测8款降AI率工具!知网/维普/Turnitin降AI率效果大比拼!
  • 执行引擎子系统
  • 软件测试进阶 | HTML常用标签详解:Web UI测试的“定位神器”
  • 用 AI 助手自动完成浏览器操作:OpenClaw 实战分享
  • Flutter 三方库 belatuk_combinator 鸿蒙适配指南 - 工业级组合数学运算与大规模排列枚举实战
  • 从园区到云核:传统网络与数据中心网络的分野与交汇
  • 第九章 微积分与数据分析:趋势预测和最优决策的工具
  • Linux入门第十二章,创建用户、用户组、主组附加组等相关知识详解
  • L2-004 这是二叉搜索树吗?
  • HarmonyOS APP<玩转React>开源教程六:数据模型设计与实现
  • 多模态AI实战:CLIP模型原理与代码深度剖析
  • 基于QWidget创建的自定义窗口在使用isVisible时造成程序崩溃
  • 2026海鲜泡沫箱采购攻略:精选厂家不容错过,国内头部泡沫箱企业排行榜单赋能企业生产效率提升与成本优化 - 品牌推荐师