ESP8266 的 PWM(模拟输出)


本文由 简悦 SimpRead 转码, 原文地址 www.cnblogs.com

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-01FTDI 程序员
RxTx
TxRx
CH_PD3.3V
GPIO 0Gnd
Vcc3.3V
GndGnd

结果

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

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

EOF

* 本文作者: 崔安兵

声明:HEUE NOTE|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA 4.0协议进行授权

转载:转载请注明原文链接 - ESP8266 的 PWM(模拟输出)