M5Stack で mp3 を鳴らしたいので、Arduino 対応の mp3 再生モジュールDFPlayer Mini を買いました。
もちろんそのまま使用できるわけでもなくて、M5Stack 用に?調整して動作するところまで持っていけたのでまとめです。
目次
DFPlayer Mini を買った M5Stack で RFID を読み込む で書いた時と同じで、 同じモジュールなのに、やはり値段幅があるので気を付ける必要があるようです。
以下のページを参考にさせていただきました。500 円以下の Arduino 用 mp3 プレーヤー”DFPlayer Mini”で適当なもの作ってみた DFPlayer Mini を使って Arduino で音声(MP3)を再生する 簡単にスピーカ再生機能を追加! DFPlayer Mini で MP3 音源再生!
配線 DFPlayer Mini SKU:DFR0299 を参考にして配線します。
各結線の対応は以下のようになった
M5Stack
抵抗
DFPlayer Mini
スピーカー
3V3
-
VCC
-
G
-
GND
-
16
-
RX
-
17
1KΩ
TX
-
2
-
BUSY
-
-
-
SPK_1
スピーカー(+)
-
-
SPK_2
スピーカー(-)
ライブラリ追加 ArduinoIDE の[スケッチ]->[ライブラリをインクルード]->[ライブラリを管理]で、 「DFPlayer Mini Mp3 by Makuna」と検索してインストールする。(画像はインストール済み)
「DFPlayer Mini Mp3 by Makuna」の GitHub はこちら こちらで見ると、サンプルには未使用の関数も準備されてるのがわかります。
コードは、ArduinoIDE の[ファイル]->[スケッチ例]->[カスタムライブラリのスケッチ例]->[DFPlayer Mini Mp3 by Makuna]->[PlayMp3]をベースに書き換えた。
主なやったことは、
M5Stack のライブラリインクルード
SoftwareSerial から HardwareSerial にシリアルの使用クラスを変更
PlayMp3-M5Stack.ino 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 #include <M5Stack.h> #include <DFMiniMp3.h> class Mp3Notify { public : static void OnError (uint16_t errorCode) { Serial.println (); Serial.print ("Com Error " ); Serial.println (errorCode); } static void OnPlayFinished (uint16_t globalTrack) { Serial.println (); Serial.print ("Play finished for #" ); Serial.println (globalTrack); } static void OnCardOnline (uint16_t code) { Serial.println (); Serial.print ("Card online " ); Serial.println (code); } static void OnCardInserted (uint16_t code) { Serial.println (); Serial.print ("Card inserted " ); Serial.println (code); } static void OnCardRemoved (uint16_t code) { Serial.println (); Serial.print ("Card removed " ); Serial.println (code); } }; HardwareSerial mySerial2 (2 ) ;DFMiniMp3<HardwareSerial, Mp3Notify> mp3 (mySerial2) ;void setup () { M5.begin (); M5.Lcd.setTextSize (2 ); mp3.begin (); mp3.setVolume (25 ); mp3.stop (); uint16_t count = mp3.getTotalTrackCount (); Serial.printf ("files %d" , count); } void waitMilliseconds (uint16_t msWait) { uint32_t start = millis (); while ((millis () - start) < msWait) { mp3.loop (); delay (1 ); } } int i = 1 ;char msg[17 ] = "" ;void loop () { M5.update (); M5.Lcd.clear (); sprintf (msg, "sd:/mp3/%04d.mp3" , i); Serial.printf ("%d\n" , i); Serial.printf ("%s\n" , msg); M5.Lcd.drawString (msg, 0 , 0 ); mp3.playMp3FolderTrack (i); mp3.start (); while (!digitalRead (2 )) { waitMilliseconds (1000 ); } mp3.stop (); if (i < 3 ) { i++; } else { i = 1 ; } }
M5Stack にPlayMp3-M5Stack.ino
を書き込み、 DFPlayer Mini に差し込むマイクロ SD カードに、mp3 フォルダを作成して、0001.mp3,0002.mp3,0003.mp3 を保存します。 すると電源を入れなおすと、0001.mp3~0003.mp3 をループで再生します。
mp3 ファイルの再生ができました。 使っているスピーカーと音量設定のせいか、若干音が割れる割れてるけど、 ハード側で調整(部品交換含め)すればよくなりそうです。 この前のM5Stack で RFID を読み込む と組み合わせて RFID の読み取り結果で音を鳴らしてみようかと思います。
ではでは。