27037浏览
查看: 27037|回复: 12

[项目] 红外遥控播放器-播放你的音乐(DFPlayer)

[复制链接]

上次一直想做一个音乐播放器,但是不知道何原因一直没能成功,于是在网上找资料,在其他论坛找到一个教程自己来做做看,这个作品是基于DFPlayer和uno板子来做的。大家会问DFPlayer是什么?

DFPlayer Mini 是一款小巧且价格低廉的MP3模块,可以直接接驳扬声器。模块配合供电电池、扬声器、按键可以单独使用,也可以通过串口控制,作为Arduino UNO或者是任何有串口的单片机的一个模块。模块本身完美的集成了MP3、WAV、WMA的硬解码。同时软件支持TF卡驱动,支持FAT16、FAT32文件系统。通过简单的串口指令即可完成播放指定的音乐,以及如何播放音乐等功能,无需繁琐的底层操作,使用方便,稳定可靠。 更详尽的文档 可以参考产品资料库找更专业的资料



器材准备:


DFRduino UNO R3IR kit红外遥控套

DFPlayer Mini 播放器模块

杜邦线、电阻等等




官方声明:此模块可以直接使用Arduino供电,并不会对Arduino本身造成任何影响。
如果使用Arduino供电,切记需要在串口通信端口上增加两个1K电阻用来消除噪音!



以下是搭建好的电路:



  1. /*
  2. *  name:     DFPlayer_Mini_Mp3
  3. *  version:  1.0
  4. *  Author:   Apple tec.<[email]godfights@163.com[/email]>
  5. *  Date:     2015-07-16
  6. *  Description:  红外遥控DFPlayer迷你板
  7. *  note: mp3 file must put into mp3 folder in your tf card
  8. */
  9. #include <IRremote.h>
  10. #include <SoftwareSerial.h>
  11. #include <DFPlayer_Mini_Mp3.h>
  12. //定义对应16进制数值的常量名
  13. #define POWER   0xFD00FF       //电源
  14. #define VOLUP   0xFD807F       //VOL+
  15. #define STOP    0xFD40BF       //FUNC/STOP
  16. #define PREV    0xFD20DF       //后退/上一曲
  17. #define PAUSE   0xFDA05F       //暂停/播放
  18. #define NEXT    0xFD609F       //前进/下一曲
  19. #define DOWN    0xFD10EF       //下一页
  20. #define VOLDOWN 0xFD906F       //VOL-
  21. #define UP      0xFD50AF       //上一页
  22. #define ZERO    0xFD30CF       //0
  23. #define EQ      0xFDB04F       //EQ
  24. #define REPT    0xFD708F       //ST/REPT
  25. #define ONE     0xFD08F7       //1
  26. #define TWO     0xFD8877       //2
  27. #define THREE   0xFD48B7       //3
  28. #define FOUR    0xFD28D7       //4
  29. #define FIVE    0xFDA857       //5
  30. #define SIX     0xFD6897       //6
  31. #define SEVEN   0xFD18E7       //7
  32. #define EIGHT   0xFD9867       //8
  33. #define NINE    0xFD58A7       //9
  34. int recvPin = 2;               //红外接收器到ardunio的端口
  35. boolean a = true;              //播放逻辑设定
  36. int i = 20;                    //初始化音量
  37. int z = 0;                     //初始化音效
  38. IRrecv recv(recvPin);         //初始化接收
  39. decode_results res;          //储存接收到的数据
  40. void setup() {
  41.   Serial.begin(9600);          //初始化串口
  42.   recv.enableIRIn();            //允许接收数据
  43.   mp3_set_serial (Serial);     //设置串行DFPlayer-mini mp3模块
  44.   mp3_set_volume (i);           //初始化音量
  45.   mp3_set_EQ (z);               //初始化音效
  46. }
  47. void loop() {
  48.   if(recv.decode(&res)) {                        //判断是否接受到数据
  49.     switch(res.value) {                          //判断按下的按钮
  50.       case POWER:                                //停止播放
  51.       if (a == false) {
  52.         a = !a;
  53.         mp3_stop ();
  54.         }
  55.       break;
  56.       case PREV:                                 //上一首
  57.       if (a == true) {
  58.         a = !a;
  59.         }
  60.       mp3_prev ();
  61.       break;
  62.       case NEXT:                                 //下一首
  63.       if (a == true) {
  64.         a = !a;
  65.         }
  66.       mp3_next ();
  67.       break;
  68.       case PAUSE:                                //暂停与播放(暂停具有断点播放)
  69.       if (a == true) {
  70.         a = !a;
  71.         mp3_play ();
  72.         }
  73.       else {
  74.         a = !a;
  75.         mp3_pause ();
  76.         }
  77.       break;
  78.       case VOLUP:                                //音量加
  79.       if (i < 30) {
  80.         i = i+1;
  81.         mp3_set_volume (i);
  82.         }
  83.       break;
  84.       case VOLDOWN:                              //音量减
  85.       if (i > 0) {
  86.         i = i-1;
  87.         mp3_set_volume (i);
  88.         }
  89.       break;
  90.       case EQ:                                   //音效模式切换
  91.       if (z < 5) {
  92.         z = z+1;
  93.         }
  94.       else {
  95.         z = 0;
  96.         }
  97.       mp3_set_EQ (z);
  98.       break;
  99.       case REPT :                                //随机模式播放
  100.       if (a == true) {
  101.         a = !a;
  102.         }
  103.       mp3_random_play ();
  104.       break;
  105.       case ONE:
  106.       if (a == true) {
  107.         a = !a;
  108.         }
  109.       mp3_play (1);
  110.       break;
  111.       case TWO:
  112.       if (a == true) {
  113.         a = !a;
  114.         }
  115.       mp3_play (2);
  116.       break;
  117.       case THREE:
  118.       if (a == true) {
  119.         a = !a;
  120.         }
  121.       mp3_play (3);
  122.       break;
  123.       case FOUR:
  124.       if (a == true) {
  125.         a = !a;
  126.         }
  127.       mp3_play (4);
  128.       break;
  129.       case FIVE:
  130.       if (a == true) {
  131.         a = !a;
  132.         }
  133.       mp3_play (5);
  134.       break;
  135.       case SIX:
  136.       if (a == true) {
  137.         a = !a;
  138.         }
  139.       mp3_play (6);
  140.       break;
  141.       case SEVEN:
  142.       if (a == true) {
  143.         a = !a;
  144.         }
  145.       mp3_play (7);
  146.       break;
  147.       case EIGHT:
  148.       if (a == true) {
  149.         a = !a;
  150.         }
  151.       mp3_play (8);
  152.       break;
  153.       case NINE:
  154.       if (a == true) {
  155.         a = !a;
  156.         }
  157.       mp3_play (9);
  158.       break;
  159.       default:
  160.       ;
  161.       }
  162.       recv.resume();                             //接收下一个数据
  163.     }
  164. }
