ESP8266 NodeMCU PWM –暗淡的LED(模擬輸出)

本課程介紹如何使用Arduino IDE通過ESP8266 NodeMCU生成PWM信號。舉例來說,我們將通過隨時間改變工作週期來使LED亮度變暗變亮。

ESP8266上的PWM信號分辨率為10位元。要使用Arduino IDE在ESP8266引腳上生成PWM信號,請使用AnalogWrite(pin, value)。使用整數形式,值的範圍是0~1023。

您可能還想閱讀有關PWM的其他指南:

  • 帶有Arduino IDE的ESP32 PWM –昏暗的LED
  • 帶有MicroPython的ESP32 / ESP8266 PWM –昏暗的LED

在繼續本課程之前,您應該已在Arduino IDE中安裝了ESP8266插件。按照之前的教程在Arduino IDE中安裝ESP8266

ESP8266 NodeMCU PWM(脈波寬度調變) 

ESP8266 GPIO可以設置為輸出0V或3.3V,而它們之間不能輸出任何電壓。但是,您可以使用脈波寬度調變(PWM)輸出“偽”中間電壓,這將為該示範產生不同級別的LED亮度。

如果您非常快地在高和低之間切換LED的電壓,您的眼睛將無法跟上LED開關的速度。您將只看到亮度的一些漸變。

ESP8266褪色LED,具有AnalogWrite功能的脈寬調製(PWM)

這基本上就是PWM的工作原理-通過產生一個在非常高的頻率下在HIGH和LOW之間變化的輸出。

工作週期是LED設置為高電平的時間的一部分。下圖說明了PWM的工作原理。

ESP8266上的脈寬調製(PWM)如何使LED褪色

50%的工作週期導致50%的LED亮度,0的週期意味著LED完全熄滅,而100的佔空比意味著LED完全點亮。更改工作週期是產生不同級別亮度的方式。

AnalogWrite() 

要在給定的引腳上產生PWM信號,請使用以下功能:
analogWrite(pin, value);
  • pin:PWM可以在引腳0到16上使用
  • value:應介於0到1023的脈波寬度調變值。當值為0時,該引腳上的PWM被禁用。值1023對應於100%工作週期

您可以通過調用以下命令來更改PWM範圍:

analogWriteRange(new_range);

ESP8266的PWM頻率預設為1kHz。您可以通過以下方式更改PWM頻率:

analogWriteFreq(new_frequency);

ESP8266 NodeMCU調光LED,帶PWM 

在本節中,我們將構建一個簡單的示例,該示例使LED變暗,以便您了解如何在項目中使用PWM。您將需要以下部分:
  • ESP8266(閱讀最佳ESP8266開發板)
  • 5mm LED
  • 330歐姆電阻
  • 麵包板
  • 跳線
  • 可選示波器(請閱讀適用於初學者的最佳示波器)

原理圖 

上傳程式碼後,按照以下原理圖所示,將LED連線連接到ESP8266。
ESP8266 LED燈與GPIO 2連線示意圖

ESP8266 NodeMCU PWM程式碼 

將程式碼複製到Arduino IDE並將其上傳到ESP8266。
/*********
  Terry Lee
  完整專案明細說明在 http://honeststore.com.tw
*********/

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;

在裡面 loop(),您可以在0到1023之間改變工作週期,以增加LED亮度。

for(int dutyCycle = 0; dutyCycle < 1023; dutyCycle++){   
    // 用PWM改變LED亮度
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }

然後,在1023和0之間降低亮度。

for(int dutyCycle = 1023; dutyCycle > 0; dutyCycle--){
    // 用PWM改變LED亮度
    analogWrite(ledPin, dutyCycle);
    delay(1);
  }

要設置LED亮度,您需要使用 AnalogWrite() 該函數接受要在其中獲取PWM信號的GPIO以及在0到1023之間的值以設置工作週期的GPIO參數。

範例 

上傳草稿圖後,LED連接到 GPIO 2 會隨時間增加和減少其亮度。

總結 

我們希望您已經對本ESP8266 PWM用法指南有所興趣。除了控制LED的亮度外,PWM還可以用於控制直流馬達的速度。

您可能還喜歡嘗試我們的其他項目:

  • ESP8266 OLED顯示幕中的DHT溫濕度讀數
  • ESP8266 DHT溫濕度Web服務器
  • 使用ESP8266入侵PIR運動感測器
  • 搭建一個ESP8266 Web服務器

如果您喜歡ESP8266,請確保您了解我們的資源:

  • 使用ESP8266的家庭自動化(電子書+視頻課程)
  • ESP8266的免費教程和項目
  • 使用ESP32和ESP8266進行MicroPython編程

謝謝閱讀。

發佈留言