マイコンで音声ファイルを再生するのに、 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 を再生できてしまうことに驚きがあります。癖はありますが面白いモジュールだと思います。










