0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【FireBeetle 2 ESP32-S3开发板测评】MIDI音乐播放器

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2023-07-23 09:01 次阅读

前言

本片我们使用PWM输出不同频率占空比的信号来驱动喇叭,实现MIDI音乐播放器的Demo。

PWM驱动喇叭原理

PWM驱动喇叭有两种方法

一种是PWM-ADC方法,即控制PWM占空比实现不同电压等级的输出,来模拟DAC的输出;

一种是控制PWM频率,直接播放数字MIDI音乐即不同频率代表不同的音调。

我们这里采用第二种方式来实现音乐播放。

以国际标准音A-la-440HZ为准:

do的频率为261.6HZ,

re的频率为293.6HZ,

mi的频率为329.6HZ,

fa的频率为349.2HZ,

sol的频率为392HZ,

la的频率为440HZ,

si的频率为493.8HZ。

我们升一个八度则

Do频率为261.6x2=523.2Hz,其他的类推。

控制PWM频率就可以输出上述音调,控制PWM占空比则可对应声音的大小,播放时间长度则可对应音节时长。

以两只老虎为例
图片16.png

播放音乐需要三个参数

频率:beepfrep对应音调

声音大小: beepduty 占空比

播放时间: beeptime 对应节拍

简谱中可以看到

2/4拍子 4分音符一拍 每小节2拍

一分钟76拍。

图片17.png

于是可以定义音调和上述参数如下

DO = 523

RE = 587

MI = 659

FA = 698

_SO = 392

SO = 784

LA = 880

SI = 987

NO = 523

DUTY0 = 0

METERS = 76 #拍数76 1分钟76拍 每拍60/76秒

#2/4  4分音符一拍 每小节2拍

NOTE_4 = (60/METERS) #先定一拍对应的音符 4分音符

NOTE_8 = (NOTE_4/2) # 8分音符 一个下划线

NOTE_16 = (NOTE_8/2) # 16分音符 二个下划线

beepfrep = [DO,RE,MI,DO,

DO,RE,MI,DO,

MI,FA,SO,NO,

MI,FA,SO,NO,

SO,LA,SO,FA,MI,DO,

SO,LA,SO,FA,MI,DO,

DO,_SO,DO,NO,

DO,_SO,DO,NO]

beepduty = [400,400,400,400,

400,400,400,400,

400,400,400,DUTY0,

400,400,400,DUTY0,

400,400,400,400,400,400,

400,400,400,400,400,400,

400,400,400,DUTY0,

400,400,400,DUTY0,

]

beeptime = [NOTE_8,NOTE_8,NOTE_8,NOTE_8,

NOTE_8,NOTE_8,NOTE_8,NOTE_8,

NOTE_8,NOTE_8,NOTE_8,NOTE_8,

NOTE_8,NOTE_8,NOTE_8,NOTE_8,

NOTE_16,NOTE_16,NOTE_16,NOTE_16,NOTE_8,NOTE_8,

NOTE_16,NOTE_16,NOTE_16,NOTE_16,NOTE_8,NOTE_8,

NOTE_8,NOTE_8,NOTE_8,NOTE_16,

NOTE_8,NOTE_8,NOTE_8,NOTE_16,

]

代码

完整代码如下

import time
from machine import Pin, PWM
pwm = PWM(Pin(21))

DO = 523
RE = 587
MI = 659
FA = 698
_SO = 392
SO = 784
LA = 880
SI = 987
NO = 523
DUTY0 = 0
METERS = 76 #拍数76 1分钟76拍 每拍60/76#2/4  4分音符一拍 每小节2拍
NOTE_4 = (60/METERS) #先定一拍对应的音符 4分音符
NOTE_8 = (NOTE_4/2) # 8分音符 一个下划线
NOTE_16 = (NOTE_8/2) # 16分音符 二个下划线

beepfrep = [DO,RE,MI,DO,
DO,RE,MI,DO,
MI,FA,SO,NO,
MI,FA,SO,NO,
SO,LA,SO,FA,MI,DO,
SO,LA,SO,FA,MI,DO,
DO,_SO,DO,NO,
DO,_SO,DO,NO]

beepduty = [400,400,400,400,
400,400,400,400,
400,400,400,DUTY0,
400,400,400,DUTY0,
400,400,400,400,400,400,
400,400,400,400,400,400,
400,400,400,DUTY0,
400,400,400,DUTY0,
]

beeptime = [NOTE_8,NOTE_8,NOTE_8,NOTE_8,
NOTE_8,NOTE_8,NOTE_8,NOTE_8,
NOTE_8,NOTE_8,NOTE_8,NOTE_8,
NOTE_8,NOTE_8,NOTE_8,NOTE_8,
NOTE_16,NOTE_16,NOTE_16,NOTE_16,NOTE_8,NOTE_8,
NOTE_16,NOTE_16,NOTE_16,NOTE_16,NOTE_8,NOTE_8,
NOTE_8,NOTE_8,NOTE_8,NOTE_16,
NOTE_8,NOTE_8,NOTE_8,NOTE_16,
]

while(1):
    for i in range(len(beepfrep)):
        pwm.freq(beepfrep[i])
        pwm.duty_u16(beepduty[i])
        time.sleep(beeptime[i])

测试

接上喇叭,这里使用了功放

PWM使用P21
图片18.png

运行程序

图片19.png

可以听到演奏的效果,详细见视频

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 播放器
    +关注

    关注

    5

    文章

    394

    浏览量

    37337
  • 编程
    +关注

    关注

    88

    文章

    3556

    浏览量

    93520
  • 开发板
    +关注

    关注

    25

    文章

    4874

    浏览量

    96972
  • 代码
    +关注

    关注

    30

    文章

    4708

    浏览量

    68176
  • 单板计算机
    +关注

    关注

    0

    文章

    74

    浏览量

    15606
  • 编译
    +关注

    关注

    0

    文章

    647

    浏览量

    32759
  • MIDI
    +关注

    关注

    0

    文章

    75

    浏览量

    15599
  • ESP32
    +关注

    关注

    17

    文章

    947

    浏览量

    16958
收藏 人收藏

    评论

    相关推荐

    FireBeetle 2 ESP32-S3开发板测评

    一. 开箱 FireBeetle 2 ESP32-S3是dfrobot基于ESP32-S3-WROOM-1-N16R8模组出品的一款小巧的开发板
    的头像 发表于 07-23 16:23 1698次阅读
    <b class='flag-5'>FireBeetle</b> <b class='flag-5'>2</b>  <b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发板</b><b class='flag-5'>测评</b>

    FireBeetle 2 ESP32-S3开发板测评】Arduino IDE快速开发体验

    FireBeetle 2 ESP32-S3开发板测评】Arduino IDE快速开发体验
    的头像 发表于 07-23 09:03 2368次阅读
    【<b class='flag-5'>FireBeetle</b> <b class='flag-5'>2</b>  <b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发板</b><b class='flag-5'>测评</b>】Arduino IDE快速<b class='flag-5'>开发</b>体验

    FireBeetle 2 ESP32-S3开发板测评】MicroPython开发体验

    FireBeetle 2 ESP32-S3开发板测评】MicroPython开发体验
    的头像 发表于 07-23 09:02 1690次阅读
    【<b class='flag-5'>FireBeetle</b> <b class='flag-5'>2</b> <b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发板</b><b class='flag-5'>测评</b>】MicroPython<b class='flag-5'>开发</b>体验

    FireBeetle 2 ESP32-S3开发板测评MIDI音乐播放器

    播放器
    jf_1137202360
    发布于 :2023年07月22日 23:30:44

    FireBeetle 2 ESP32-S3开发板体验】使用PyCharm开发MicroPython体验

    ://wiki.dfrobot.com.cn/_SKU_DFR0975_FireBeetle_2_Board_ESP32_S3#target_0 由于最近在研究Python,所以拿到开发板就想着折腾一下,利用所学进行开发板
    发表于 07-28 11:43

    FireBeetle 2 ESP32-S3开发板体验】1、资料获取、环境、固件烧写、点灯。

    1、开发板资料获取:DFROBOT DFR0975 FireBeetle 2 Board ESP32-S3 产品资料 使用教程 2、我准备用
    发表于 07-28 17:36

    FireBeetle 2 ESP32-S3开发板体验】时间显示 基于ssd1306 I2C 调用开源库 事半功倍

    时间显示 基于ssd1306 I2C 调用开源库 事半功倍 简介 FireBeetle 2 ESP32-S3可以使用Arduino IDE、ESP
    发表于 07-29 10:04

    FireBeetle 2 ESP32-S3开发板体验】测评1_搭建开发环境

    第1章 开发板开箱以及开发环境搭建 感谢电子发烧友社区提供的测评机会,参加DFRobot 的FireBeetle 2
    发表于 07-29 21:40

    FireBeetle 2 ESP32-S3开发板体验】001:开箱+搭建Arduino开发环境

    FireBeetle 2 Board ESP32 S3引脚示意该开发板相关资料在官方页面都有提供,内容非常详细,对
    发表于 07-29 22:22

    FireBeetle 2 ESP32-S3开发板体验】在Arduino中充分利用FireBeetle 2 ESP32-S3的16MB Flash做SPIFFS

    DFRobot提供的这款 FireBeetle 2 ESP32-S3 开发板,从官方WiKi上,可以了解到详细的硬件信息: 处理:Xten
    发表于 08-02 09:55

    合宙ESP32-S3开发板特性解读

    穿越万水千山,奔赴与工程师朋友的约定——合宙ESP32-S3超值MCU开发板,来了! 1 合宙ESP32-S3开发板简介 合宙CORE-ESP32S
    的头像 发表于 01-11 18:45 9726次阅读

    新品上市 | 合宙ESP32-S3开发板

    穿越万水千山,奔赴与工程师朋友的约定——合宙ESP32-S3超值MCU开发板,来了!1合宙ESP32-S3开发板简介合宙CORE-ESP32S3
    的头像 发表于 01-13 15:53 2777次阅读
    新品上市 | 合宙<b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发板</b>

    基于ESP32S3系列模组的开发板

    基于ESP32S3系列模组的开发板
    的头像 发表于 04-10 11:25 3690次阅读
    基于<b class='flag-5'>ESP32S3</b>系列模组的<b class='flag-5'>开发板</b>

    基于ESP32-S3的高性能开发板介绍

    FireBeetle 2 ESP32-S3是一款基于ESP32-S3-WROOM-1-N16R8模组设计的主控
    的头像 发表于 09-05 11:33 9429次阅读
    基于<b class='flag-5'>ESP32-S3</b>的高性能<b class='flag-5'>开发板</b>介绍

    Banana Pi 开源硬件基于ESP32-S3开发的物联网开发板系列

    Banana Pi 开源硬件基于ESP32-S3开发的物联网开发板系列
    的头像 发表于 09-28 16:21 1078次阅读
    Banana Pi 开源硬件基于<b class='flag-5'>ESP32-S3</b><b class='flag-5'>开发</b>的物联网<b class='flag-5'>开发板</b>系列