实验3: LED呼吸灯实验流程

使用 ESP32 PWM 技术实现呼吸灯效果

← 返回首页

一、实验目标

使用 ESP32 开发板自带的 LED 灯(通常连接在 GPIO2),通过 PWM(脉冲宽度调制)技术实现呼吸灯效果。

二、实验器材

三、实验步骤

步骤1:硬件确认

  1. 观察 ESP32 开发板,找到板载 LED。
  2. 确认 LED 位置(通常位于 USB 接口附近,标注为 "ON" 或 "LED")。
  3. 使用 USB 线连接 ESP32 和电脑。
  4. 观察板载 LED 是否亮起(电源指示灯)。

步骤2:软件准备

  1. 打开 Arduino IDE 2.3.6。
  2. 设置开发板类型:工具 → 开发板 → ESP32 Arduino → ESP32 Dev Module
  3. 选择端口:工具 → 端口 → 选择对应的 COM 端口(Windows)

步骤3:编写呼吸灯程序

在 Arduino IDE 中输入以下代码:

// 定义LED引脚
const int ledPin = 2;  

// 设置PWM属性
const int freq = 5000;          // 频率 5000Hz
const int ledChannel = 0;       // PWM通道 0 (ESP32有16个通道 0-15)
const int resolution = 8;       // 分辨率 8位 (0-255)

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

  // 1. 配置 PWM 功能 (频率, 分辨率, 通道)
  // 注意:在 ESP32 Arduino核心 v3.0+ 中,API有所变化,此处演示经典写法
  ledcSetup(ledChannel, freq, resolution);
  
  // 2. 将 PWM 通道绑定到 GPIO 引脚
  ledcAttachPin(ledPin, ledChannel);
}

void loop() {
  // 逐渐变亮
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    ledcWrite(ledChannel, dutyCycle);   // 设置当前占空比
    delay(10);                          // 延时控制呼吸速度
  }

  // 逐渐变暗
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    ledcWrite(ledChannel, dutyCycle);   
    delay(10);
  }
  
  Serial.println("Breathing cycle completed");
}

步骤4:上传程序

  1. 点击上传按钮(→)。
  2. 观察上传过程:
    • 如果出现 "上传失败",尝试按住 BOOT 按钮再点击上传。
    • 等待直到看到 "上传成功" 提示。
  3. 观察板载 LED 是否开始呼吸闪烁。

步骤5:观察效果与调试

  1. 观察 LED 变化:
    • LED 应缓慢变亮再缓慢变暗。
    • 循环往复,形成呼吸效果。
  2. 打开串口监视器:
    • 点击右上角 "串口监视器" 图标。
    • 设置波特率为 115200。
    • 观察输出的呼吸周期计数。
  3. 修改呼吸速度:
    • 修改代码中 delay(10) 的数值。
    • 数值变大 → 呼吸变慢。
    • 数值变小 → 呼吸变快。
    • 重新上传观察效果变化。

四、常见问题及解决

问题1:LED不亮

问题2:呼吸效果不明显

问题3:上传失败

五、实验总结

知识点掌握

  1. PWM 原理: 通过调节占空比(Duty Cycle)控制 LED 平均亮度。
  2. ESP32 PWM 配置:
    • ledcSetup():配置 PWM 通道参数(频率、分辨率)。
    • ledcAttachPin():绑定引脚到 PWM 通道。
    • ledcWrite():设置通道的占空比值。
  3. 呼吸灯算法: 通过循环结构(for循环)逐渐递增和递减占空比,配合 delay() 实现平滑过渡。