kghr IT備忘録
HOME » Arduino » Entry
ESP32とDFPlayerをつないでMP3を再生してみた
2018.04/22 (Sun)
DFPlayer Miniが届いたので試してみる。実際のところこのモジュールを使うならESP32でなくても良いのだが、WiFiでIFTTTなどと連携して音を出したり、それなりに使い道があるだろう。
DFPlayer Miniとは
SDカードにmp3ファイルを格納しておけば、ファイル名指定(数字)でmp3の再生ができる。アンプも内蔵しているので使い勝手も良く、値段も300円以下とお手頃。ボリュームコントロールもESP32から行えるのでよくできている。
今回つかったピンは、青く囲った6本だけ。ESP32からRX/TXのシリアル通信で制御する。制御はライブラリを使えばとても簡単にできる。「BUSY」というピンは再生中はLowになるようなので、実際にはこれも使うことになると思う。スピーカーは100円ショップで買ったもの。
DFPlayer miniのサンプルスケッチ
DFPlayer miniのライブラリにサンプルスケッチがついているので、シリアルポートなど一部調整して使用する。
まずはライブラリの追加から。
ライブラリの追加
Arduino IDEのメニューから「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」を選択するとライブラリマネージャが開く。
検索に 「DFPlayer」 と入力すると いくつか候補が表示されるので、そのうち「DFRobotDFPlayerMini」 を選択してインストールする。
サンプルスケッチの読み込み
Arduino IDEのメニューから「ファイル」→「スケッチ例」→「DFRobotDFPlayerMini」 には2つのサンプルがある。どちらでもいいのだが、簡単な方の「GetStarted」を使うことにする。
ESP32はハードウェアのシリアルポートを3つも持っているので、「SoftwareSerial.h」は使わない。というか、始めSoftwareSerialを試してみたものの、うまく動かなかった。ESP32用のライブラリがあるようなのだが、SoftwareSerialにこだわる必要はないだろう。
ESP32のハードウェアのシリアルポートのうちUART0とUART2はいずれも「VIN」の反対側にある。UART はピンを変更可能なため、UART1 をVIN側のピンにアサインして使った。
サンプルスケッチの調整
「SoftwareSerial」の部分を「HardwareSerial」用に書き換える。赤線がコメントアウトした行で、青線が修正した行だ。
HardwareSerialはUART1を14(RX),12(TX)に割り当てた。もちろんUART0やUART2の割り当て済みGPIOを使う場合はGPIOの再割り当てはしなくても良い。
なお、「 myHardwareSerial.begin(9600, SERIAL_8N1, 14, 12); 」は「void setup()」の中で行う必要があるとのこと。
一応GitHubに置いておきます。
↓
https://github.com/kghrlabo/DFRobotDFPlayerMini/blob/master/examples/GetStarted/esp32_getStarted.ino
MP3ファイルの準備と再生
先人を参考にファイルを用意してみた。「mp3」というフォルダの中に「0000.mp3」「0001.mp3」といったように数字4桁のファイル名をつけてmp3ファイルを置くのが基本のようだが、メーカーの資料を見るといくつかバリエーションがあるらしい。
myDFPlayer.playFolder(15, 4); //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255)
myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535)
myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000)
参考) メーカー製品情報
https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299
あとがき
とりあえず動くことは分かった。BlynkとIFTTTを使ってTwitterや天気予報とも連携してみたが、音声を用意して作りこむのは結構大変かも。次は音声合成を試してみたいと思う。
今日はここまで。