Arduinoでmp3の音を再生したい!ってなったときに、
良い方法があったのでご紹介します!
こんな感じで鳴らしました↓
youtu.be
わかりにくいですが、最初の音楽をループさせています。
途中でスイッチを押すと別の音(トランペットのやつ)が再生されます。
DFPlayer Mini
こちらの音声モジュールを使っています。
HiLetgo® 2個セット TFカード Uディスクミニ MP3プレーヤー オーディオ 音声 モジュールボード Arduino DFPlayに対応
- 出版社/メーカー: HiLetgo
- メディア: Wireless Phone Accessory
- この商品を含むブログを見る
電子工作でmp3ファイルを再生するためのモジュールです。
Arduinoから制御できますが、単体でも使えるみたいです。
Amazonでプライムついててしかも結構安い!
ライブラリを使って簡単に音を再生したり、音量やループ再生などができます。
ライブラリは以下から入手できます。
https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Sample_Code
配線
配線はこんな感じです。
アンプが内蔵されているので、コーンをつなぐだけで良いのですが、
スピーカーをつなげるときはこっちにつなげてみたらいけました。使用するピンが変わっています。
少し図が雑ですが、3.5mmのモノラルジャックに配線してからスピーカーのオーディオジャックをそこにつなげています。
mp3ファイルについて
再生したいmp3ファイルをマイクロSDカードに入れる必要があります。
Bargain?Shop (micro-SD)カード メモリカード マイクロ 高速?伝送レート 互換性 メガホン MP4、MP3、カメラに適用? (2G)
- 出版社/メーカー: Bargain?Shop
- メディア: エレクトロニクス
- この商品を含むブログを見る
マイクロSDカードの中に、新規フォルダを作成し、名前を01から10までの名前をつけ、そのなかにmp3ファイルを入れます。
mp3ファイルの名前は、1から1000の間でつけます。1000までなのですが、1のときに0001だとうまくいかなかった気がします。
最終的に001にしてうまくいきました。(気のせいかも)
また、Setup関数で001の音源をループさせ、スイッチをおして002を流したのですが、001を01フォルダの中に入れるとなぜか002がループしたので、
01フォルダのそとにSetup関数でループさせたいmp3ファイルをおくとうまくいきました。
コードの例
#include "DFRobotDFPlayerMini.h" #include "SoftwareSerial.h" SoftwareSerial mySoftwareSerial(10, 11); // RX, TX DFRobotDFPlayerMini myDFPlayer; void setup() { // put your setup code here, to run once: mySoftwareSerial.begin(9600); //シリアルポートを開き、転送速度を9600bpsに設定 mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module // Serial.begin(115200); pinMode(6,INPUT); 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(15); myDFPlayer.loop(1); } void loop() { if(digitalRead(6) == HIGH){ myDFPlayer.playFolder(1, 2); } }
コードの解説
ライブラリの読み込み
#include "DFRobotDFPlayerMini.h"
RX,TXのピンを10番、11番ピンに接続
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
SoftwareSerialとDFPlayerの初期化
mySoftwareSerial.begin(9600);
SDカードがセットされていないとエラーが出ます。
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(15);
一番目のmp3ファイルをループ再生
myDFPlayer.loop(1);
1のフォルダの中にある002.mp3を再生。一つ目の引数がフォルダ番号、二つ目の引数がその中のmp3の番号です。
myDFPlayer.playFolder(1, 2);
チュートリアルからのコード例
他にもいろいろ再生の仕方や止めたりする方法があります。
ライブラリをインストールしたところのチュートリアルにいろいろのっています。
https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Sample_Code
以下、チュートリアルから抜粋。簡単にいろいろできてしまう!わかりやすくてよいですね。
myDFPlayer.next(); //Play next mp3 delay(1000); myDFPlayer.previous(); //Play previous mp3 delay(1000); myDFPlayer.play(1); //Play the first mp3 delay(1000); myDFPlayer.loop(1); //Loop the first mp3 delay(1000); myDFPlayer.pause(); //pause the mp3 delay(1000); myDFPlayer.start(); //start the mp3 from the pause delay(1000); myDFPlayer.playFolder(15, 4); //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255) delay(1000); myDFPlayer.enableLoopAll(); //loop all mp3 files. delay(1000); myDFPlayer.disableLoopAll(); //stop loop all mp3 files. delay(1000); myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535) delay(1000); myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535) delay(1000); myDFPlayer.stopAdvertise(); //stop advertise delay(1000); myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000) delay(1000); myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05. delay(1000); myDFPlayer.randomAll(); //Random play all the mp3. delay(1000); myDFPlayer.enableLoop(); //enable loop. delay(1000); myDFPlayer.disableLoop(); //disable loop. delay(1000); //----Read imformation---- Serial.println(myDFPlayer.readState()); //read mp3 state Serial.println(myDFPlayer.readVolume()); //read current volume Serial.println(myDFPlayer.readEQ()); //read EQ setting Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read fill counts in folder SD:/03
以上です。
購入したもの
HiLetgo® 2個セット TFカード Uディスクミニ MP3プレーヤー オーディオ 音声 モジュールボード Arduino DFPlayに対応
- 出版社/メーカー: HiLetgo
- メディア: Wireless Phone Accessory
- この商品を含むブログを見る
Bargain?Shop (micro-SD)カード メモリカード マイクロ 高速?伝送レート 互換性 メガホン MP4、MP3、カメラに適用? (2G)
- 出版社/メーカー: Bargain?Shop
- メディア: エレクトロニクス
- この商品を含むブログを見る
- メディア: エレクトロニクス
- この商品を含むブログを見る