Open5

DFPlayer MiniとESP32

igaraigara

Arduino IDE DFPlayer ライブラリ追加
DFRobotが公開しているものを追加

igaraigara

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 <-> スピーカー黒

igaraigara

さらにスイッチを追加し、プログラムの内容も変更した

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 と変更した

回路図もこのように変更