复制代码



一切顺利,你就会得到一个可以用红外遥控器控制的音乐播放器。




* 以下是使用 DFPlayer Mini Module 的注意事項,请仔细阅读!

*DFPlayer Mini 可以读取 MP3 & WAV 格式的文件(实测可以解码320K的超高品质音乐),但无法播放时长在1秒以下的音频。
*所有音乐文件一定要放在mp3文件夹内,而mp3文件命名需要是4位数字,例如"0001.mp3",放置在mp3文件夹下。如需中英文命名,可以添加在数字后。例如"0001hello.mp3"或者"0001后来.mp3",详见数据手册。



代码中使用的DFPlayer mini库文件已修改,增加了全曲循环功能。

以下是修改后的库文件:



file:///c:/users/admin/appdata/roaming/360se6/User Data/temp/222616u3de8kfrdu1ge0gt.png
file:///c:/users/admin/appdata/roaming/360se6/User Data/temp/222616u3de8kfrdu1ge0gt.png


DFPlayer_Mini_Mp3.zip

12.29 KB, 阅读权限: 10, 下载次数: 327

本帖被以下淘专辑推荐:

  • · |主题: 32, 订阅: 1

gada888  版主

发表于 2015-11-10 15:09:32

你的sketch 我无法通过arduino验证。另外我特想知道这个DFPlayer Mini的ADKey是怎么连的,我照图纸连怎么模块灯也不亮,一点反应都没有。图纸是不是错的。
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-11-10 16:03:10

gada888 发表于 2015-11-10 15:09
你的sketch 我无法通过arduino验证。另外我特想知道这个DFPlayer Mini的ADKey是怎么连的,我照图纸连 ...

其实 我没没弄响
回复

使用道具 举报

Cain  初级技匠

发表于 2015-11-10 16:31:08

gada888 发表于 2015-11-10 15:09
你的sketch 我无法通过arduino验证。另外我特想知道这个DFPlayer Mini的ADKey是怎么连的,我照图纸连 ...

arduino校验失败是不是因为你没加载库文件?我这边试了下可以的。另外你是说wiki里的AD按键模式?MP3模块上的灯只有在播放MP3时才会亮,是不是你的MP3存放的位置不对?建议先确定模块会唱歌,tf卡内文件没问题后在按照图纸连接
回复

使用道具 举报

gada888  版主

发表于 2015-11-10 21:13:55


感谢回复,你是说你也搞不定ADKEY吗
回复

使用道具 举报

gada888  版主

发表于 2015-11-10 21:15:04

Cain 发表于 2015-11-10 16:31
arduino校验失败是不是因为你没加载库文件?我这边试了下可以的。另外你是说wiki里的AD按键模式?MP3模块 ...

感谢回复,tf卡没问题,和arduino 连接试过有音的。
回复

使用道具 举报

gada888  版主

