码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 物联网开发笔记(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音乐播放

     

  • 相关阅读:
    提升演讲口才,助青少年踏上成功之路
    深度学习【pytorch安装,入门,梯度下降,线性回归】
    互联网摸鱼日报(2022-12-03)
    微信小程序健康预约检查管理系统的开发与实现
    关于使用鼠标时间mouseMove拖拽元素及元素抖动的解决方案
    Leetcode739. 每日温度
    【Buildroot】记一次编译出错gzip: popt-1.16.tar.gz: not in gzip format--更改br里面的默认下载地址
    XC6206P332MR(0.25V低压差线性LDO稳压器,稳压输出3.3V,最大电压输入6V,输出电流250mA)
    如何开发出来一款解决抖音本地生活的软件营销工具?
    Jenkins :添加node权限获取凭据、执行命令
  • 原文地址:https://blog.csdn.net/zhusongziye/article/details/126689722
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号