ESP8266-Arduino编程实例-PWM

PWM

本文将演示如何使用ESP8266 NodeMCU生成PWM信号,通过随时间改变占空比来调节 LED 亮度。

ESP8266 GPIO 可以设置为输出 0V 或 3.3V,但在0~3.3V之间不能输出任何电压。 尽管如此,可以使用脉宽调制 (PWM) 输出“假”中电平电压,从而产生不同级别的 LED 亮度的方式。

如果非常快速地在 HIGH 和 LOW 之间切换 LED 的电压,眼睛将无法跟上 LED 开关的速度; 只会看到亮度的一些渐变。

在这里插入图片描述

在这里插入图片描述

这基本上就是 PWM 的工作原理——通过产生一个以非常高的频率在 HIGH 和 LOW 之间变化的输出。

占空比是 LED 设置为高电平的时间段的一部分。 下图说明了 PWM 的工作原理。

在这里插入图片描述

50% 的占空比导致 50% 的 LED 亮度,0 占空比意味着 LED 完全关闭,100 占空比意味着 LED 完全开启。 更改占空比是产生不同亮度级别的方式。

关于PWM的更多介绍,请参考:

要在给定引脚上产生 PWM 信号,请使用以下函数:

1
2
analogWrite(pin, value);

参数说明如下:

  • pin:PWM 可用于引脚 0 到 16
  • value:应该在 0 到 PWMRANGE 的范围内,默认为 255。 当值为 0 时,该引脚上的 PWM 被禁用。 值 255 对应于 100% 占空比

更改PWM范围如下:

1
2
analogWriteRange(new_range);

默认情况下,ESP8266 PWM 频率为 1kHz。 可以通过以下方式更改 PWM 频率:

1
2
analogWriteFreq(new_frequency);

有效的频率值为:100Hz到40000H

1、硬件准备

  • ESP8266 NodeMCU开发板一块
  • LED一个
  • 470欧姆电阻一个
  • 杜邦线若干
  • 数据线一条

2、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

3、硬件电路接线图

在这里插入图片描述

LED引脚连接到D4(GPIO2)。

4、代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <Arduino.h>
const int ledPin = 2; // LED引脚

void setup() {

}

void loop() {
// 增加LED亮度
for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){
// 使用 PWM 改变 LED 亮度
analogWrite(ledPin, dutyCycle);
delay(1);
}

// 降低LED亮度
for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){
// 使用 PWM 改变 LED 亮度
analogWrite(ledPin, dutyCycle);
delay(1);
}
}

5、代码解析

首先,定义LED引脚

1
2
const int ledPin = 2; // LED引脚

接着,在loop函数中,改变通过设置PWM输出来改变LED亮度,使占空比从0-255,LED逐渐变亮。

1
2
3
4
5
6
for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){ 
// 使用 PWM 改变 LED 亮度
analogWrite(ledPin, dutyCycle);
delay(1);
}

最后,使PWM的占空比从255-0,LED亮度逐渐变暗。

1
2
3
4
5
6
for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){
// 使用 PWM 改变 LED 亮度
analogWrite(ledPin, dutyCycle);
delay(1);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126006835