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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM