如何将 DFMini player MP3 模块与 Arduino 结合使用

要创建此项目,您将使用:


DFPlayer迷你MP3模块
10kΩ电阻
开关按钮 
面包板 
Arduino UNO 

杜邦线
 

现在,我们将学习如何构建该项目。

什么是DF Mini Player MP3模块

DFMini Player 模块是一个小型音乐播放器。它成本低、功耗低,可再现存储卡上存储的声音。

基于此,模块可以通过独立模式进行控制,即在该模式下,只有DFMini模块、供电电池、扬声器、控制它的按钮以及存储歌曲的SD卡。

另一种控制方法是使用 Arduino 或其他控制设备。例如,Arduino 将通过串行通信与 DFMini 播放器模块发送命令。 DFMini Player 模块如图 1 所示。

dfmini_YSxlLVh49X.jpg

图 1 - DFMini 播放器模块。

为了控制它,使用基本的独立电路非常重要。该电路如图 2 所示。

Circuitostandalone_4xsAxVYrKj.jpg

 DFMini 播放器模块的独立电路。

上面电路中显示的两个按钮用于更改音乐曲目和控制声音的音量。

连接到引脚 IO1 的按钮用于转到上一曲目并降低音量。

快速触摸,系统将返回上一首歌曲,但是,如果按下按钮超过 1 秒,系统将降低歌曲的音量。

连接到引脚 IO2 的按钮用于转到下一曲目并增加音量。

快速触摸,系统将前进到下一首歌曲,但是,如果按下按钮超过 1 秒,系统将增加歌曲的音量。

在这种独立方法中,歌曲必须保存在存储卡上。

这样,每次按下按钮时,系统都会按升序或降序播放每首歌曲。

然而,当使用Arduino或其他控制设备时,我们必须修改SD卡上音乐文件的组织方式。

现在,我将介绍如何使用 Arduino 通过串行通信来控制 DFMini Player。

使用 Arduino 控制 DFMini 播放器

在这一步中,音量控制、范围控制、均衡命令和其他功能将由Arduino发送。

Arduino 必须通过串口与 DFMini Player 进行通信并发送控制命令。控制电路的电子原理图如图4所示。

arduinomusic_vTmxulRDli.jpg

使用 Arduino 的电子原理图。

首先,我们必须组装下图所示的电路。

组装好该电路后,您必须将歌曲添加到存储卡上。在此步骤中,歌曲应重命名为例如01、02、03。

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"//Inicia a serial por software nos pinos 10 e 11
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
char command;
int pausa = 0;void setup()
{
//Comunicacao serial com o modulo
mySoftwareSerial.begin(9600);
//Inicializa a serial do Arduino
Serial.begin(115200);
//Verifica se o modulo esta respondendo e se o
//cartao SD foi encontrado
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini"));
Serial.println(F("Initializing DFPlayer module ... Wait!"));if (!myDFPlayer.begin(mySoftwareSerial))
{
Serial.println(F("Not initialized:"));
Serial.println(F("1. Check the DFPlayer Mini connections"));
Serial.println(F("2. Insert an SD card"));
while (true);
}Serial.println();
Serial.println(F("DFPlayer Mini module initialized!"));//Definicoes iniciais
myDFPlayer.setTimeOut(500); //Timeout serial 500ms
myDFPlayer.volume(5); //Volume 5
myDFPlayer.EQ(0); //Equalizacao normal
menu_opcoes();
}void loop()
{//Waits for data entry via serial
while (Serial.available() > 0)
{
command = Serial.read();if ((command >= '1') && (command <= '9'))
{
Serial.print("Music reproduction");
Serial.println(command);
command = command - 48;
myDFPlayer.play(command);
menu_opcoes();
}//Reproduction
//Stopif (command == 's')
{
myDFPlayer.stop();
Serial.println("Music Stopped!");
menu_opcoes();
}//Pausa/Continua a musica
if (command == 'p')
{
pausa = !pausa;
if (pausa == 0)
{
Serial.println("Continue...");
myDFPlayer.start();
}if (pausa == 1)
{
Serial.println("Music Paused!");
myDFPlayer.pause();
}menu_opcoes();
}//Increases volume
if (command == '+')
{
myDFPlayer.volumeUp();
Serial.print("Current volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}if (command == '<')
{
myDFPlayer.previous();
Serial.println("Previous:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()-1);
menu_opcoes();
}if (command == '>')
{
myDFPlayer.next();
Serial.println("next:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()+1);
menu_opcoes();
}//Decreases volume
if (command == '-')
{
myDFPlayer.volumeDown();
Serial.print("Current Volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}}
}void menu_opcoes()
{
Serial.println();
Serial.println(F("=================================================================================================================================="));
Serial.println(F("Commands:"));
Serial.println(F(" [1-3] To select the MP3 file"));
Serial.println(F(" [s] stopping reproduction"));
Serial.println(F(" [p] pause/continue music"));
Serial.println(F(" [+ or -] increases or decreases the volume"));
Serial.println(F(" [< or >] forwards or backwards the track"));
Serial.println();
Serial.println(F("================================================================================================================================="));
}

上面提供的代码非常简单,将帮助您按编号选择歌曲、停止、暂停、控制音量并传递曲目。

音乐控制包括将数据从 Arduino IDE 串行发送到我们的 Arduino 板。

最初,系统在设置中进行配置并检查SD卡是否插入模块中。如果未插入,系统会显示一条消息来提醒用户。

此外,系统还会显示带有系统配置选项的消息。

void setup()
{
//Comunicacao serial com o modulo
mySoftwareSerial.begin(9600);
//Inicializa a serial do Arduino
Serial.begin(115200);
//Verifica se o modulo esta respondendo e se o
//cartao SD foi encontrado
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini"));
Serial.println(F("Initializing DFPlayer module ... Wait!"));if (!myDFPlayer.begin(mySoftwareSerial))
{
Serial.println(F("Not initialized:"));
Serial.println(F("1. Check the DFPlayer Mini connections"));
Serial.println(F("2. Insert an SD card"));
while (true);
}Serial.println();
Serial.println(F("DFPlayer Mini module initialized!"));//Definicoes iniciais
myDFPlayer.setTimeOut(500); //Timeout serial 500ms
myDFPlayer.volume(5); //Volume 5
myDFPlayer.EQ(0); //Equalizacao normal
menu_opcoes();
}

如果插入存储卡,代码流程将进入循环函数。

void loop()
{//Waits for data entry via serial
while (Serial.available() > 0)
{
command = Serial.read();if ((command >= '1') && (command <= '3'))
{
Serial.print("Music reproduction");
Serial.println(command);
command = command - 48;
myDFPlayer.play(command);
menu_opcoes();
}//Reproduction
//Stopif (command == 's')
{
myDFPlayer.stop();
Serial.println("Music Stopped!");
menu_opcoes();
}//Pausa/Continua a musica
if (command == 'p')
{
pausa = !pausa;
if (pausa == 0)
{
Serial.println("Continue...");
myDFPlayer.start();
}if (pausa == 1)
{
Serial.println("Music Paused!");
myDFPlayer.pause();
}menu_opcoes();
}//Increases volume
if (command == '+')
{
myDFPlayer.volumeUp();
Serial.print("Current volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}if (command == '<')
{
myDFPlayer.previous();
Serial.println("Previous:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()-1);
menu_opcoes();
}if (command == '>')
{
myDFPlayer.next();
Serial.println("next:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()+1);
menu_opcoes();
}//Decreases volume
if (command == '-')
{
myDFPlayer.volumeDown();
Serial.print("Current Volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}}
}

用户可以发送以下控制字符:

  • 数字1至3:选择要播放的歌曲;
  • 字母s:停止歌曲;
  • 字母p:暂停歌曲;
  • 发送+号:增大歌曲音量;
  • 发送-信号:减小歌曲音量;
  • 发送信号<:选择上一首歌曲;
  • 发送信号>:选择下一首歌曲;

Arduino 将通过串口接收这些信号、字母和数字,并控制要播放的音乐。

下面在内部介绍了每个条件及其各自的命令。

if ((command >= '1') && (command <= '3'))
{
Serial.print("Music reproduction");
Serial.println(command);
command = command - 48;
myDFPlayer.play(command);
menu_opcoes();
}//Reproduction
//Stopif (command == 's')
{
myDFPlayer.stop();
Serial.println("Music Stopped!");
menu_opcoes();
}//Pausa/Continua a musica
if (command == 'p')
{
pausa = !pausa;
if (pausa == 0)
{
Serial.println("Continue...");
myDFPlayer.start();
}if (pausa == 1)
{
Serial.println("Music Paused!");
myDFPlayer.pause();
}menu_opcoes();
}//Increases volume
if (command == '+')
{
myDFPlayer.volumeUp();
Serial.print("Current volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}if (command == '<')
{
myDFPlayer.previous();
Serial.println("Previous:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()-1);
menu_opcoes();
}if (command == '>')
{
myDFPlayer.next();
Serial.println("next:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()+1);
menu_opcoes();
}//Decreases volume
if (command == '-')
{
myDFPlayer.volumeDown();
Serial.print("Current Volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}}

因此,如果您应用了所提供的所有步骤,您就能够学习:

  • DFMini Player MP3的基本工作电路;
  • 存储卡上声音文件的组织和配置;
  • 使用 Arduino 进行音乐控制。

通过此代码,您可以开发需要使用声音作为系统功能的其他项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五月采购节 | 全场板卡八七折起

淘宝搜索【北京迅为电子官方企业】 5月13日~5月15日 海量优惠券等你拿&#xff01; 复制下方链接到淘宝 直接进入店铺&#xff01; https://shop459378556.taobao.com

空号检测-号码批量检测API接口-关机停机风险号检测

手机空号检测分为普通空号检测和实时检测两种类型&#xff1a; 普通空号检测返回结果&#xff1a;实号、风险号、空号、沉默号 。 1.普通版的检测不会实时更新数据&#xff0c;因此其数据库中的信息可能不是最新的。 2.覆盖基础运营商的数据库&#xff0c;检测范围相对有限&…

每个工作室都需要的10种插件类型

插件通常是将平淡的表现转变为引人注目的声音艺术品的最灵活和经济高效的方式。对于大多数没有足够空间或资金积累昂贵外置设备的人来说&#xff0c;在电脑中工作是我们的录音能够达到广播标准的理想途径。在德声&#xff0c;我们认为每个工作室都可以从插件中受益&#xff0c;…

Spring Boot整合ElasticSearch实战 - 第511篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

呼叫中心系统选pscc好还是okcc好

选择PSCC&#xff08;商业软件呼叫中心&#xff09;还是OKCC&#xff08;开源呼叫中心&#xff09;&#xff0c;应基于以下几个关键因素来决定&#xff1a; 技术能力&#xff1a;如果企业拥有或愿意投入资源培养内部技术团队&#xff0c;开源解决方案可能更合适&#xff0c;因为…

Spring+Mybatis-plus 实现 Gauss DB数据库代码生成

需求&#xff1a; 使用的gauss db数据库&#xff08;类似oracle语法&#xff09;&#xff0c;需要根据指定表生成entity、dao等代码 1&#xff0c;引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.or…

http代理ip按流量划算还是个数划算?

随着科技的进步和互联网的发展&#xff0c;越来越多的企业在业务上都需要用到代理&#xff0c;那么http代理ip按流量划算还是个数划算&#xff1f;小编接下来就跟大家介绍一下&#xff1a; 首先我们得先了解http代理ip的按流量模式和个数模式分别是什么&#xff1a; 一、按流…

软件设计中的数字:7

“ 使软件更易理解的秘密&#xff1a;米勒法则” 小游戏 学习之前先一起玩一个小游戏。 3秒钟时间&#xff0c;看看下面的图片中有多少个小块&#xff1f; 3秒到了&#xff0c;数出来了吗&#xff1f;22个。 没数出来也没关系&#xff0c;我也没数出来o(╥﹏╥)o 现在&…

WEB前端复习——JS

JS是运行在客户端的脚本&#xff08;script&#xff09;语言 引入JS进html ①sript标签内编写 <script type"text/javascript">document.write("<h1>hi</h1>")window.alert("who") </script> ②外部JS script src【…

生产环境节点扩容方案

datanode节点扩缩容(1人天) 注意:新增节点需要走商务,节点扩容需要申请新的license 制品包下载 #内网下载(环境检查脚本) wget --user=admin --password=Y!bC2hx0TN@21cal http://10.69.71.180:8082/artifactory/product/qiudongyang/precheck/os-check20221127.tar…

牛客热题:比较版本号

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;比较版本号题目链接方法一:暴力…

Elasticsearch做到像mysql这样的表连接Parent-Child实现

比如在mysql中我有两张表&#xff0c;movies和ratings&#xff0c;这两张表依赖movie_id实现关联。 那么我需要在elasticsearch中实现一下两个任务 电影标题为When Will I Be Loved的电影评分的均值是多少电影评分大于5的电影标题是什么 可以看出来这两个问题都需要将movies和…

服务调用中的异常处理方案

背景 在微服务架构中,A服务调用B服务,当B服务中抛出异常时,我们的意愿是能够获取到所有的异常信息,并且可以触发服务的熔断降级。 但由于全局异常处理机制的存在,会帮我们处理B服务中抛出的异常,并把HTTP的状态码设置为200,那么此时对A服务来说,对B服务抛出的异常是无…

在线抠图网站

https://pixian.ai/ 这个网站提供一键去除图像背景的智能抠图服务。 水印去除剂 - 删除照片中的任何水印 该网站是一个智能抠图工具&#xff0c;可以帮助用户去除照片中的水印。 HAMA | AI Object remover, Image Eraser 这是一个智能抠图AI工具的网站&#xff0c;可以帮助…

电商平台接口自动化框架实践||电商API数据采集接口

电商数据采集接口 语言&#xff1a;python 接口自动化实现流程 红色为可实现/尚未完成 绿色为需要人工干预部分 自动生成测试用例模板&#xff08;俩种方式二选一&#xff09;&#xff1a; mimproxy&#xff0c;通过浏览器代理抓包方式&#xff0c;访问 H5 或者 web 页面&a…

processing完整教程

概述&#xff1a;processing在我眼里就是libgdx的高度封装&#xff0c;如果各位会libgdx&#xff0c;学processing应该可以说是无师自通&#xff0c;当然processing是java语言那边的。 processing是什么&#xff1f; 官网是这样解释的&#xff1a;Processing 是一本灵活的软件…

PTA 6-2 入侵者围剿第二关2情报解密

经过上一步&#xff0c;已经创建了2个分队的情报信息链&#xff0c;现在需要将2个分队的情报进行合并&#xff0c;并删除重复值&#xff0c;合并后的情报信息确保唯一性。 假定上一步输入的情报信息是有序的&#xff0c;现在是合并2个有序链表。 函数接口定义&#xff1a; 第…

每周一算法:无向图的最小环

题目链接 观光之旅 题目描述 给定一张无向图&#xff0c;求图中一个至少包含 3 3 3 个点的环&#xff0c;环上的节点不重复&#xff0c;并且环上的边的长度之和最小。 该问题称为无向图的最小环问题。 你需要输出最小环的方案&#xff0c;若最小环不唯一&#xff0c;输出…

core.sshd.xxxxxx文件过大

背景 【紧急】【应用分组】应用: 接入点服务, 分组: 观众预发, ip: xx.xx.xx.xx 【/】&#xff0c;磁盘使用率已连续2次大于90% [当前值:100%]。报警时间: 2024-05-13 14:07:01 原因 登录机器查看&#xff0c;发现根目录下有大量的崩溃文件将 / 打满 处理 1&#xff0c; 删…

C#链接数据库、操作sql、选择串口

// 公共增删方法 using MySql.Data.MySqlClient; using System.Data; namespace ****** {public class MySQLHelper{private MySqlConnection conn null;private MySqlCommand comm null;private MySqlDataReader reader null;/// <summary>/// 构造方法里建议连…