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

Apple_tec. 于 2015-11-7 14:41 编辑



什么是DFPlayer?



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

Miniplayer_top2.png

2015-7-18 22:02 上传
(396.68 KB)


Miniplayer_pin_map.png

2015-7-18 22:07 上传
(43.64 KB)


700px-Pin_map_desc.jpg

2015-7-18 23:05 上传
(123.73 KB)





详细技术规格见:http://wiki.dfrobot.com.cn/index.php?title=%28SKU:DFR0299%29DFPlayer_Mini%E6%A8%A1%E5%9D%97



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

FCEAE5E193F8C094DFE6A1C624478B0A.png

2015-7-18 22:26 上传
(72.56 KB)


EB1C895775C7A4B2B19641E6A9D381A3.png

2015-7-18 22:26 上传
(17.34 KB)


6C569DC689B1AA9A5E39B2FEEA894CB0.png

2015-7-18 22:26 上传
(36.56 KB)





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

152935h4jm4yhoiponjb4o.png

2015-7-18 22:06 上传
(92.19 KB)





具体操作步骤这里不再赘述,详见:

http://www.geek-workshop.com/thread-2433-1-1.html



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

5DC7CB86-59E0-4780-833D-C97F2DD88A21.jpg

2015-7-18 22:27 上传
(129.63 KB)





官方声明:此模块可以直接使用Arduino供电,并不会对Arduino本身造成任何影响。

如果使用Arduino供电,切记需要在串口通信端口上增加两个1K电阻用来消除噪音!



以下是搭建好的电路:

4A52A48E41694C19A049DC90251C1A0C.png

2015-7-18 22:38 上传
(42.97 KB)


175882156E018A49C02375F66DEF72B0.png

2015-7-18 22:38 上传
(50.66 KB)





定义遥控器功能:

6D0FD07F75DED4EA2BF289C0CC9B6010.png

2015-7-18 22:39 上传
(34.46 KB)





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



ARDUINO

/*
 *  name:     DFPlayer_Mini_Mp3
 *  version:  1.0
 *  Author:   Apple tec.<[email]godfights@163.com[/email]>
 *  Date:     2015-07-16
 *  Description:  红外遥控DFPlayer迷你板
 *  note: mp3 file must put into mp3 folder in your tf card
 */
 
#include <IRremote.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
 
//定义对应16进制数值的常量名
#define POWER   0xFD00FF       //电源
#define VOLUP   0xFD807F       //VOL+
#define STOP    0xFD40BF       //FUNC/STOP
#define PREV    0xFD20DF       //后退/上一曲
#define PAUSE   0xFDA05F       //暂停/播放
#define NEXT    0xFD609F       //前进/下一曲
#define DOWN    0xFD10EF       //下一页
#define VOLDOWN 0xFD906F       //VOL-
#define UP      0xFD50AF       //上一页
#define ZERO    0xFD30CF       //0
#define EQ      0xFDB04F       //EQ
#define REPT    0xFD708F       //ST/REPT
#define ONE     0xFD08F7       //1
#define TWO     0xFD8877       //2
#define THREE   0xFD48B7       //3
#define FOUR    0xFD28D7       //4
#define FIVE    0xFDA857       //5
#define SIX     0xFD6897       //6
#define SEVEN   0xFD18E7       //7
#define EIGHT   0xFD9867       //8
#define NINE    0xFD58A7       //9
 
const int recvPin = 2;         //红外接收器到ardunio的端口
boolean a = true;              //播放逻辑设定
int i = 20;                    //初始化音量
int z = 0;                     //初始化音效
 
IRrecv recv(recvPin);         //初始化接收
decode_results res;          //储存接收到的数据 
 
void setup() {
 
  Serial.begin(9600);          //初始化串口
  recv.enableIRIn();            //允许接收数据
  mp3_set_serial (Serial);     //设置串行DFPlayer-mini mp3模块
  mp3_set_volume (i);           //初始化音量
  mp3_set_EQ (z);               //初始化音效
}
 
void loop() {
 
  if(recv.decode(&res)) {                        //判断是否接受到数据 
    switch(res.value) {                          //判断按下的按钮
 
      case POWER:                                //停止播放
      if (a == false) {
        a = !a;
        mp3_stop ();
        }
      break;
 
      case PREV:                                 //上一首
      if (a == true) {
        a = !a;
        }
      mp3_prev ();
      break;
 
      case NEXT:                                 //下一首
      if (a == true) {
        a = !a;
        }
      mp3_next ();
      break;
 
      case PAUSE:                                //暂停与播放(暂停具有断点播放)
      if (a == true) {
        a = !a;
        mp3_play ();
        }
      else { 
        a = !a;
        mp3_pause ();
        }
      break;
 
      case VOLUP:                                //音量加
      if (i < 30) {
        i = i+1;
        mp3_set_volume (i);
        }
      break;
 
      case VOLDOWN:                              //音量减
      if (i > 0) {
        i = i-1;
        mp3_set_volume (i);
        }
      break;
 
      case EQ:                                   //音效模式切换
      if (z < 5) {
        z = z+1;
        }
      else {
        z = 0;
        }
      mp3_set_EQ (z);
      break;
 
      case REPT :                                //随机模式播放
      if (a == true) {
        a = !a;
        }
      mp3_random_play (); 
      break;
 
      case ONE:
      if (a == true) {
        a = !a;
        }
      mp3_play (1);
      break;
 
      case TWO:
      if (a == true) {
        a = !a;
        }
      mp3_play (2);
      break;
 
      case THREE:
      if (a == true) {
        a = !a;
        }
      mp3_play (3);
      break;
 
      case FOUR:
      if (a == true) {
        a = !a;
        }
      mp3_play (4);
      break;
 
      case FIVE:
      if (a == true) {
        a = !a;
        }
      mp3_play (5);
      break;
 
      case SIX:
      if (a == true) {
        a = !a;
        }
      mp3_play (6);
      break;
 
      case SEVEN:
      if (a == true) {
        a = !a;
        }
      mp3_play (7);
      break;
 
      case EIGHT:
      if (a == true) {
        a = !a;
        }
      mp3_play (8);
      break;
 
      case NINE:
      if (a == true) {
        a = !a;
        }
      mp3_play (9);
      break;
 
      default:
      ;
      }
      recv.resume();                             //接收下一个数据
    }
}



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

(原装库文件请于http://wiki.dfrobot.com.cn/index.php?title=%28SKU:DFR0299%29DFPlayer_Mini%E6%A8%A1%E5%9D%97下载)

以下是修改后的库文件:

网盘下载http://pan.baidu.com/s/1dExdYV3
DFPlayer_Mini_Mp3.zip



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

371323147777C90D6EED39047C88FA3C.png

2015-7-18 22:55 上传
(47.28 KB)


AD4814067FD0E3CC4F636174E0B128E8.png

2015-7-18 22:55 上传
(50.05 KB)




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



    *DFPlayer Mini 可以读取 MP3 & WAV 格式的文件(实测可以解码320K的超高品质音乐),但无法播放时长在1秒以下的音频。

    *所有音乐文件一定要放在mp3文件夹内,而mp3文件命名需要是4位数字,例如"0001.mp3",放置在mp3文件夹下。如需中英文命名,可以添加在数字后。例如"0001hello.mp3"或者"0001后来.mp3",详见数据手册。

    via - 极客工坊

标签: Arduino教程