使用 ESP32 PWM 技术实现呼吸灯效果
使用 ESP32 开发板自带的 LED 灯(通常连接在 GPIO2),通过 PWM(脉冲宽度调制)技术实现呼吸灯效果。
PWM (Pulse Width Modulation) 即脉冲宽度调制。它是一种通过快速开关数字信号来模拟模拟信号的技术。
占空比是指在一个脉冲周期内,高电平(ON)持续时间占整个周期时间的百分比。
由于 LED 开关速度非常快(远超人眼识别频率),人眼看到的不是闪烁,而是平均亮度的变化。
工具 → 开发板 → ESP32 Arduino → ESP32 Dev Module工具 → 端口 → 选择对应的 COM 端口(Windows)在 Arduino IDE 中输入以下代码:
// 定义LED引脚
const int ledPin = 2;
// 设置PWM属性
const int freq = 5000; // 频率 5000Hz
const int resolution = 8; // 分辨率 8位 (0-255)
void setup() {
Serial.begin(115200);
// 【新版用法】直接将引脚、频率和分辨率绑定
// 它会自动返回一个关联的通道(如果需要的话)
ledcAttach(ledPin, freq, resolution);
}
void loop() {
// 逐渐变亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// 【新版用法】直接通过引脚号写入,不再需要指定通道
ledcWrite(ledPin, dutyCycle);
delay(10);
}
// 逐渐变暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
ledcWrite(ledPin, dutyCycle);
delay(10);
}
Serial.println("Breathing cycle completed");
}
delay(10) 的数值。问题1:LED不亮
问题2:呼吸效果不明显
delay() 值。问题3:上传失败
ledcSetup():配置 PWM 通道参数(频率、分辨率)。ledcAttachPin():绑定引脚到 PWM 通道。ledcWrite():设置通道的占空比值。delay() 实现平滑过渡。🤔 思考题:
sin() 或指数函数)