ESP8266的PWM(模拟输出)

ESP8266的PWM(模拟输出)

本教程演示如何使用 ESP8266 NodeMCU 使用 Arduino IDE 生成 PWM 信号。例如,我们将通过一段时间改变占空比来降低 LED 亮度。

ESP8266 NodeMCU PWM (脉冲宽度调制)

ESP8266 GPIOs 可以设置为输出 0V 或 3.3V,但它们不能输出任何电压。但是,您可以使用脉冲宽度调制 (PWM) 输出"假"中电平电压,这就是您将为该项目生成不同级别的 LED 亮度。

如果 LED 的电压在"高"和"低"之间快速交替,则眼睛无法跟上 LED 开关的速度;你只会看到一些亮度的渐变。

image-20210207094853467

这基本上就是PWM的工作原理——通过产生在高频率和低之间变化的输出。

占空比是将 LED 设置为"高"的时间段的分数。下图说明了 PWM 的工作原理。

脉宽调制(PWM)如何在ESP8266上工作以使LED变暗

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,如下图所示。

image-20210207095133955

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,则需要使用串行适配器来上传代码。以下是您需要建立的连接:

ESP8266 ESP-01 connected to FTDI programmer to upload new Arduino Sketch

ESP-01 FTDI 程序员
Rx Tx
Tx Rx
CH_PD 3.3V
GPIO 0 Gnd
Vcc 3.3V
Gnd Gnd

结果

将LED连接到GPIO2之后,上传代码并重启后,会看到LED像呼吸灯一样的闪烁着。

image-20210207095250234

您可以连接GPIO 2到示波器,了解 PWM 信号如何随时间变化。

image-20210207095318837

posted @ 2021-02-17 16:08  崔安兵  阅读(12518)  评论(0编辑  收藏  举报