實驗說明:
- 我們知道一個按鈕有兩種狀態:按下和釋放,LED會有開/關狀態,那麼我們要如何進入中間狀態呢? 如何輸出一個中間狀態讓LED“半亮” 呢? 這就是我們要學習的。米羅在本文將會介紹讓如何使用PWM訊號控制LED的亮度。
- 首先,PWM訊號最容易入門學習的就是呼吸燈,呼吸燈也就是LED逐漸由滅變亮,逐漸由亮變滅,就像“呼吸”一樣的滑順。 那麼,如何控制LED的亮度呢? 本章節將完成一個PWM訊號調控呼吸燈。
材料:
- ESP32-E DevKit
- USB 傳輸線
- 直插LED
- 220Ω直插電阻
- 麵包板
- 麵包板跳線
▼ 購買IoT物聯網學習教材:
相關知識:
- PWM,Pulse-Width Modulation,是一種利用數位訊號控制類比電路的非常有效的方法。普通微處理器是不能直接輸出類比訊號,然而PWM技術使得實現這種轉換非常方便(數位到類比訊號的轉換)。
- PWM技術利用數位腳位發送一定頻率的方波,即輸出高電位和低電位,交替持續一段時間。每組高電位和低電位的總時間一般是固定的,稱為週期(注:週期是頻率的倒數)。輸出高電位的時間一般稱為“脈衝寬度”,佔空比是脈衝持續時間或脈衝寬度(PW)佔波形總週期(T)的百分比。
- 所以高電位輸出持續時間越長,佔空比越長,類比訊號中對應的電壓就會越高。下圖顯示了類比訊號電壓如何在 0V-3.3V(高電平為 3.3V)之間變化,對應脈衝寬度 0%-100%:
PWM 佔空比越長,輸出功率就越高。現在我們了解了這種關係,我們可以使用 PWM 來控制 LED 的亮度或直流馬達的速度等。
安裝 ESP32 AnalogWrite 程式庫
- 在 Arduino 整合環境功能表點選 草稿碼 / 匯入程式庫 / 管理程式庫。
- 在右上方搜尋框輸入「ESP32 AnalogWrite」,下方會列出所有符合條件的程式庫,不同程式庫使用的程式碼並不相同。此處點 選「ESP32 AnalogWrite」,該項目右下角會出現「安裝」鈕,按「安裝」鈕開始安裝。
▼注意:假如使用下列程式碼發生編譯錯誤,則表示您目前安裝的ESP32函式庫較為新版,請務必將「#include <analogWrite.h>」這一行移除並重新編譯,則可編譯成功並正常運行。
程式:
#include <analogWrite.h>
int ledpin=15; //ESP32 GPIO15
void setup() {
pinMode(ledpin,OUTPUT);
}
void loop() {
for (int i = 0; i < 255; i++) { //LED 從滅到亮
analogWrite(ledpin,i);
delay(10);
}
for (int i = 255; i > -1; i--) { //LED 從亮到滅
analogWrite(ledpin,i);
delay(10);
}
}
將程式碼下載到 ESP32,您會看到 LED 從滅到亮,再從亮到滅逐漸像呼吸一樣。