ESP32 PWM應用以及示例程序說明

2020年01月18日23:38:09 科技 1735

具有Arduino IDE的ESP32 PWM

在本教程中,我們將向您展示如何使用Arduino IDE通過ESP32生成PWM信號。作為示例,我們將構建一個簡單的電路,使用ESP32的LED PWM控制器使LED變暗。我們還將向您展示如何在不同的GPIO上同時獲得相同的PWM信號。

在繼續本教程之前,您應該在Arduino IDE中安裝ESP32插件。

所需部件

要使用本教程,您需要以下部分:

ESP32 DOIT DEVKIT V1 開發板

  • 3個5毫米LED
  • 3個330歐姆電阻
  • 麵包板
  • 跳線
  • ESP32 LED PWM控制器

    ESP32的LED PWM控制器具有16個獨立通道,可配置為生成具有不同屬性的PWM信號。

    這是您必須使用Arduino IDE通過PWM使LED變暗的步驟:

    1.首先,您需要選擇一個PWM通道。從0到15有16個頻道。

    2.然後,需要設置PWM信號頻率。對於LED,可以使用5000 Hz的頻率。

    3. 您還需要設置信號的占空比分辨率:分辨率為1到16位。我們將使用8位分辨率,這意味着您可以使用0到255之間的值來控制LED亮度。

    4. 接下來,您需要指定信號將出現在哪個GPIO上。為此,您將使用以下功能:

    ledcAttachPin(GPIO, channel)

    該函數接受兩個參數。第一個是將輸出信號的GPIO,第二個是將生成信號的通道。

    5. 最後,要使用PWM控制LED亮度,請使用以下功能:

    ledcWrite(channel, dutycycle)

    此函數接受生成PWM信號的通道和占空比作為參數。

    調光LED

    讓我們看一個簡單的示例,了解如何通過Arduino IDE使用ESP32 LED PWM控制器。

    原理圖

    如下圖所示,將LED線連接到ESP32。LED應該連接到GPIO 16。

    ESP32 PWM應用以及示例程序說明 - 天天要聞

    (此原理圖使用帶有30個GPIO的ESP32 DEVKIT V1模塊版本–如果您使用的是其他型號,請檢查所用電路板的引腳排列。)

    注意:您可以使用所需的任何引腳,只要它可以用作輸出即可。所有可用作輸出的引腳都可用作PWM引腳。

    程序代碼

    打開您的Arduino IDE並複製以下代碼。

    // the number of the LED pin

    const int ledPin = 16; // 16 corresponds to GPIO16

    // setting PWM properties

    const int freq = 5000;

    const int ledChannel = 0;

    const int resolution = 8;

    void setup(){

    // configure LED PWM functionalitites

    ledcSetup(ledChannel, freq, resolution);

    // attach the channel to the GPIO to be controlled

    ledcAttachPin(ledPin, ledChannel);

    }

    void loop(){

    // increase the LED brightness

    for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){

    // changing the LED brightness with PWM

    ledcWrite(ledChannel, dutyCycle);

    delay(15);

    }

    // decrease the LED brightness

    for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){

    // changing the LED brightness with PWM

    ledcWrite(ledChannel, dutyCycle);

    delay(15);

    }

    }

    首先定義LED所連接的引腳。在這種情況下,LED連接到GPIO 16。

    const int ledPin = 16; // 16 corresponds to GPIO16

    然後,設置PWM信號屬性。您定義的頻率為5000 Hz,選擇通道0生成信號,並將分辨率設置為8位。您可以選擇不同於這些的其他屬性來生成不同的PWM信號。

    const int freq = 5000;

    const int ledChannel = 0;

    const int resolution = 8;

    在setup()中,您需要通過使用ledcSetup()函數將LEDPWM配置為先前定義的屬性,該函數接受ledChannel,頻率和分辨率作為參數,如下所示:

    ledcSetup(ledChannel, freq, resolution);

    接下來,您需要選擇將從其獲取信號的GPIO。為此,請使用ledcAttachPin()函數,該函數接受要獲取信號的GPIO以及生成信號的通道作為參數。在此示例中,我們將在ledPin GPIO中獲取信號,該信號對應於GPIO 16。產生信號的通道是ledChannel,它對應於通道0。

    ledcAttachPin(ledPin, ledChannel);

    在循環中,您將在0到255之間改變占空比,以增加LED亮度。

    for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){

    // changing the LED brightness with PWM

    ledcWrite(ledChannel, dutyCycle);

    delay(15);

    }

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

    for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){

    // changing the LED brightness with PWM

    ledcWrite(ledChannel, dutyCycle);

    delay(15);

    }

    要設置LED的亮度,您只需要使用ledcWrite()函數,該函數接受生成信號的通道和占空比作為參數。

    ledcWrite(ledChannel, dutyCycle);

    當我們使用8位分辨率時,將使用0到255之間的值來控制占空比。請注意,在ledcWrite()函數中,我們使用的是生成信號的通道,而不是GPIO。

    測試示例

    將代碼上傳到ESP32。確保選擇了正確的板和COM端口。看你的電路。您應該有一個調光器LED,它可以增加和減少亮度。

    ESP32 PWM應用以及示例程序說明 - 天天要聞

    在不同的GPIO上獲得相同的信號

    您可以在不同的GPIO中從同一通道獲得相同的信號。為此,您只需要將這些GPIO附加到setup()的同一通道上即可。

    讓我們修改前面的示例,以使用來自同一通道的相同PWM信號使3個LED變暗。

    原理圖

    遵循下一個原理圖,在電路中再增加兩個LED:

    ESP32 PWM應用以及示例程序說明 - 天天要聞

    (此原理圖使用帶有30個GPIO的ESP32 DEVKIT V1模塊版本–如果您使用的是其他型號,請檢查所用電路板的引腳排列。)

    程序代碼

    將以下代碼複製到您的Arduino IDE。

    // the number of the LED pin

    const int ledPin = 16; // 16 corresponds to GPIO16

    const int ledPin2 = 17; // 17 corresponds to GPIO17

    const int ledPin3 = 5; // 5 corresponds to GPIO5

    // setting PWM properties

    const int freq = 5000;

    const int ledChannel = 0;

    const int resolution = 8;

    void setup(){

    // configure LED PWM functionalitites

    ledcSetup(ledChannel, freq, resolution);

    // attach the channel to the GPIO to be controlled

    ledcAttachPin(ledPin, ledChannel);

    ledcAttachPin(ledPin2, ledChannel);

    ledcAttachPin(ledPin3, ledChannel);

    }

    void loop(){

    // increase the LED brightness

    for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){

    // changing the LED brightness with PWM

    ledcWrite(ledChannel, dutyCycle);

    delay(15);

    }

    // decrease the LED brightness

    for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){

    // changing the LED brightness with PWM

    ledcWrite(ledChannel, dutyCycle);

    delay(15);

    }

    }

    該代碼與上一個代碼相同,但有一些修改。我們為兩個新的LED定義了另外兩個變量,分別引用GPIO 17和GPIO 5。

    const int ledPin2 = 17; // 17 corresponds to GPIO17

    const int ledPin3 = 5; // 5 corresponds to GPIO5

    然後,在setup()中,添加了以下幾行以將兩個GPIO分配給通道0。這意味着我們將在兩個GPIO上獲得在通道0上生成的相同信號。

    ledcAttachPin(ledPin2, ledChannel);

    ledcAttachPin(ledPin3, ledChannel);

    測試項目

    將程序上傳到ESP32。確保選擇了正確的板和COM端口。現在,看看您的電路:

    ESP32 PWM應用以及示例程序說明 - 天天要聞

    所有GPIO都輸出相同的PWM信號。因此,所有三個LED同時增加和減少亮度,從而產生同步效果。

    ESP32 PWM應用以及示例程序說明 - 天天要聞

    總而言之,在本文中,您學習了如何將ESP32的LED PWM控制器與Arduino IDE配合使用來使LED變暗。通過為信號設置正確的屬性,可以將學習到的概念用於PWM的其他輸出控制。

    科技分類資訊推薦

    今年618,我踩進了美團做的局 - 天天要聞

    今年618,我踩進了美團做的局

    壞了,最近可能是錢包被資本做局了。本來秉承着 618 一毛不拔的信念,但看到同事閃購到手一台華為 Pura 70 Ultra,不但國補後直接便宜了大幾百,相比各平台的 618 大促活動價,又直降小一百塊,干到了 ¥5496。
    中鼎智能毛利率持續下滑:遭索賠數千萬,銀行存款被凍結1150萬 - 天天要聞

    中鼎智能毛利率持續下滑:遭索賠數千萬,銀行存款被凍結1150萬

    《港灣商業觀察》廖紫雯日前,中鼎智能(無錫)科技股份有限公司遞表港交所,保薦機構為國泰君安國際。作為智能場內物流和倉儲自動化解決方案提供商,中鼎智能在2024年市場份額達到1.7%。業績面上,公司近年來毛利率持續下滑,從2022年的14.1%降至2024年的13.1%,且核心產品智能場內物流解決方案的毛利率也從2022年的13.4%...
    寶駿享境預售!13.28萬元起搶四大越級體驗 - 天天要聞

    寶駿享境預售!13.28萬元起搶四大越級體驗

    4 月 7 日,“2025 年上汽通用五菱技術進化日暨寶駿享境預售發布會” 上,寶駿首款 “智能超舒適旗艦家轎” 享境驚艷亮相!4 款車型(140km 插混雙版、600km 純電雙版)預售 13.28 萬 - 15.58 萬,靈眸智駕、靈語座艙等先鋒技術拉滿
    榮耀平板10今日開售 國補到手價1274.15元起 - 天天要聞

    榮耀平板10今日開售 國補到手價1274.15元起

    5月31號消息,榮耀平板10今日開售,搭載12.1英寸榮耀類紙柔光屏,內置純凈學習空間,採用全金屬一體機身。讓學生黨可以放心看、放心學。榮耀平板10國補價1274.15元起,可以選擇日出印象、天青色....
    余承東:今年Q4華為乾崑智駕ADS 4實現高速L3商用 - 天天要聞

    余承東:今年Q4華為乾崑智駕ADS 4實現高速L3商用

    2025年5月31日消息,2025(第三屆)未來汽車先行者大會在深圳國際會展中心(寶安),與2025(第二十九屆)粵港澳大灣區車展同步隆重舉行。華為常務董事、終端BG董事長余承東作為嘉賓出席大會並發....
    華為數字底盤引擎XMC首搭尊界S800亮相 - 天天要聞

    華為數字底盤引擎XMC首搭尊界S800亮相

    【中關村在線原創新聞】華為智能汽車解決方案正式發布革命性技術——華為數字底盤引擎XMC(HUAWEI XMotion Control),並宣布首款搭載該系統的車型尊界S800全球首發。這一突破性技術被業界視為"補齊智能化最後一塊拼圖"的關鍵解決方案,標誌着華為在智能汽車領域從智能座艙、自動駕駛向更底層的車輛運動控制域實現全棧技術...
    微信又有新功能 - 天天要聞

    微信又有新功能

    今天(5月31日)#微信朋友圈能摺疊了#登上熱搜好友發布的多條朋友圈信息可能會被摺疊在朋友圈信息下方顯示“餘下x條”點擊後可顯示好友發布的其他朋友圈消息騰訊客服回應對於朋友圈的摺疊功能,騰訊客服表示,如朋友圈頻繁發送廣告營銷等內容,為了優化