本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

DFPlayer Mini を使ってみる

マイコンで音声ファイルを再生するのに、 SDカード等にいれたデータをストリーミングして再生かなと考えていたのですが、 mp3 のファイルを直接再生するモジュールボードを発見しました。
amazon で眺めていたら発見したのが以下のものです。これを書いている現在で2つで 800 円ほどとなっており、ネットの情報からすると少し高くなっているのかもしれません。

このモジュールボードのチュートリアルとしては以下の Wiki に記載がありました。

https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Tutorial

実ボードでは “MP3-TF-16P” と刻印がありますが、まあなんとか動いている感じです(※)。
また、より詳細な仕様書的なものとしては、以下の pdf を参照して試してみています。

http://www.flyrontech.com/uploadfile/download/2016441645109830.pdf

※ もしかすると別に本家があるコピー品なのかもしれません。

早速試してみる

手っ取り早く動作を試してみるために、制御のことを考えず単体で動作させることを試してみます。
これはチュートリアルの第5.3章にある、 “I/O Mode” を見て作成しました。

準備として FAT32 フォーマットされた microSD カードに mp3 フォルダを作成します。そして、この中に1つだけ、 0001.mp3 なるファイルを書き込んでおきます。

ブレッドボード上に配線は以下のような感じにしました。図では電池1本で表現していますが、 電源は 3.3 V で供給しています。

これで電源を入れて、適当にボリュームダウンのボタンを押したら再生が始まりました。
しかし、この状態では大ボリュームで再生がはじまり、驚きました。ボリュームの初期値は最大値のようです。

Arduino Uno と繋いでみる

大音量のままで困ったので Arduino Uno と接続して、ボリュームの制御などできるようにしてみました。

接続については以下のよう感じになっています。注意点として、 Arduino のシリアル出力が 5V のため、直接接続するとノイズの原因となるようです。そのため、送受信の線には抵抗 (1k) を追加するようにしています。


接続した後は、Arduino IDE からスケッチを作成します。

チュートリアルのページにあるように、 DFRobotDFPlayerMini のライブラリを取得して、これを追加します。その後以下のようなスケッチを書き込んで再生を行います。ほぼチュートリアルで公開されていたままのものです。これだと1曲再生を行います。

#include 
#include 

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);
  }
  Serial.println(F("DFPlayer Mini online."));
  
  myDFPlayer.volume(5);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}

void loop()
{
  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 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;
  }
}

まとめ

ネットの情報を見ると電源は ArduinoUNO から取らず、別系統とした方がいいとありましたが、自分の環境では上記のままでも大丈夫なようでした。
また他にも電源電圧は 4.2V なら安定動作とか記載があって心配していましたが、 3.3V の電源電圧でも今のところ問題なく動いているようです。

ひとつ残念な点があるのは、電源投入時のスピーカーから雑音が出てしまうことです。これが割と大きめの音がするので気になります。

昔 mp3 のプレイヤーキットを作ったことがありましたが、このくらいの小型なサイズで mp3 を再生できてしまうことに驚きがあります。癖はありますが面白いモジュールだと思います。

電子工作
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました