DFPlayer Mini单片机-让你的Arduino Uno会唱歌

Introduction

DFPlayer Mini是一款MP3模块,可以直接接驳扬声器。模块配合供电电池、扬声器、按键可以单独使用,可作为Arduino UNO的一个模块。
这里主要配合Uno讲解使用

IO Pin

在这里插入图片描述
在这里插入图片描述

Arduino Uno Sample

这里以DFRobotDFPlayerMini 库的GetStarted案例(每3秒切换下一首)作为示范

Material - 所需材料

  1. Arduino Uno x1
  2. DFPlayer Min ix1
  3. SD卡 x1
  4. 小喇叭 x1 (我用的是8Ω 0.5W,声音小的一匹,看来需要功放)
  5. 1k欧姆电阻 x1
    库文件下载链接DFRobotDFPlayerMini 库安装,当然也可以直接从Arduino IDE的库文件管理器下载(推荐介个)
    在这里插入图片描述
    注意:文件夹命名需要是mp3,放置在SD卡根目录下,而mp3文件命名需要是4位数字,例如"0001.mp3",放置在mp3文件夹下。

如需中英文命名,可以添加在数字后,例如"0001hello.mp3"或者"0001后来.mp3"。

SD卡

我这里没有按照规则进行命名,实测是可以播放的,但是没有数能不能全部播放.
在这里插入图片描述

在这里插入图片描述

接线图

在这里插入图片描述
如果有“嘟嘟”的电流声,需要在DFPlayer Mini的RX上加上一个1K电阻。(没加的话真的只能听到噪声)
这里的电源根据网友的博客建议,使用单独电源供电较好,用Uno供电会产生噪音,我这里实测单独供电不响应????

实物图

我买的为啥不能正好插进面包板???
在这里插入图片描述

Code

这里我把每三秒切歌换成了15s,
修改位置为Loop里面的if (millis() - timer > 15000),15000ms切歌一次,可以打开串口监视器(默认波特率115200)查看提示

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));
  
  myDFPlayer.volume(10);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}

void loop()
{
  static unsigned long timer = millis();
  
  if (millis() - timer > 15000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
    Serial.println(F("Playing Next one"));
  }
  
  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }
}

void printDetail(uint8_t type, int value){
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerUSBInserted:
      Serial.println("USB Inserted!");
      break;
    case DFPlayerUSBRemoved:
      Serial.println("USB Removed!");
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
  
}

Conclusion

播放出来没有太大杂音就hin开心了,刚好能够配合nfc做一个假唱片机,下期预告
如果要更大点声音的或还是需要功放板滴

Else

USB串口使用模式、IO模式、AD按键模式,请浏览DFROBOT学习

AD按键模式可以做一个成品MP3 0.0(加上电池的话),

FAQ

  • 问 :Arduino控制DFPlayer mini时,喇叭有杂音,如何处理? |

答:在TX,RX与MP3模块的RX,TX之间连一个1k电阻。因为DFPlayer Mini模块工作电压应该是3.3V,而主控板传入电压为5V,因此需要1K左右电阻分压。 答: 如果效果不好,可以在mp3播放的代码后面增加一条语句,将RX引脚置为低电平。

  • 问 :为什么 play(1) 播放的不是 0001.mp3, 而是其他的的音乐? 为什么播放的顺序不是按照文件名播放? |

答:play(1)是播放TF卡中的第一首歌, 播放顺序是由mp3放入TF卡的顺序决定的, 而不是按照文件名排序播放的, 如果需要按照文件名播放, 可以参考下面的playMp3Folder(1)

  • 问 :是否可以按照文件名播放? |

答:可以使用函数playMp3Folder (1); 播放文件的格式为"0001***.mp3(或支持其他格式)". 您可能需要注意这些:

(1). 该音频文件的名称应该命名一个四位数字开始,如:

0001.mp3
0002Chasing The Sun.mp3
0003.mp3
0004Try.mp3
0010FourFiveSeconds.mp3
(2).该音频文件应该放在“MP3”‘它坐落在TF卡的根目录’’’'文件夹;

  • 问 :想用下插播广告的功能,请问有样例吗? |

答:推荐阅读——【英文】如何实现插播广告的功能?

References

  • 13
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值