LoginSignup
8
13

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-02-11

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

準備

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

DFPlayerMini届きました
dfplayer001.png

音楽ファイルの準備

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

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

回路図

Arduino、DFPlayerMini、スピーカを下記の通り接続します。
マイクロSDカードはDFPlayerMiniに挿入します。
dfplayermini002.png
DFPlayerMiniの回路図は下記です。
Miniplayer_pin_map.png
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

8
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13