ESP8266的PWM(模拟输出)
ESP8266的PWM(模拟输出)
本教程演示如何使用 ESP8266 NodeMCU 使用 Arduino IDE 生成 PWM 信号。例如,我们将通过一段时间改变占空比来降低 LED 亮度。
ESP8266 NodeMCU PWM (脉冲宽度调制)
ESP8266 GPIOs 可以设置为输出 0V 或 3.3V,但它们不能输出任何电压。但是,您可以使用脉冲宽度调制 (PWM) 输出"假"中电平电压,这就是您将为该项目生成不同级别的 LED 亮度。
如果 LED 的电压在"高"和"低"之间快速交替,则眼睛无法跟上 LED 开关的速度;你只会看到一些亮度的渐变。
这基本上就是PWM的工作原理——通过产生在高频率和低之间变化的输出。
占空比是将 LED 设置为"高"的时间段的分数。下图说明了 PWM 的工作原理。
50% 的占空比可产生 50% 的 LED 亮度,占空比为 0 表示 LED 完全关闭,占空比为 100 表示 LED 完全打开。改变占空比是产生不同亮度级别的方式。
模拟写入
要在给定引脚上生成 PWM 信号,可以使用analogWrite()
函数:
analogWrite(pin, value);
- pin:输出的针脚(引脚 0 到 16都可以)
- value: 应在 0 到PWMRANGE,默认情况下为 1023。当值为 0 时,该引脚上禁用 PWM。值 1023 对应于 100% 占空比
您可以通过调用以下功能更改PWMRANGE:
analogWriteRange(new_range);
默认情况下,ESP8266 PWM 频率为 1kHz。可以使用analogWriteFreq()
函数来修改
analogWriteFreq(new_frequency);
ESP8266 节点模糊 LED 带 PWM
在本节中,我们将构建一个简单的示例,该示例使 LED 变暗。需要准备以下电子元器件
- ESP8266
- 5mm LED
- 330 欧姆电阻
- 面包板
- 跳线
- 示波器(可选)
原理图
将 LED 连接到 ESP8266,如下图所示。
ESP8266 NodeMCU PWM 代码
将代码复制到 Arduino IDE 并上传到您的 ESP8266。
const int ledPin = 2;
void setup() {
}
void loop() {
// 增加LED亮度
for(int dutyCycle = 0; dutyCycle < 1023; dutyCycle++){
// 通过PWM改变LED亮度
analogWrite(ledPin, dutyCycle);
delay(1);
}
// 降低LED亮度
for(int dutyCycle = 1023; dutyCycle > 0; dutyCycle--){
// 通过PWM改变LED亮度
analogWrite(ledPin, dutyCycle);
delay(1);
}
}
工作原理
继续阅读本节以了解代码的工作原理,或跳到下一节。
首先定义引脚 LED 所连接到。在这种情况下,LED 连接到GPIO 2(D4)。
const int ledPin = 2;
在for循环,将占空比值从 0 和 1023 之间变化,以提高 LED 亮度。
for(int dutyCycle = 0; dutyCycle < 1023; dutyCycle++){
analogWrite(ledPin, dutyCycle);
delay(1);
}
然后,在1023和0之间降低亮度。
for(int dutyCycle = 1023; dutyCycle > 0; dutyCycle--){
analogWrite(ledPin, dutyCycle);
delay(1);
}
要设置 LED 亮度,您需要使用analogWrite()
函数,该函数的参数是GPIO针脚和占空比。
上传代码
在 Arduino IDE 中,工具>开发板并选择您的 ESP8266 型号(如果没有找到您开发板的型号,请选择"Generic ESP8266 Module")。
转到工具>端口并选择连接到 ESP8266 的 COM 端口。
如果您使用的是 ESP-01,则需要使用串行适配器来上传代码。以下是您需要建立的连接:
ESP-01 | FTDI 程序员 |
---|---|
Rx | Tx |
Tx | Rx |
CH_PD | 3.3V |
GPIO 0 | Gnd |
Vcc | 3.3V |
Gnd | Gnd |
结果
将LED连接到GPIO2之后,上传代码并重启后,会看到LED像呼吸灯一样的闪烁着。
您可以连接GPIO 2到示波器,了解 PWM 信号如何随时间变化。