项目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框架代码结构清晰注释完整。核心代码实现#includeWire.h//I2C通信库引入I2C通信协议库。LCD1602通过I2C与ESP32通信必须要有这个库。#includeLiquidCrystal_I2C.h//I2C LCD驱动库//初始化LCDLiquidCrystal_I2Clcd(0x27,16,2);//LCD每行可显示的字符数16个2行。//定义光敏传感器D0引脚连接的GPIO4constintdoPin 4;constintledPin 5;//变量用于记录上一次的状态避免频繁刷新LCDintlastSensorState -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);//初始化lcdlcd.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后面多加几个空格用于覆盖上一次可能更多的字符。