• 物联网开发笔记(10)- 使用Wokwi仿真micropython on ESP32开发板实现音乐播放


    一、实现目的

            利用ESR32开发板和蜂鸣器,实现乐曲播放。原理是通过GPIO口控制PWM的输出,调节不同的音量大小来实现。

    二、硬件连接

            

    三、代码分析

    看注释,写的很明白哦。

    main.py

    1. # 蜂鸣器演奏音乐的两个要素就是声音频率、声音持续时间,分别对应乐谱中的音调、节拍。
    2. from machine import Pin,PWM
    3. import time
    4. beeper = PWM(Pin(22)) #定义PWM波端口为GPIO22 # 通过Pin对象来创建PWM对象
    5. tone = [247,262,294,330,349,392,440,494,523,587,659,698,784,1000] # 设置蜂鸣器的声音大小,由ADC值来控制,蜂鸣器声音范围0-1023
    6. # 音调
    7. music=[
    8. 5,5,6,8,7,6,5,6,13,13,
    9. 5,5,6,8,7,6,5,3,13,13,
    10. 2,2,3,5,3,5,6,3,2,1,
    11. 6,6,5,6,5,3,6,5,13,13,
    12. 5,5,6,8,7,6,5,6,13,13,
    13. 5,5,6,8,7,6,5,3,13,13,
    14. 2,2,3,5,3,5,6,3,2,1,
    15. 6,6,5,6,5,3,6,1,
    16. 13,8,9,10,10,9,8,10,9,8,6,
    17. 13,6,8,9,9,8,6,9,8,6,5,
    18. 13,2,3,5,5,3,5,5,6,8,7,6,
    19. 6,10,9,9,8,6,5,6,8
    20. ]
    21. # 节拍
    22. beat = [
    23. 2,4,2,2,2,2,2,8,4,4,
    24. 2,4,2,2,2,2,2,8,4,4,
    25. 2,4,2,4,2,2,4,2,2,8,
    26. 2,4,2,2,2,2,2,8,4,4,
    27. 2,4,2,2,2,2,2,8,4,4,
    28. 2,4,2,2,2,2,2,8,4,4,
    29. 2,4,2,4,2,2,4,2,2,8,
    30. 2,4,2,2,2,2,2,8,
    31. 4,2,2,2,4,2,2,2,2,2,8,
    32. 4,2,2,2,4,2,2,2,2,2,8,
    33. 4,2,2,2,4,2,2,5,2,6,2,4,
    34. 2,2,2,4,2,4,2,2,12
    35. ]
    36. '''
    37. # 方法一:
    38. i = 0
    39. while True:
    40. speed = beat[i] # 设置播放速度,speed值越小,等待时间越短,播放速度越快
    41. voice = tone[music[i]] # 音调大小
    42. beeper.init(freq=voice) # PWM初始化并设置PWM频率
    43. time.sleep(speed) # 等待时间
    44. print(voice) # 打印出ADC值
    45. i = i + 1 # i自增加1
    46. if i > len(music) - 1: # 如果i的值大于music列表的长度
    47. beeper.deinit() # 关闭PWM
    48. break # 跳出循环
    49. '''
    50. # 方法二:
    51. for i,j in zip(music,beat):
    52. if(music == []): # 判断列表是否为空
    53. beeper.duty(0) # 设置PWM波的占空比为0
    54. else:
    55. beeper.duty(512) # 设置PWM波的占空比为512,即50%
    56. beeper.freq(tone[i-1])
    57. time.sleep(0.12*j) # 控制节拍速度
    58. beeper.duty(0)
    59. time.sleep(0.15)

    diagram.json

    1. {
    2. "version": 1,
    3. "author": "Anonymous maker",
    4. "editor": "wokwi",
    5. "parts": [
    6. {
    7. "type": "wokwi-esp32-devkit-v1",
    8. "id": "esp",
    9. "top": 0,
    10. "left": 0,
    11. "attrs": { "env": "micropython-20220618-v1.19.1" }
    12. },
    13. {
    14. "type": "wokwi-buzzer",
    15. "id": "bz1",
    16. "top": -84.77,
    17. "left": 139.23,
    18. "attrs": { "volume": "0.1" }
    19. }
    20. ],
    21. "connections": [
    22. [ "esp:TX0", "$serialMonitor:RX", "", [] ],
    23. [ "esp:RX0", "$serialMonitor:TX", "", [] ],
    24. [ "esp:D22", "bz1:2", "red", [ "h0" ] ],
    25. [ "esp:GND.1", "bz1:1", "black", [ "h0" ] ]
    26. ]
    27. }

    实现效果,点击下方链接,打开网页查看:

    ESP32音乐播放

     

  • 相关阅读:
    C++获取系统毫秒级时间(自1970年1月1日至今的毫秒数)
    做3D建模的女生多吗?揭露行业比列
    vue3 provide inject
    python 获取上个月时间
    Qt5开发及实例V2.0-第十六章-Qt汽车销售管理系统实例
    用DIV+CSS技术设计的鲜花网站(web前端网页制作课作业)
    力扣373. 查找和最小的 K 对数字 优先队列法
    Apache POI实现Excel导入读取数据和写入数据并导出
    [附源码]计算机毕业设计JAVAjsp医院网上预约系统
    Foxit PDF SDK 5.9.6 for ActiveX Crack
  • 原文地址:https://blog.csdn.net/zhusongziye/article/details/126689722