【ESP32最全学习笔记(基础篇)——6.ESP32 PWM(模拟输出)】

关于本教程:

ESP32 基础篇                                

1.ESP32简介                                                                

2.ESP32 Arduino 集成开发环境

3.VS 代码和 PlatformIO

4.ESP32 引脚

5.ESP32 输入输出

6.ESP32 脉宽调制 ☑

7.ESP32 模拟输入

8.ESP32 中断定时器

9.ESP32 深度睡眠

ESP32 协议篇

ESP32 网络服务器

ESP32 LoRa

ESP32 BLE

ESP32 BLE 客户端-服务器

ESP32 蓝牙

ESP32 MQTT

ESP32 ESP-NOW

ESP32 Wi-Fi

ESP32 WebSocket

ESP32 ESP-MESH

ESP32 邮箱

ESP32 短信

ESP32 HTTP 获取 POST

HTTP GET Web APIs

HTTP POST Web APIs

 ESP32 服务器篇

持续更新,关注博主不迷路!!!

 ESP32 传感器模块篇

持续更新,关注博主不迷路!!!

ESP32 终极实战篇

百余项ESP32实战项目,敬请关注!!!

        在本教程中,我们将向您展示如何使用 Arduino IDE 通过 ESP32 生成 PWM 信号。例如,我们将构建一个简单的电路,使用 ESP32 的 LED PWM 控制器对 LED 进行调光。我们还将向您展示如何在不同的 GPIO 上同时获得相同的 PWM 信号。

        在继续本教程之前,您应该在 Arduino IDE 中安装 ESP32 插件。如果您尚未安装 ESP32,请按照以下教程之一在 Arduino IDE 上安装。

所需零件

要学习本教程,您需要这些部分:

ESP32 DOIT DEVKIT V1 Board
3 个 5 毫米 LED
3x 330 欧姆电阻
面包板
跳线

ESP32 LED PWM 控制器

ESP32 有一个带 16 个独立通道的 LED PWM 控制器,可以配置为生成具有不同属性的 PWM 信号。

以下是使用 Arduino IDE 使用 PWM 调暗 LED 必须遵循的步骤:

1、首先需要选择一个PWM通道。从 0 到 15 共有 16 个通道。

2.然后,您需要设置PWM 信号频率。对于 LED,可以使用 5000 Hz 的频率。

3. 您还需要设置信号的占空比分辨率:分辨率为 1 到 16 位。我们将使用 8 位分辨率,这意味着您可以使用 0 到 255 之间的值来控制 LED 亮度。

4. 接下来,您需要指定信号将出现在哪些 GPIO 或 GPIO 上。为此,您将使用以下函数:

ledcAttachPin(GPIO, channel)

这个函数接受两个参数。第一个是将输出信号的 GPIO,第二个是将生成信号的通道。

5. 最后,要使用 PWM 控制 LED 亮度,请使用以下函数:

ledcWrite(channel, dutycycle)

此函数接受生成 PWM 信号的通道和占空比作为参数。

调暗 LED

让我们看一个简单的例子,看看如何使用 Arduino IDE 来使用 ESP32 LED PWM 控制器。

原理图

如下图所示,将 LED 连接到 ESP32。LED应连接到GPIO 16.

代码

打开您的 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);
  }

您首先要定义 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(),您需要使用您之前定义的属性配置 LED PWM,方法是使用ledcSetup()接受 ledChannel、频率和分辨率作为参数的函数,如下所示:

ledcSetup(ledChannel, freq, resolution);

接下来,您需要选择将从中获取信号的 GPIO。为此使用ledcAttachPin()函数接受您想要获取信号的 GPIO 和生成信号的通道作为参数。在这个例子中,我们将在LEDPinGPIO,对应于GPIO 16. 产生信号的通道是led频道,对应于通道 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 来增加和减少亮度。

在不同的 GPIO 上获得相同的信号

您可以从不同 GPIO 中的相同通道获得相同的信号。为此,您只需将这些 GPIO 连接到setup().

让我们修改前面的示例,使用来自同一通道的相同 PWM 信号调暗 3 个 LED。

原理图

按照下一个原理图在电路中再添加两个 LED:

(此示意图使用带有 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 端口。现在,看看你的电路:

所有 GPIO 都输出相同的 PWM 信号。因此,所有三个 LED 同时增加和减少亮度,从而产生同步效果。

总结

        总之,在这篇文章中,您学习了如何使用 ESP32 的 LED PWM 控制器和 Arduino IDE 来调暗 LED。通过为信号设置正确的属性,学到的概念可用于使用 PWM 控制其他输出。

物联沃分享整理
物联沃-IOTWORD物联网 » 【ESP32最全学习笔记(基础篇)——6.ESP32 PWM(模拟输出)】

发表评论