搜索代码

ESP32教程22/55 - 使用LED Arduino感受光线 | SunFounder的ESP32物联网学习套件

ESP32教程22/55 - 使用LED Arduino感受光线 | SunFounder的ESP32物联网学习套件

在本教程中,我们将探讨如何使用ESP32微控制器配合光敏电阻(LDR)来测量光照强度。通过读取LDR的电阻值,我们可以触发相应操作,例如当光照水平超过某个阈值时打开蜂鸣器。本项目将演示光照水平与ESP32模拟读取功能之间的交互,使我们能够根据环境光创建响应式应用。(视频中5:30处)

硬件说明

本项目中使用的主要组件包括ESP32微控制器、一个LDR和一个10 kΩ电阻。LDR会根据照射到其表面的光照强度改变电阻值:光照越强,电阻越低;光照越弱,电阻越高。这一特性使我们能够通过将LDR与电阻以分压配置连接来测量不同的光照水平。

ESP32微控制器内置Wi-Fi和蓝牙功能,非常适合物联网项目。它有多个模拟引脚,可以读取不同的电压水平,我们将利用这些引脚来监测LDR两端的电压。该电压将被转换为ESP32可以处理的模拟值,并用于触发诸如激活蜂鸣器之类的操作。

数据手册详情

制造商乐鑫科技
型号ESP32
逻辑/IO电压3.3 V
供电电压3.0 - 3.6 V
输出电流(每个GPIO)最大40 mA
PWM频率建议1 kHz - 40 kHz
输入逻辑阈值高电平:最低2.0 V,低电平:最高0.8 V
压降 / RDS(on) / 饱和最大0.3 V
热限制-40 °C 至 125 °C
封装QFN48
备注 / 变体支持多种Wi-Fi和蓝牙协议

  • 使用一个10 kΩ电阻与LDR串联进行分压。
  • 确保ESP32以3.3 V供电,以免损坏。
  • 正确连接LDR和电阻以测量光照强度。
  • 如有需要,可使用去耦电容来稳定电源。
  • 检查模拟读取值,确保其在预期范围内。

接线说明

ESP32-22_light_sensor-wiring

要将LDR和电阻连接到ESP32,首先将LDR的一个端子连接到ESP32上的3.3 V电源引脚。LDR的另一个端子应连接到10 kΩ电阻的一个端子。将电阻的另一个端子连接到地线。

接下来,从LDR和电阻之间的连接点引出一根跳线,连接到ESP32上的35号引脚。这种设置构成了一个分压器,使ESP32能够根据照射到LDR上的光照强度读取变化的电压。确保所有连接牢固,并且LDR放置在能够准确感应光照变化的位置。

代码示例与讲解

在代码中,我们首先初始化串口通信以监测LDR的读数。这里的关键标识符是analogValue,它存储来自35号引脚的读数。

void setup() {
  Serial.begin(115200);
}

void loop() {
  int analogValue = analogRead(35);
  Serial.printf("ADC analog value = %d\n",analogValue);
  delay(100);
}

这段代码以115200的波特率初始化串口监视器,并持续读取35号引脚的模拟值。该值被打印到串口监视器上,使我们能够观察它如何随光照水平的变化而变化。

当光照强度变化时,LDR的电阻会随之改变,因此ESP32读取到的电压也会变化,从而反映光照条件(视频中12:45处)。

演示 / 预期效果

当你运行程序并观察串口监视器时,应该会看到ADC analog value根据环境光照条件波动。当你遮住LDR时,该值应增大,表示电阻增大;而将其暴露在强光下时,该值会显著降低。这种行为可用于根据预设阈值触发蜂鸣器或其他操作。

如果读数没有按预期变化,请检查接线问题,确保LDR没有悬空,并确认ESP32供电正常。这将有助于避免常见错误并确保平稳运行(视频中15:30处)。

视频时间戳

  • 00:00 开始
  • 1:48 LDR介绍
  • 8:33 接线说明
  • 11:07 Arduino代码讲解
  • 13:07 在Arduino IDE中选择ESP32开发板和COM端口
  • 14:49 读取值演示
  • 17:24 理解白天和夜晚的值
  • 18:47 DAC值与电压读取

图像

ESP32-22_light_sensor
ESP32-22_light_sensor
ESP32-22_light_sensor-wiring
ESP32-22_light_sensor-wiring
821-ESP32 Tutorial 22/55- Arduino code for Light dependant resistor
语言: C++
void setup() {
 // 以115200比特每秒初始化串行通信:
  Serial.begin(115200);

}

void loop() {
 // 读取模拟值
  int analogValue = analogRead(35);

 // 打印您读取的值:
  Serial.printf("ADC analog value = %d\n",analogValue);

  delay(100); // 在串口之间读取时延,以确保读取清晰
}

资源与参考

文件📁

没有可用的文件。