ESP32 具有 LED PWM 控制器,具有 16 个独立通道,可配置为生成具有不同属性的 PWM 信号。
使用 Arduino IDE 通过 PWM 对 LED 进行调光时必须遵循以下步骤:
1.首先,您需要选择一个PWM通道。从 0 到 15 有 16 个通道,一个led或一个马达需要占用一个通道。
2.然后,需要设置PWM信号频率。对于 LED,使用 5000 Hz 的频率就可以了。
3. 您还需要设置信号的占空比分辨率:分辨率为 1 至 16 位。我们将使用 8 位分辨率,这意味着您可以使用 0 到 255 之间的值来控制 LED 亮度。
4. 接下来,您需要哪个 GPIO使用指定信号。为此,您将使用以下函数:
ledcAttachPin(GPIO, channel)
该函数接受两个参数。第一个是输出信号的管脚,第二个是生成信号的通道。
5. 最后,要使用 PWM 控制 LED 亮度,请使用以下函数:
ledcWrite(channel, dutycycle)
该函数接受生成 PWM 信号的通道和占空比作为参数。
让我们通过一个简单的示例来了解如何通过 Arduino IDE 使用 ESP32 LED PWM 控制器。
示意图
将 LED 连接到 ESP32,如下图所示。 LED 应连接到GPIO 16。
(此原理图使用具有 30 个 GPIO 的 ESP32 DEVKIT V1 模块版本 - 如果您使用其他型号,请检查您正在使用的板的引脚排列。)
注意:您可以使用任何您想要的引脚,只要它可以充当输出即可。所有可作为输出的引脚均可用作 PWM 引脚。有关 ESP32 GPIO 的更多信息请查看:ESP32 引脚分配参考。
打开 Arduino IDE 并复制以下代码。led将逐渐变亮,然后逐渐熄灭。
const int ledPin = 16;
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(ledPin, ledChannel);
}
void loop(){
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
ledcWrite(ledChannel, dutyCycle);
delay(15);
}
}
以上实例可以更改成驱动马达转动:
const int pin1=26;
const int pin2=27;
const int ledPin = 16;
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
void setup(){
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(ledPin, ledChannel);
}
void loop(){
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
digitalWrite(pin1,HIGH);
digitalWrite(pin2,LOW);
ledcWrite(ledChannel,dutyCycle);
delay(15);
}
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
digitalWrite(pin1,HIGH);
digitalWrite(pin2,LOW);
ledcWrite(ledChannel,dutyCycle);
delay(15);
}
}