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的其他輸出控制。

    科技分類資訊推薦

    「中國新一代導彈技術布局」,在這背後是什麼技術? - 天天要聞

    「中國新一代導彈技術布局」,在這背後是什麼技術?

    「我們正在進行新一代導彈技術布局」,賽道加速背後的多維突破。北京西北郊某試驗場深夜的轟鳴,震顫著整個山谷。工程師陳偉注視著屏幕上跳躍的參數曲線——他們團隊研發的新型衝壓發動機持續燃燒時間又一次刷新紀錄。在這個無數科研團隊默默攻堅的領域裡,中
    波音 CEO 凱利・奧特伯格:財務上暫無力投資開發新飛機 - 天天要聞

    波音 CEO 凱利・奧特伯格:財務上暫無力投資開發新飛機

    IT之家 6 月 2 日消息,據英國《金融時報》1 日報道,波音 CEO 凱利・奧特伯格在接受採訪時表示,公司計劃開發一款取代 737 Max 的新機型,但目前「市場還沒準備好」,這項計劃暫時不會啟動。圖源 Pexels奧特伯格曾稱 2025 年是公司的「轉折之年」。作為前羅克韋爾柯林斯 CEO,他接手後需重建波音在一連串安全事故與生產問...
    京東618開門紅1小時成交額、訂單量超200% - 天天要聞

    京東618開門紅1小時成交額、訂單量超200%

    【環球網科技綜合報道】5月31日消息,記者從京東方面獲悉,開門紅1小時,京東618成交額、訂單量、下單用戶數同比增長均超200%,超2萬個品牌成交額同比增長超3倍。帶電品類領軍優勢進一步加大,首小時,帶電品類成交額同比增長超380%,Apple、小米、美的、華為、海爾等品牌成交額迅速破億元,超500個家電家居品牌成交額同比...
    小米高管稱優秀企業不怕小米,淘汰的都是劣質企業 - 天天要聞

    小米高管稱優秀企業不怕小米,淘汰的都是劣質企業

    6月1日,有博主稱小米汽車今年銷量預計 40 萬左右,明年 60 萬,後年達到80至100 萬,其認為明年和後年才是小米最難的時候。對此,小米產業投資部合伙人潘九堂評論稱,真正優秀的企業不怕甚至歡迎小米,小米的 「鯰魚效應」 讓手機和 IOT 領域的優秀企業更以用戶為中心,做好產品,淘汰的都是劣質企業。在汽車領域,小米選擇...
    《與輝同行》6月1日兒童節銷售出爐!GMV:3300萬+漲粉:2.6萬+ - 天天要聞

    《與輝同行》6月1日兒童節銷售出爐!GMV:3300萬+漲粉:2.6萬+

    6月1日,一向「以文化人」的董宇輝再一次用行動證明:在全民娛樂與理性消費並存的今天,一個帶著書卷氣的主播,也可以在喧囂的直播江湖中掀起不小的浪花。就在「兒童節」這個本不屬於成年世界的節日里,他的直播間卻迎來了1538.7萬+人圍觀,單日銷售