五、ESP32使用PWM控制蜂鸣器

释放双眼,带上耳机,听听看~!
00:00
00:00

一.介绍

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

二.元器件清单

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

三.电路图

五、ESP32使用PWM控制蜂鸣器

三.代码

我们将首先声明控制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板的引脚。

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

  1. void setup() {
  2. Serial.begin(115200);
  3. ledcSetup(channel, freq, resolution);
  4. ledcAttachPin(12, channel);
  5. }

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

我们将改变的第一个值是占空比。所以在循环开始时我们将修复频率。虽然我们在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″]

  1. /*******************************************************
  2. ESP32PWM控制蜂鸣器
  3. 功能:实现蜂鸣器发出一定频率的声音
  4. 引脚:D12(GPIO12)
  5. Designer: Code_Mouse
  6. Date:2018-8-27
  7. *******************************************************/
  8. int freq = 2000;
  9. int channel = 0;
  10. int resolution = 8;
  11. void setup() {
  12. Serial.begin(115200);
  13. ledcSetup(channel, freq, resolution);
  14. ledcAttachPin(12, channel);
  15. }
  16. void loop() {
  17. ledcWriteTone(channel, 2000);
  18. for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle = dutyCycle + 10) {
  19. Serial.println(dutyCycle);
  20. ledcWrite(channel, dutyCycle);
  21. delay(1000);
  22. }
  23. ledcWrite(channel, 125);
  24. for (int freq = 255; freq < 10000; freq = freq + 250) {
  25. Serial.println(freq);
  26. ledcWriteTone(channel, freq);
  27. delay(1000);
  28. }
  29. }

[/scu]

四.测试代码

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

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

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

Set danmaku color
Set danmaku type
0:00 / 0:00
Speed
Loop
Show danmaku
Unlimited danmaku
Opacity for danmaku
0.5
0.75
Normal
1.25
1.5
2
[x]
Player version
Player FPS
Video type
Video url
Video resolution
Video duration

 

予人玫瑰,手有余香

给TA打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    ESP32ESP32-基础

    四、ESP32PWM功能

    2018-9-1 22:45:18

    ESP32ESP32-基础

    六、ESP32RGB-LED灯

    2018-9-4 23:30:20

    63 条回复 A文章作者 M管理员
    有些面具戴得太久,就摘不下来了
    欢迎您,新朋友,感谢参与互动!
    1. jghjhhj

      有帮助

    2.  静 

      来学习一下

    3. 园云Abb

      来学习搂

    4. yorkwei

      谢谢!学习了!

      • Luca

        加油

    5. 我爱小宇宙

      学习学习

    6. 中庸至道

      ?

    7. 无人念我

      666

    8. JOker

      666

    9. 々习惯々

      教程写的很棒,感谢分享

    10. S

      感谢分享

    11. Cumulus°

      学习

    12. 璀璨的星辰

      讲的透彻,解决了我一个问题。

    13. YolO

      很好

    14. 三川

      • Luca

        可以详细描述一下你的问题

    15. gxd

      简洁,清晰

    16. Xenoria

      学习

    17. 小明童学

      学习

    18. 左克俭

      学习了

    19. の演绎

      很全的教程

    20. 雨季

      nice

    21. 树先生4090

      看看

    22. 蕪的fáиɡ矢

      非常好

    23. 妳说

    24. gable

      有帮助

    25. 恧℡

    26. 细致

    27. BigSmart

      666

    28. 邓柯达

      66

    29. 张政

      不错

    30. SNKjxn

      nice!

    31. 嘿嘿

      哈哈好教程

    32. 清凉小年

      感谢分享!

    33. 碎憶書

      厉害了

    34. 哈"❤

      有用

    35. 圆桌的鬼神

      有帮助

    36. cosmosii

      挺好的,很实用

    37. starlight

      学习

    38. 小何DIY

      很棒!

    39. atstudy009

      BUCUO

    40. 阿甘

      学习

    41. Lucky

      1

    42. 小明同学

      不错

    43. 余伟小相如

      不错

    44. 学习

    45. 寐

      过来学习一下

    46.  7191

      EN

    47. 遇卿

      学习

    48. EqualYu🌸

      感谢作者

    49. 煎饼是饭

      学习

    50. 羽梦清晨

      好用

    51. KEVIN7817

      😁 学习了

    52. zny

      学习学习

    53. bt22

      qwq

    54. zgyhim

      1

    个人中心
    购物车
    优惠劵
    今日签到
    私信列表
    搜索
    '); })();