一.介绍
此教程的目的是解释如何使用其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函数,将通道和占空比值作为输入传递给设置:
接下来我们将改变频率。因此,我们将首先将占空比固定在125(约50%)。接下来,我们将执行类似于前一个的循环,但这次以0 Hz的频率开始并将其增加250到10000 Hz。我们还将再次将当前值打印到串行端口。
您可以查看完整的源代码,其中已包含前面提到的循环,其中频率通过调用ledcWriteTone函数递增。
[scu name=”arduino-ide-post” platform=”esp32:esp32:esp32″]
/*******************************************************
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);
}
}
[/scu]
四.测试代码
要测试代码,只需使用Arduino IDE将其上传到ESP32。然后打开串口检查频率值和占空比的变化。
当ESP32连接到蜂鸣器时,您应首先通过改变占空比来改变蜂鸣器产生的音量。然后,当改变频率时,您会注意到产生的声音也会改变。
您可以在下面的视频中查看在ESP32板上运行此代码的结果;
不错
挺好的,很实用
很实用!
有帮助
来学习一下
来学习搂
过来认真学习
谢谢!学习了!
加油
学习学习
?
666
666
教程写的很棒,感谢分享
感谢分享
学习
讲的透彻,解决了我一个问题。
很好
?
可以详细描述一下你的问题
简洁,清晰
学习
学习
学习了
很全的教程
nice
看看
非常好
好
有帮助
好
?
细致
666
66
不错
nice!
哈哈好教程
感谢分享!
厉害了
正在寻找资源
有用
有帮助
挺好的,很实用
学习
很棒!
BUCUO
学习
1
不错
不错
学习
6
过来学习一下
EN
学习
感谢作者
学习
好用
😁 学习了
学习学习
qwq
1