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万+人围观,单日销售