来做一下ESP32的PWM调速

2018-10-302.1万
AI 快速预览详细 收起
本文介绍了如何使用ESP32的PWM功能来控制LED亮度。首先,通过设置5000Hz的信号频率和8位精度,可以实现0-255范围内的亮度调节。然后,通过选择GPIO引脚并使用ledcAttachPin和ledcWrite函数,可以实现LED亮度的渐变效果。此外,还展示了如何同时控制多个LED的亮度。
来做一下ESP32的PWM调速图1
ESP32有16口可以做PWM调速,0-15
然后要选PWM的信号频率控LED,5000Hz。
LED亮度调节用8位精度。也就是0-255来调节。
最后选定针脚来工作,命令如下:
ledcAttachPin(GPIO, channel)
控制亮度用另一个函数
ledcWrite(channel, dutycycle)
来做一下ESP32的PWM调速图2
举个例,我用一个16脚来控制LED。
那程序如下:
[mw_shl_code=applescript,true]// Done by gada888
//设定LED脚
const int ledPin = 16; // 16 = GPIO16
// 设PWM参数
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// 设LED PWM 功能
ledcSetup(ledChannel, freq, resolution);
// 指定选的GPIO位LED控制脚
ledcAttachPin(ledPin, ledChannel);
}
void loop(){
// 调亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// PWM调节
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// 调暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// PWM调节
ledcWrite(ledChannel, dutyCycle);
delay(15);缓冲
}
}[/mw_shl_code]

同样道理,可以一次调好几个灯
来做一下ESP32的PWM调速图3
[mw_shl_code=applescript,true]//done by gada888
// 设定LED 脚
const int ledPin = 16; // 16=GPIO16
const int ledPin2 = 17; // 17=GPIO17
const int ledPin3 = 5; // 5=GPIO5
// 设PWM参数
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
// 设定LED调速功能
ledcSetup(ledChannel, freq, resolution);
//指定要干活的GPIO
ledcAttachPin(ledPin, ledChannel);
ledcAttachPin(ledPin2, ledChannel);
ledcAttachPin(ledPin3, ledChannel);
}
void loop(){
// 调亮
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// PWM调速
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
// 调暗
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// PWM 调速
ledcWrite(ledChannel, dutyCycle);
delay(15);缓冲
}
}[/mw_shl_code]

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
佳佳Julie
佳佳Julie
请问,能不能一次调的三个灯都是不同的频率呢?
佳佳Julie
佳佳Julie回复佳佳Julie
我知道了,在channel那里设置不同的号数就可以了
- 没有更多了 -