五、ESP32使用PWM控制蜂鸣器

一.介绍

此教程的目的是解释如何使用其PWM功能控制ESP32的蜂鸣器,由于 ESP32的Arduino库尚未实现音调功能,因此只能使用PWM频率控制蜂鸣器这一种方法了。

二.元器件清单

  • ESP32开发板
  • 一个蜂鸣器
  • 面包板
  • 导线若干

三.电路图

三.代码

我们将首先声明控制ESP32的PWM功能所需的一些全局变量。我们将设置初始频率(虽然我们将在代码中稍后更改),PWM的通道和占空比规范的分辨率。

我们将使用通道0和8位的分辨率作为占空比。对于频率,我们将仅使用2000 Hz进行初始设置。

int freq = 2000;
int channel = 0;
int resolution = 8;

现在,在设置功能中,我们将使用ledcSetup功能设置PWM,该功能接收PWM通道,频率和占空比分辨率作为输入。

接下来,我们将通过调用ledcAttachPin函数将PWM通道连接到ESP32的实际GPIO 。这接收GPIO和信道作为输入。我将使用ESP32的GPIO 12。请注意,某些ESP32引脚不能直接映射到ESP32板的引脚。

我们还将打开启动串行通信,因此我们可以检查输出有关执行的一些信息。检查下面的完整设置功能。

void setup() {

Serial.begin(115200);
ledcSetup(channel, freq, resolution);
ledcAttachPin(12, channel);

}

现在我们将转向主回路功能,我们将通过改变频率和占空比配置来试验我们的蜂鸣器。

我们将改变的第一个值是占空比。所以在循环开始时我们将修复频率。虽然我们在setup函数中配置它,但我们希望它在主循环的每次迭代开始时重置为原始值。

因此,要再次设置频率,我们调用ledcWriteTone函数,将PWM通道和要设置的频率作为输入传递。我们将其设置为2000 Hz,作为初始配置。

ledcWriteTone(channel, 2000);

接下来,我们将执行一个for循环,从PWM开始为零,并在每次迭代时将其增加10。我们可以在0到255之间改变占空比,因为我们指定了8位的分辨率。

我们将在每次迭代中引入1秒的小延迟,因此我们可以听取更改它的效果。我们还将打印当前的占空比值。

要设置占空比,我们只需要调用ledcWrite函数,将通道和占空比值作为输入传递给设置。

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

Serial.println(dutyCycle);

ledcWrite(channel, dutyCycle);
delay(1000);
}

接下来我们将改变频率。因此,我们将首先将占空比固定在125(约50%)。接下来,我们将执行类似于前一个的循环,但这次以0 Hz的频率开始并将其增加250到10000 Hz。我们还将再次将当前值打印到串行端口。

您可以查看完整的源代码,其中已包含前面提到的循环,其中频率通过调用ledcWriteTone函数递增。

/*******************************************************
* ESP32PWM控制蜂鸣器
* 功能:实现蜂鸣器发出一定频率的声音
* 引脚:D12(GPIO12)
* Designer: Code_Mouse
* Date:2018-8-27
*******************************************************/

int freq = 2000;
int channel = 0;
int resolution = 8;

void setup() {

Serial.begin(115200);
ledcSetup(channel, freq, resolution);
ledcAttachPin(12, channel);

}

void loop() {

ledcWriteTone(channel, 2000);

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

Serial.println(dutyCycle);

ledcWrite(channel, dutyCycle);
delay(1000);
}

ledcWrite(channel, 125);

for (int freq = 255; freq < 10000; freq = freq + 250){

Serial.println(freq);

ledcWriteTone(channel, freq);
delay(1000);
}

}

四.测试代码

要测试代码,只需使用Arduino IDE将其上传到ESP32。然后打开串口检查频率值和占空比的变化。

当ESP32连接到蜂鸣器时,您应首先通过改变占空比来改变蜂鸣器产生的音量。然后,当改变频率时,您会注意到产生的声音也会改变。

您可以在下面的视频中查看在ESP32板上运行此代码的结果;

 

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论