ESP8266Arduino编程实例PWM
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 | analogWrite(pin, value); |
参数说明如下:
- pin:PWM 可用于引脚 0 到 16
- value:应该在 0 到 PWMRANGE 的范围内,默认为 255。 当值为 0 时,该引脚上的 PWM 被禁用。 值 255 对应于 100% 占空比
更改PWM范围如下:
1 | analogWriteRange(new_range); |
默认情况下,ESP8266 PWM 频率为 1kHz。 可以通过以下方式更改 PWM 频率:
1 | analogWriteFreq(new_frequency); |
有效的频率值为:100Hz到40000H
1、硬件准备
- ESP8266 NodeMCU开发板一块
- LED一个
- 470欧姆电阻一个
- 杜邦线若干
- 数据线一条
2、软件准备
- Arduino IDE或VSCode + PlatformIO
在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:
ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:
3、硬件电路接线图

LED引脚连接到D4(GPIO2)。
4、代码实现
1 | #include <Arduino.h> |
5、代码解析
首先,定义LED引脚
1 | const int ledPin = 2; // LED引脚 |
接着,在loop函数中,改变通过设置PWM输出来改变LED亮度,使占空比从0-255,LED逐渐变亮。
1 | for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){ |
最后,使PWM的占空比从255-0,LED亮度逐渐变暗。
1 | for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){ |
文章来源: https://iotsmart.blog.csdn.net/article/details/126006835