发表于 2015-11-10 21:16:13

gada888 发表于 2015-11-10 21:15
感谢回复,tf卡没问题,和arduino 连接试过有音的。

对,就是说那个wiki里的AD模式,感觉那个是骗人的。根本不起作用。
回复

使用道具 举报

cha se  学徒

发表于 2015-12-14 14:19:28

Cain 发表于 2015-11-10 16:31
arduino校验失败是不是因为你没加载库文件?我这边试了下可以的。另外你是说wiki里的AD按键模式?MP3模块 ...

我下载了库文件  错误代码这个 要怎么解决啊?谢谢
Arduino:1.6.5 (Mac OS X), 板:"Arduino/Genuino Uno"

In file included from sketch_dec14d.ino:3:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:45:20: error: redefinition of 'uint8_t send_buf [10]'
uint8_t send_buf[10] = {
                    ^
In file included from sketch_dec14d.ino:1:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:45:9: error: 'uint8_t send_buf [10]' previously defined here
uint8_t send_buf[10] = {
         ^
In file included from sketch_dec14d.ino:3:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:47:20: error: redefinition of 'uint8_t recv_buf [10]'
uint8_t recv_buf[10];
                    ^
In file included from sketch_dec14d.ino:1:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:47:9: error: 'uint8_t recv_buf [10]' previously declared here
uint8_t recv_buf[10];
         ^
In file included from sketch_dec14d.ino:7:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:45:20: error: redefinition of 'uint8_t send_buf [10]'
uint8_t send_buf[10] = {
                    ^
In file included from sketch_dec14d.ino:1:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:45:9: error: 'uint8_t send_buf [10]' previously defined here
uint8_t send_buf[10] = {
         ^
In file included from sketch_dec14d.ino:7:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:47:20: error: redefinition of 'uint8_t recv_buf [10]'
uint8_t recv_buf[10];
                    ^
In file included from sketch_dec14d.ino:1:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:47:9: error: 'uint8_t recv_buf [10]' previously declared here
uint8_t recv_buf[10];
         ^
编译有误。
回复

使用道具 举报

cha se  学徒

发表于 2015-12-14 14:19:32

Cain 发表于 2015-11-10 16:31
arduino校验失败是不是因为你没加载库文件?我这边试了下可以的。另外你是说wiki里的AD按键模式?MP3模块 ...

我下载了库文件  错误代码这个 要怎么解决啊?谢谢
Arduino:1.6.5 (Mac OS X), 板:"Arduino/Genuino Uno"

In file included from sketch_dec14d.ino:3:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:45:20: error: redefinition of 'uint8_t send_buf [10]'
uint8_t send_buf[10] = {
                    ^
In file included from sketch_dec14d.ino:1:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:45:9: error: 'uint8_t send_buf [10]' previously defined here
uint8_t send_buf[10] = {
         ^
In file included from sketch_dec14d.ino:3:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:47:20: error: redefinition of 'uint8_t recv_buf [10]'
uint8_t recv_buf[10];
                    ^
In file included from sketch_dec14d.ino:1:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:47:9: error: 'uint8_t recv_buf [10]' previously declared here
uint8_t recv_buf[10];
         ^
In file included from sketch_dec14d.ino:7:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:45:20: error: redefinition of 'uint8_t send_buf [10]'
uint8_t send_buf[10] = {
                    ^
In file included from sketch_dec14d.ino:1:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:45:9: error: 'uint8_t send_buf [10]' previously defined here
uint8_t send_buf[10] = {
         ^
In file included from sketch_dec14d.ino:7:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:47:20: error: redefinition of 'uint8_t recv_buf [10]'
uint8_t recv_buf[10];
                    ^
In file included from sketch_dec14d.ino:1:0:
/Documents/Arduino/libraries/DFPlayer-Mini-mp3-master/DFPlayer_Mini_Mp3.h:47:9: error: 'uint8_t recv_buf [10]' previously declared here
uint8_t recv_buf[10];
         ^
编译有误。
回复

使用道具 举报

powera  见习技师

发表于 2015-12-19 16:35:20

大连林海,您好,图中接音频输出的那个接口是怎么弄的呀?
或者有什么可以替代吗?
谢谢
回复

使用道具 举报

Simon_Sun  学徒

发表于 2016-3-26 20:43:10

模块自身的UART参数是怎样的,买了一块回来,在电脑上做测试,波特率为9600,但是好像并不能通信起来
回复

使用道具 举报

gada888  版主

发表于 2016-4-22 07:55:19

之前买的DFPlayer Mini全都出了问题,后来发现是模块的问题,正版的36快一块,我买的15快一块。买的山寨的了。
回复

使用道具 举报

他夏了夏天  学徒

发表于 2019-1-3 09:51:34

gada888 发表于 2015-11-10 21:15
感谢回复,tf卡没问题,和arduino 连接试过有音的。

我这边上传项目一直超时,怎么弄
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail