音声再生モジュール「DFPlayerMini」の動作確認を行いました。
内蔵メモリは無く、microSDカードに入っているファイルを再生するタイプのものです。
互換品の「MP3-TF-16P」というものがありましたので、今回はこちらを使って確認していきました。
結論から言うと、問題無く動作しました。
これを使って、2種類の動作確認を行います。
- このモジュール単体で動作させてみる
- Arduinoを使って動かしてみる
参考にさせて頂いた記事はこちら。
オフィシャルのwikiの情報が充実しているのは助かります。
音声ファイルはmicroSDカードにコピーします。
microSDカードは、最大32GBまで対応しており、100フォルダ255ファイルまで読み込めるようです。
今回、ファイル名は分かりやすく数字にしましたが、文字列のファイル名でも再生できることは確認しました。
単体での動作確認
単体で動作させる場合の配線は下記のようにしました。
IO1,2をLow(0V)にすると、対応する動作が行われます。
今回は手動でGND端子から配線を出して、IO1,2に接触させてみました。
実際の配線の様子。
IO1,2は、接触時間により動作が異なるようです。
- IO1(短時間):1つ前 or 今のファイルを再生
- IO1(長時間):ボリュームを下げる
- IO2(短時間):次の曲を再生。最後まで行ったら初めの曲に戻る。
- IO2(長時間):ボリュームを上げる
ボリュームの調整がADKEYではなくIO端子で行うというのは面白いですね。
動作確認の様子はこちら。
動画後半にArduinoでの動作確認の様子も繋げています。
単体動作の場合、初期値ではボリュームが最大になっているので、ビックリすると思います。
Arduinoで動かす場合はボリュームの設定ができるので問題無いのですが、単体動作の場合は起動時に毎回調整が必要です。
Arduinoを使った場合
Arduinoで動かす場合の配線はこちら。
VCCはArduinoから5Vを取っています。
ArduinoとはUART通信を行います。
注意点としては、DFPlayerMiniのRX端子には1kの抵抗を接続することです。
実際の配線の様子はこちら。
Arduinoで動かす場合、「DFRobotDFPlayerMini」ライブラリを使います。
Arduino IDEで検索しても出てくるので、そちらから追加しても大丈夫です。
GitHubからDLする場合はこちら。
https://github.com/DFRobot/DFRobotDFPlayerMini/
サンプルプログラムのGetStartedを修正して使いました。
サンプルではArduino UnoかESP8266で動かすことを想定しているプログラムになっており、いくつかコメントアウトすることでArduino Nanoでも無事動作させることができました。
具体的には、25,29,30,31行目をコメントアウトしました(シリアル通信の定義のところ)。
下記に、コメントアウトした箇所を青色にしたものを記載します。
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
//#if (defined(ARDUINO_AVR_UNO) || defined(ESP8266)) // Using a soft serial port
#include <SoftwareSerial.h>
SoftwareSerial softSerial(/*rx =*/4, /*tx =*/5);
#define FPSerial softSerial
//#else
//#define FPSerial Serial1
//#endif
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
#if (defined ESP32)
FPSerial.begin(9600, SERIAL_8N1, /*rx =*/D3, /*tx =*/D2);
#else
FPSerial.begin(9600);
#endif
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(FPSerial, /*isACK = */true, /*doReset = */true)) { //Use serial 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(30); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
myDFPlayer.next(); //Play next mp3 every 3 second.
}
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;
}
}
上と同じ動画ですが、動作確認の様子をもう一度貼っておきます。
DFPlayerMiniは、microSDカードを使っているので大量のデータを扱えるのが良いですね。
また、SDカードを入れ替えるだけで音声データを簡単に差し替えられるのもGood。
他にも内部メモリが128MBあるDFPlayer Proも使い勝手が良いのでオススメです。
DFPlayer Proを動かしたときの記事はこちら。
その他の音声再生モジュールの実験結果を比較した記事はこちら。