zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ps -aux --sort -rss |head 列出进程拿物理内存占用排序 使用ps aux 查看系统进程时,第六列即 RSS列显示的就是进程使用的物理内存。
    13 memcache服务检查
    shell 颜色
    expr判断整数是相加的值,返回命令的返回值$? 是0,但是少数情况是1,例如1 + -1 ,$? 的结果是1 ,判断要大于1最准确
    ZABBIX监控原理
    ansible分发密钥
    再来一个expect脚本
    11:菜单自动化软件部署经典案例
    19:批量检查多个网站地址是否正常
    数组迭代
  • 原文地址:https://www.cnblogs.com/cuianbing/p/14409053.html
Copyright © 2011-2022 走看看