DFPlayer Mini を使ってArduinoで音声(MP3)を再生する

th_DFPlayer-5

Arduinoでの音声再生は過去にWaveシールドを使ってやったことがあります。が、やっぱりシールドを使うとどうしても図体が大きくなってしまって、使い勝手が悪いです。特にコンパクトな作品を作りたいときには、これは大問題です。

この壁がどうにも克服できなくて、しゃーなしで8ビット音声でごまかしたのが、前に作ったゼルダのごまだれ宝箱だったり、箱入りうさまるだったりします。まあ、これはこれで味があって良かったのですが。

そんなこともあって、「Arduinoで超コンパクトに音声再生できる方法ないかなあ」というのは、ぼんやりとずっと探していたのですが、ようやく見つけました。

安いしコンパクト。まさに自分の理想どおりです。少し前から流通はしていたようなのですが、日本語記事がまだ少なくて、気づくのが遅れてしまいました。

これを使えるようになれば工作の幅が色々広がりそうなので、早速試してみたいと思います。

 

ということで、Amazonでポチ。注文してから1〜2週間ぐらいで中国から届きました。まとめて6個。

 th_DFPlayer-1

中身はこんな感じの小袋がプチプチで包まれて入っているだけ。取説の類は一切なしです。

th_DFPlayer-2

th_DFPlayer-3

うんうん、サイズ感はとてもいい感じです。

 

ではでは、使えるようにしていきましょう。現時点(2016/9)では、日本語では以下の方々の記事が参考になります。

ピン配置や配線についてこちらこちらのPDFがわかりやすいです。このモジュールのシリアルポート(Tx, Rx)が3.3Vなので、5VのArduinoと接続するときは1kΩの抵抗を間に挟むことが推奨されているみたいです。が、今回自分は3.3VのArduino Pro Miniに繋げてみるので、ダイレクト接続で問題なさそうです。

th_DFPlayer-4

ということで、接続はとても簡単。Vcc同士とGND同士を繋いで、ArduinoのRxとDFPlayerのTx、ArduinoのTxとDFPlayerのRxを繋ぐだけ。ソフトウェアシリアルでも大丈夫そうなので、上の写真ではArduinoの2ピンにRx、3ピンにTxを割り当てるつもりで接続しています。ハードウェアシリアルはどうしてもここにしか接続できないような機器との接続のために、できるだけ空けておく方針です。

それから、スピーカーもダイレクトにDFPlayerに繋いでしまってOK。別途アンプを用意しなくていいのも素晴らしいです。

 

さて、次は音声ファイルの準備です。DFPlayerはSDカードから音声ファイルを読み出す形で音声を再生するのですが、いくらDFPlayerが安くてもSDカードが高いと辛いので、Amazonで比較的安めの以下を購入してみました。

ちなみに、普段使いのRaspberry Piの起動SDカードにはSanDisk製を使っています。

 th_DFPlayer-6

ファイル構成はこんな感じで、SDカードのトップに”mp3″フォルダを作って、その中に”0001****.mp3″のようなファイル名でMP3データを置きます。先頭が4桁の数字になってさえいれば、あとは英数字ならあまり制限はなさそうです。

 

あとはプログラムです。こちらからライブラリを落としてきてArduino IDEの”libraries”フォルダ以下に置いたら、ソフトウェアシリアルのサンプルプログラム(”DFPlayer_SoftwareSerial”)を自分の環境に合うよう修正します。

#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>

SoftwareSerial mySerial(2, 3); // RX, TX

//
void setup () {
  Serial.begin (9600);
  mySerial.begin (9600);
  mp3_set_serial (mySerial);  //set softwareSerial for DFPlayer-mini mp3 module 
  mp3_set_volume (15);
}

//
void loop () {        
  mp3_play (1);
  delay (6000);
  mp3_play (2);
  delay (6000);
  mp3_play (3);
  delay (6000);
}

では早速。

 

 

うん、大丈夫そう。。。と思いきや。

 

 

途中からこんな感じでひどい雑音しかならなくなってしまいました。

ちょっと調べてみたところ、どうやらDFPlayerの電源はArduinoから直接取らない方が良いとか、電源電圧は4.2Vが最適とか、何やらノウハウが必要なようです。詳細は以下をご参照のこと。

ということで、以下のように、DFPlayerの電源を別にUSB 5Vで取る形で試してみたところ、

th_DFPlayer-5

無事に安定して音が鳴るようになりました。よかったよかった。ちなみにArduinoのVccから電源をとるのがダメなのであって、上記のUSB 5VをArduinoのRAWとDFPlayerのVccに分けて流し込むのはOKです。

 

ということで、ちょっとだけ調査が必要だったりしましたが、比較的簡単にArduinoでMP3を鳴らすことができるようになりました。Arduinoで音声を扱おうと思ったら、これが今のところ最適解かなあという気がしています。安いので多少手荒に扱ったっていいですし、別のアンプも不要でよりコンパクトにできますし。

あとはこれを活用して、光ったり鳴ったりするものをどんどん作っていきたいところです。