ArduinoにDFPlayerMiniを繋いでmp3音楽再生をする


Arduinoを用いて音楽再生を行いたい場合があります。この場合、後述するDFPlayerMiniを使用すると格安でMP3音楽再生ができましたので手順を記載します。

準備

Arduino UNO R3 互換品
DFPlayerMini
マイクロSDカード
・ジャンパワイヤ
・スピーカ(100均のものでOK)

DFPlayerMini届きました

音楽ファイルの準備

step1.mp3ファイルを用意する。
step2.用意したmp3ファイルを、0001_.mp3,0002_.mp3,0003_*.mp3,,,とリネームする。
step3.マイクロSDのルートディレクトリに、"mp3"という名前のフォルダを作成し、リネームしたmp3ファイルをコピーする。

※注意
MACの場合はMP3ファイルをSDへコピーした際に".0001_*"のような隠れファイルが作られ、MP3ファイル再生に影響するようです。この問題を解決するにはdot_cleanコマンドで隠れファイルの削除が要るようです。(はまりました)

回路図

Arduino、DFPlayerMini、スピーカを下記の通り接続します。
マイクロSDカードはDFPlayerMiniに挿入します。

DFPlayerMiniの回路図は下記です。

BUSYピンはファイル再生中かどうかを判断するために必要です。

コード

setup関数:初期化を行います
PLAYBACK_MP3_MUSIC関数:DFPlayerが再生可能な場合に音楽再生を行います
loop関数:500msec毎に音楽再生を試みます

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#define BUSY_PINNO 7

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

void setup()
{
  Serial.begin(115200);  

  // software serial init
  mySoftwareSerial.begin(9600);
  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);
  }

  // BUSY_PINNO init
  pinMode(BUSY_PINNO, INPUT);

  // DFPlayer Init
  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms  
  myDFPlayer.volume(25);  //Set volume value (0~30).
  // myDFPlayer.volumeUp(); //Volume Up
  // myDFPlayer.volumeDown(); //Volume Down  
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);    
  myDFPlayer.play(1);  //Play the first mp3
}

void PLAYBACK_MP3_MUSIC(void) {
  int isBusy = digitalRead(BUSY_PINNO); // 0:playing, 1:not playing (refer website)
  Serial.println(isBusy);
  if (isBusy == 1) {
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }
}

void loop()
{
  PLAYBACK_MP3_MUSIC();
  delay(500);
}

もしPIN10,11が他モジュールで使用されている場合は、PIN2,3をソフトウェアシリアルとして使用すればOKです。(例えばSPI通信を行う場合にPIN10,11を使うことがあると思います)

テスト

電源ON後にSDカードに保存したMP3ファイルの音楽再生を行えればOKです。

参考

組み込みエンジニアでなくても週末にArduinoを使って遊ぶ
MUDAなことをしよう
DFPlayer Mini SKU:DFR0299