DFPlayer Mini を使ってArduinoで音声(MP3)を再生する
Arduinoでの音声再生は過去にWaveシールドを使ってやったことがあります。が、やっぱりシールドを使うとどうしても図体が大きくなってしまって、使い勝手が悪いです。特にコンパクトな作品を作りたいときには、これは大問題です。
この壁がどうにも克服できなくて、しゃーなしで8ビット音声でごまかしたのが、前に作ったゼルダのごまだれ宝箱だったり、箱入りうさまるだったりします。まあ、これはこれで味があって良かったのですが。
そんなこともあって、「Arduinoで超コンパクトに音声再生できる方法ないかなあ」というのは、ぼんやりとずっと探していたのですが、ようやく見つけました。
安いしコンパクト。まさに自分の理想どおりです。少し前から流通はしていたようなのですが、日本語記事がまだ少なくて、気づくのが遅れてしまいました。
これを使えるようになれば工作の幅が色々広がりそうなので、早速試してみたいと思います。
ということで、Amazonでポチ。注文してから1〜2週間ぐらいで中国から届きました。まとめて6個。
中身はこんな感じの小袋がプチプチで包まれて入っているだけ。取説の類は一切なしです。
うんうん、サイズ感はとてもいい感じです。
ではでは、使えるようにしていきましょう。現時点(2016/9)では、日本語では以下の方々の記事が参考になります。
ピン配置や配線についてこちらやこちらのPDFがわかりやすいです。このモジュールのシリアルポート(Tx, Rx)が3.3Vなので、5VのArduinoと接続するときは1kΩの抵抗を間に挟むことが推奨されているみたいです。が、今回自分は3.3VのArduino Pro Miniに繋げてみるので、ダイレクト接続で問題なさそうです。
ということで、接続はとても簡単。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製を使っています。
ファイル構成はこんな感じで、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で取る形で試してみたところ、
無事に安定して音が鳴るようになりました。よかったよかった。ちなみにArduinoのVccから電源をとるのがダメなのであって、上記のUSB 5VをArduinoのRAWとDFPlayerのVccに分けて流し込むのはOKです。
ということで、ちょっとだけ調査が必要だったりしましたが、比較的簡単にArduinoでMP3を鳴らすことができるようになりました。Arduinoで音声を扱おうと思ったら、これが今のところ最適解かなあという気がしています。安いので多少手荒に扱ったっていいですし、別のアンプも不要でよりコンパクトにできますし。
あとはこれを活用して、光ったり鳴ったりするものをどんどん作っていきたいところです。
ディスカッション
コメント一覧
はじめまして。当方72歳で2年前より電子工作をはじめました。
今mycomkits.com製のmk-156(@2700)で音楽を再生していますが、中国製の(Hiletgo)のDFplyerが値段が(@250)と安いのでこれを使ってみましたが、うんともすんとも言いません。完全互換ではないのでしょうか?
あなたの記事の仕様書を見ると同じようですが、どこが違うのでしょうか?ARDUINO UNOで使っています。
ご教示よろしくお願い申し上げます。
石川様
そのメーカーのDFPlayerの存在は初めて知りました。私はそのモジュールを持っていませんので、違いについては残念ながらわかりません。見た感じは同じように見えますが。。。
モジュールについているLEDからして全く反応しないようであれば、電源の配線ミスか、あるいは初期不良の可能性もあると思います。私が使用したDFPlayerもそうですが、値段が値段の商品ですので、不良品の混在率は高いかなと思っています。Amazonのレビューを見てみても、不良品に当たってしまった人はいるようです。
LEDは反応しているのに音が鳴らないということであれば、シリアル(ソフトウェア or ハードウェア)の接続は正しいか、mp3ファイルの名前設定とSDカードへのファイルの置き方は正しいか、入力電圧は正しいか、などがチェック項目になるかと思います。
あまりお役に立つようなことが言えず、申し訳ありません。
DF-Playerのライブラリーには色々な種類とVer違いが存在するようです。私の場合も最初はVer2.0では動作せず「DFPlayer_Mini_Mp3のVer1.0」で動作しました。
ライブラリーに下位互換は無いようです。
石川 威 さんへ
追伸、Arduino を5Vで使用する場合信号レベルを合わせるために、Arduino TX とDF-Player RXの間は10Kの抵抗で結んでください。
とても参考になりました!
スピーカーの詳細についても教えて頂いてよろしいでしょうか?
ちょうど小さなスピーカーを探していて…。よろしくお願いします。
しお 様
ご覧いただきありがとうございます。この記事で使っているスピーカーは、私も自分の工作で良く使っています。小さい割には比較的に綺麗になってくれるので。
ただ、このスピーカー、私が普段使っているネット通販(SWITCH SCIENCE or 秋月)では取り扱ってくれていなくて、たまに電子部品屋さんの店頭をウロついて、見つけたときに買うようにしています。特にパッケージングされて売られているわけでもないので、メーカーもわかりません。。。スペックは、8Ω 1Wとは書かれているのですが。大阪の恵美須町駅付近にあるシリコンハウスというお店でよく見かけます。
そうなんですね…!
ご返信ありがとうございました!
横から失礼します。
そのスピーカーについて調べたのですが、「東京コーン紙製作所」の「S20E40A01-3」ではないでしょうか?
メーカーページ↓
http://www.toptone.co.jp/products/full/S20E40A01-3.html
とても参考になります。
じゃがいも様
スピーカーについての情報ありがとうございます! 私も愛用しておきながら出自を全然把握していなかったので、とても参考になりました。ありがとうございます。
DFPlayerを180度回転させた状態で間違って接続してしまいました。
VCCに繋ぐつもりがIO_1に5Vを接続、
RXに繋ぐつもりがGNDにGPIO11を接続、
TXに繋ぐつもりがIO_2にGPIO10を接続、
GNDに繋ぐつもりがUSB-にGNDを接続、
SPK_1に繋ぐつもりがUSB+にスピーカー+を接続、
SPK_2に繋ぐつもりがBUSYにスピーカー-を接続してしまいました。
SoftwareSerialが通信出来ません。壊れたのでしょうか?
RatShannon 様
試したことがないのでわかりませんが、Arduinoで他機器とSoftwareSerial通信ができてDFPlayerとだけ通信できないのであれば、DFPlayerが壊れてしまっている気がします。私も過去2回ぐらい壊してしまっているので、DFPlayerは大体いつも複数個ストックしておくようにしています。
ご返信ありがとうございます。
私も複数個ストックするようにします。(^^;)
失礼します。
最近arduinodeで電子工作を始めたのですが、MP3再生について教えていただきたく。
アンプ付きのスピーカーと接続しようとしています。ステレオミニジャックにはL,R,GND
と3つの接点があります。LとRはそれぞれDAC_L、DAC_Rでいいかと思うのですが、GND
は何もせずによいものでしょうか。
どうぞよろしくお願します。
hama様
すみません、私自身はいつもDFPlayerの内蔵アンプしか使っておらず、そのためDAC_L, DAC_Rも使ったことがありません。。。
少し調べてみた感じだと、以下にDAC_L, DAC_Rを使う場合の配線サンプルはあります。
http://www.flyrontech.com/uploadfile/download/2016441645109830.pdf
見たところ、ステレオミニジャックのGNDは、回路としてはGNDに接続していますね。
おそらくDFPlayerのGNDと接続しても問題はない気はしますが。。。はっきりしたことが言えず申し訳ありません。
ご返信、ありがとうございます。
こちらを見逃しておりました。ありがとうございます。
DFPlayerのGNDに接続したところ、とてもひどいノイズが出てしまいました。
つながないとそれなりの音では聞こえるのですが。
洋楽のDangerZone(トップガン)を鳴らしてみたのですが、かなりボーカル域
が薄い感じで、エコーがかかっている感じにもなってます。EQ関数も試してみましたが、あまり
効果が無いようで。パソコンでそのまま再生したのに比べてかなり音質が劣りますね。
小さく安いモジュールですし、音質はあまり期待できないものでしょうか。
hama様
そうですね、私みたいに玩具改造に使うなら音質的には問題ないレベルなのですが、もう少し高音質を求めるならDFPlayerだと厳しいのかもしれません。
別の手段でも良ければ、Arduino+DFPlayerではなく、SONYが出しているSPRESENSEボードを使う、という手もあるかもしれませんね。
私は使ったことがないのですが、こちらはハイレゾオーディオを再生できるスペックを売りにしているので、使いこなせれば音質的には全く問題ないものになると思います。
ネックなのは、基本お値段高めなのと、ちょっと情報が少ない、ということかなと思います。
SPRESENSEボードというのは初めて知りました。私はプラモデルを作成していてLED点灯+音楽再生をしたく準備しているので、Arduinoでできる中でなんとかしたいと思っています。
探してみるとCytron社のEZ-MP3というシールドがあるようです。価格も2300円程度なので、まだ許容範囲内ではあるのですが、どこをさがしても売り切れでした。
残念ですが現在の音質で進めようと思います。
いろいろと勉強になりました。他の記事もまたゆっくり見させていただきたいと思います。
ありがとうございました。
電源のトラブルに会いました。
自作簡易Arduinoシールド(USBシリアルが無いATMega328のみのシールド)に載せる形で、DFPlayer Miniシールドを作りました。波の音や、滝の音のいわゆる「ホワイトノイズ発生器」としてです。勿論、MP3プレーヤーにもなることをめざして、音量調節はタッチSWを2個、曲送りSWも付けました。
ところが、基板に配線後、電源投入しても最初少しノイズが出るだけであとは音なしです。いろいろサイトを巡り、こちらのサイトでArduinoとDFPlayerを電源は分けた方がいいとのことがヒントになって解決しました!ありがとうございました。
結局、 DFPlayerとArduinoの電源ONを2秒ほど時間差を付けるとうまく起動しました。2秒後にリセットするなどでもいいのでしょうが、スケッチのviod setupでdelay(2000)を入れるだけで良かったです。これを見つけるのに5日ほど掛かりました。(*´ω`)
DFPlayerは大音量にすると数百mA流れますから、Arduinoのpinoutからではまずいことは分かりますが、電源を分けると投入時間差があり、これが解決の糸口となりました。
コメント確認が遅くなってしまい大変申し訳ありません、ご報告頂きありがとうございます。お役に立ったなら良かったです◎ DFPlayerで数百mA流れることがあるのは知りませんでした(笑)
再生を開始した後は再生が終わるまで待つか、停止させないと
他の処理はできないのでしょうか?
それとも、再生開始したら、他の処理はできるでしょうか?
私は再生開始した直後にLEDをつけるという様に
再生開始したら他の処理がしたいのです。
使ってみて、再生したらその曲の長さ分の時間をdelayで待たないと
使えない様に感じました。
もし、そういう使い方しか出来ないなら、私がやりたいMP3再生直後に
別の処理をする事ができないので、なんとか工夫して出来ないかと思い
もし、ご存知なら教えていただきたく思います。
山本 様
> 再生を開始した後は再生が終わるまで待つか、停止させないと
> 他の処理はできないのでしょうか?
いえ、そんなことはないです。
特に特別なことはしなくても、再生のコマンドを実行すれば、そのあとは再生していようがいまいが処理は流れていくはずですが。。。
ピンバック & トラックバック一覧
[…] 方につきましては、こちらをご参照ください。 […]
[…] ヤーのDFPlayer Mini。利用方法については、こちらをご参照ください。 […]
[…] Arduinoとの接続事例がいくつか出てくるので動かし方の参考にする。 DFPlayer Mini を使ってArduinoで音声(MP3)を再生する 『FN-M16P(DFPlayer Mini)』電子工作で音楽(MP3)を鳴らすなら、これ。Ard […]
[…] DFPlayer Mini を使ってArduinoで音声(MP3)を再生する […]
[…] http://make-muda.weblike.jp/2016/09/4585/ […]
[…] DFPlayer Mini を使ってArduinoで音声(MP3)を再生する 回路 蓋部(スピーカーと制御用タクトスイッチ) […]