Open5
DFPlayer MiniとESP32
秋月でDFPlayer Mini
AmazonでESP32を購入
ESP32仕様として
同じESP32でも30、38ピンと数が違うのがある
Arduino IDEのインストール
を参考に実行シリアルモニタにHello Worldが表示されたのを確認
Arduino IDE DFPlayer ライブラリ追加
DFRobotが公開しているものを追加
DFPlayer ライブラリのサンプルコードとしてメニュー -> File -> Examples -> DFRobotDFPlayerMini -> GetStarted.inoを生成
コードを変更して音声が流れることを確認
GetStarted.ino
/***************************************************
DFPlayer - A Mini MP3 Player For Arduino ESP32
<https://www.dfrobot.com/product-1121.html>
***************************************************
This example shows the basic function of library for DFPlayer.
Created 2016-12-07
By [Angelo qiao](Angelo.qiao@dfrobot.com)
GNU Lesser General Public License.
See <http://www.gnu.org/licenses/> for details.
All above must be included in any redistribution
****************************************************/
/***********Notice and Trouble shooting***************
1.Connection and Diagram can be found here
<https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
2.This code is tested on Arduino Uno, Leonardo, Mega boards.
****************************************************/
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
HardwareSerial myHardwareSerial(1); // use HardwareSerial UART1
DFRobotDFPlayerMini myDFPlayer;
void setup()
{
myHardwareSerial.begin(9600, SERIAL_8N1, 16, 17); // RX, TX
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
while (!myDFPlayer.begin(myHardwareSerial))
{
Serial.print(".");
delay(500);
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(30); //Set volume value. From 0 to 30
myDFPlayer.playMp3Folder(1);
}
void loop()
{
}
SDカードをFAT32にフォーマット変更し、
データは /MP3/0001start.mp3
というのを設置した
その際の回路として
繋げたところを言語化すると
DFPlayer VSS <-> ESP32 3v3
DFPlayer RX <-> ESP32 GIOP 17 TX2
DFPlayer TX <-> ESP32 GIOP 16 RX2
DFPlayer GND <-> ESP32 GND
DFPlayer SPK_1 <-> スピーカー赤
DFPlayer SPK_2 <-> スピーカー黒
さらにスイッチを追加し、プログラムの内容も変更した
GetStarted.ino
/***************************************************
DFPlayer - A Mini MP3 Player For Arduino ESP32
<https://www.dfrobot.com/product-1121.html>
***************************************************
This example shows the basic function of library for DFPlayer.
Created 2016-12-07
By [Angelo qiao](Angelo.qiao@dfrobot.com)
GNU Lesser General Public License.
See <http://www.gnu.org/licenses/> for details.
All above must be included in any redistribution
****************************************************/
/***********Notice and Trouble shooting***************
1.Connection and Diagram can be found here
<https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram>
2.This code is tested on Arduino Uno, Leonardo, Mega boards.
****************************************************/
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
#define RX_PIN 16
#define TX_PIN 17
#define RANDOM_BUTTON_PIN_1 12
#define SUB_TRUCK_COUNT 2
#define VOLUME 30
HardwareSerial myHardwareSerial(1); // use HardwareSerial UART1
DFRobotDFPlayerMini myStartDFPlayer;
DFRobotDFPlayerMini myRandomDFPlayer;
int randomTruckCount;
bool isRandomButtonPIN = false;
unsigned long prevMills = 0, intervalMills = 1000;
void setup()
{
myHardwareSerial.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); // RX, TX
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
while (!myStartDFPlayer.begin(myHardwareSerial))
{
Serial.print(".");
delay(500);
}
while (!myRandomDFPlayer.begin(myHardwareSerial))
{
Serial.print(".");
delay(500);
}
Serial.println(F("DFPlayer Mini online."));
randomTruckCount = myStartDFPlayer.readFileCountsInFolder(2) / SUB_TRUCK_COUNT;
Serial.println(F("randomTruckCount"));
Serial.println(randomTruckCount);
myStartDFPlayer.volume(VOLUME); //Set volume value. From 0 to 30
myRandomDFPlayer.volume(VOLUME);
myStartDFPlayer.playFolder(1, 1);
delay(5000);
pinMode(RANDOM_BUTTON_PIN_1, INPUT_PULLUP);
}
void loop()
{
unsigned long currMills = millis(); // 現在時刻を取得
if ((currMills - prevMills) >= intervalMills) { // 前回実行時刻から実行周期以上経過していたら
int buttonPINState = digitalRead(RANDOM_BUTTON_PIN_1);
int myDFPlayerReadState = myRandomDFPlayer.readState();
// Serial.println(myDFPlayerReadState);
if (buttonPINState == LOW && !isRandomButtonPIN)
{
isRandomButtonPIN = true;
myRandomDFPlayer.playFolder(2, random(randomTruckCount) + 1);
}
if (buttonPINState == HIGH && isRandomButtonPIN)
{
isRandomButtonPIN = false;
myRandomDFPlayer.stop();
}
if (isRandomButtonPIN && (myDFPlayerReadState == -1))
{
myRandomDFPlayer.playFolder(2, random(randomTruckCount) + 1);
}
prevMills += intervalMills; // 前回実行時刻に実行周期を加算
}
}
スイッチを押したときにチャタリングを起こしたり、DFPlayer側も音声の終了を送るのがバブリングしてたので遅延処理を入れてそれっぽく対応した
またSDの音声のデータ設置も /01/001 start.mp3
や /02/001 hoge.mp3
と変更した
回路図もこのように変更