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-01 | FTDI 程序員 |
---|---|
Rx | Tx |
Tx | Rx |
CH_PD | 3.3V |
GPIO 0 | Gnd |
Vcc | 3.3V |
Gnd | Gnd |
結果
將LED連接到GPIO2之后,上傳代碼並重啟后,會看到LED像呼吸燈一樣的閃爍着。
您可以連接GPIO 2到示波器,了解 PWM 信號如何隨時間變化。