极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 49419|回复: 16

【基于DFPlayer的红外遥控播放器】

[复制链接]
发表于 2015-7-18 23:11:32 | 显示全部楼层 |阅读模式
本帖最后由 Apple_tec. 于 2015-11-7 14:41 编辑

什么是DFPlayer?

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




详细技术规格见:http://wiki.dfrobot.com.cn/index.php/(SKUFR0299)DFPlayer_Mini%E6%A8%A1%E5%9D%97

以下是所需食材:(本来拍的很好,可惜文件太大无法上传。。。坑)




首先要对红外遥控器进行解码,搭建如图所示电路:


具体操作步骤这里不再赘述,详见:
http://www.geek-workshop.com/thread-2433-1-1.html

在刚刚电路的基础之上搭建以下电路:


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

以下是搭建好的电路:



定义遥控器功能:


代码如下:(已增加详细注释)

  1. /*
  2. *  name:     DFPlayer_Mini_Mp3
  3. *  version:  1.0
  4. *  Author:   Apple tec.<[email][email protected][/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. const 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.       
  57.       case PREV:                                 //上一首
  58.       if (a == true) {
  59.         a = !a;
  60.         }
  61.       mp3_prev ();
  62.       break;

  63.       case NEXT:                                 //下一首
  64.       if (a == true) {
  65.         a = !a;
  66.         }
  67.       mp3_next ();
  68.       break;
  69.       
  70.       case PAUSE:                                //暂停与播放(暂停具有断点播放)
  71.       if (a == true) {
  72.         a = !a;
  73.         mp3_play ();
  74.         }
  75.       else {
  76.         a = !a;
  77.         mp3_pause ();
  78.         }
  79.       break;

  80.       case VOLUP:                                //音量加
  81.       if (i < 30) {
  82.         i = i+1;
  83.         mp3_set_volume (i);
  84.         }
  85.       break;

  86.       case VOLDOWN:                              //音量减
  87.       if (i > 0) {
  88.         i = i-1;
  89.         mp3_set_volume (i);
  90.         }
  91.       break;

  92.       case EQ:                                   //音效模式切换
  93.       if (z < 5) {
  94.         z = z+1;
  95.         }
  96.       else {
  97.         z = 0;
  98.         }
  99.       mp3_set_EQ (z);
  100.       break;

  101.       case REPT :                                //随机模式播放
  102.       if (a == true) {
  103.         a = !a;
  104.         }
  105.       mp3_random_play ();
  106.       break;

  107.       case ONE:
  108.       if (a == true) {
  109.         a = !a;
  110.         }
  111.       mp3_play (1);
  112.       break;
  113.       
  114.       case TWO:
  115.       if (a == true) {
  116.         a = !a;
  117.         }
  118.       mp3_play (2);
  119.       break;
  120.       
  121.       case THREE:
  122.       if (a == true) {
  123.         a = !a;
  124.         }
  125.       mp3_play (3);
  126.       break;
  127.       
  128.       case FOUR:
  129.       if (a == true) {
  130.         a = !a;
  131.         }
  132.       mp3_play (4);
  133.       break;
  134.       
  135.       case FIVE:
  136.       if (a == true) {
  137.         a = !a;
  138.         }
  139.       mp3_play (5);
  140.       break;
  141.       
  142.       case SIX:
  143.       if (a == true) {
  144.         a = !a;
  145.         }
  146.       mp3_play (6);
  147.       break;
  148.       
  149.       case SEVEN:
  150.       if (a == true) {
  151.         a = !a;
  152.         }
  153.       mp3_play (7);
  154.       break;
  155.       
  156.       case EIGHT:
  157.       if (a == true) {
  158.         a = !a;
  159.         }
  160.       mp3_play (8);
  161.       break;

  162.       case NINE:
  163.       if (a == true) {
  164.         a = !a;
  165.         }
  166.       mp3_play (9);
  167.       break;
  168.       
  169.       default:
  170.       ;
  171.       }
  172.       recv.resume();                             //接收下一个数据
  173.     }
  174. }
复制代码


代码中使用的DFPlayer mini库文件我已修改,增加了全曲循环功能。
(原装库文件请于http://wiki.dfrobot.com.cn/index.php/(SKUFR0299)DFPlayer_Mini%E6%A8%A1%E5%9D%97下载)
以下是修改后的库文件:


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



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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-7-19 08:58:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2015-7-19 08:59:05 | 显示全部楼层
关注,收藏。
回复 支持 反对

使用道具 举报

发表于 2015-7-19 09:13:31 | 显示全部楼层
你太牛逼了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-19 09:27:38 | 显示全部楼层
数据手册的网址怎么变这样了。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-19 09:29:56 | 显示全部楼层
林定祥 发表于 2015-7-19 08:59
关注,收藏。

谢谢~如果任何关于DFPlayer mini库函数的问题,欢迎提问。我会尽力帮助你的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-19 09:38:25 | 显示全部楼层
DFPlayer mini 数据手册http://wiki.dfrobot.com.cn/index.php/(SKUFR0299)DFPlayer_Mini%E6%A8%A1%E5%9D%97
回复 支持 反对

使用道具 举报

发表于 2015-7-19 15:21:31 | 显示全部楼层
不是各个遥控器的按键编码都一样哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-19 17:38:34 | 显示全部楼层
asdfcgdc 发表于 2015-7-19 15:21
不是各个遥控器的按键编码都一样哦

对啊,,,详见教程
回复 支持 反对

使用道具 举报

发表于 2015-7-20 16:43:56 | 显示全部楼层
要是加一个液晶屏显示状态和进度的话就更好玩了
回复 支持 反对

使用道具 举报

发表于 2015-7-21 20:46:49 | 显示全部楼层
好东西收藏先
回复 支持 反对

使用道具 举报

发表于 2015-8-19 21:01:56 | 显示全部楼层
谢谢分享学习一下
回复 支持 反对

使用道具 举报

发表于 2015-11-2 19:24:35 | 显示全部楼层
咱两logo一样啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-3 21:49:08 | 显示全部楼层
suoma 发表于 2015-11-2 19:24
咱两logo一样啊

哈哈 我还比你好看点~
回复 支持 反对

使用道具 举报

发表于 2016-3-16 15:11:05 | 显示全部楼层
小模块很不错...
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 09:26 , Processed in 0.054151 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表