I’ve got the DFPlayer with the GD3200B instead of the better YX5200, but it works.
As part of my game, so MQTT controlled.
Code
I’m using Soft Serial
// based on code from: // https://github.com/Makuna/DFMiniMp3/blob/master/examples/PlayMp3/PlayMp3.ino // above example has no wifi/mqtt and is missing the SoftSerial include line #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <WiFiClient.h> #include <DFMiniMp3.h> #include "SoftwareSerial.h" #include <Ethernet.h> #define wifi_ssid "SSID" #define wifi_password "SSIDPASS" #define mqtt_server "MQTTSERVER" #define mqtt_port 1883 WiFiClient espClient; EthernetClient ethClient; PubSubClient mqtt(espClient); class Mp3Notify; SoftwareSerial secondarySerial(D6, D5); // RX, TX typedef DFMiniMp3<SoftwareSerial, Mp3Notify> DfMp3; DfMp3 dfmp3(secondarySerial); class Mp3Notify { public: static void PrintlnSourceAction(DfMp3_PlaySources source, const char* action) { if (source & DfMp3_PlaySources_Sd) { Serial.print("SD Card, "); } if (source & DfMp3_PlaySources_Usb) { Serial.print("USB Disk, "); } if (source & DfMp3_PlaySources_Flash) { Serial.print("Flash, "); } Serial.println(action); } static void OnError([[maybe_unused]] DfMp3& mp3, uint16_t errorCode) { // see DfMp3_Error for code meaning Serial.println(); Serial.print("Com Error "); Serial.println(errorCode); } static void OnPlayFinished([[maybe_unused]] DfMp3& mp3, [[maybe_unused]] DfMp3_PlaySources source, uint16_t track) { Serial.print("Play finished for #"); Serial.println(track); // start next track track += 1; // this example will just start back over with 1 after track 3 if (track > 3) { track = 1; } dfmp3.playMp3FolderTrack(track); // sd:/mp3/0001.mp3, sd:/mp3/0002.mp3, sd:/mp3/0003.mp3 } static void OnPlaySourceOnline([[maybe_unused]] DfMp3& mp3, DfMp3_PlaySources source) { PrintlnSourceAction(source, "online"); } static void OnPlaySourceInserted([[maybe_unused]] DfMp3& mp3, DfMp3_PlaySources source) { PrintlnSourceAction(source, "inserted"); } static void OnPlaySourceRemoved([[maybe_unused]] DfMp3& mp3, DfMp3_PlaySources source) { PrintlnSourceAction(source, "removed"); } }; void setup_wifi() { delay(10); WiFi.mode(WIFI_STA); WiFi.begin(wifi_ssid, wifi_password); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void setup() { setup_wifi(); mqtt.setServer(mqtt_server, mqtt_port); mqtt.setCallback(callback); Serial.begin(115200); Serial.println("initializing..."); WiFiClient espClient; PubSubClient mqtt(espClient); mqtt.setClient(espClient); mqtt.setServer(mqtt_server, 1883); mqtt.setCallback(callback); mqtt.subscribe("escape/soundin"); dfmp3.begin(); uint16_t volume = dfmp3.getVolume(); Serial.print("volume "); Serial.println(volume); dfmp3.setVolume(24); uint16_t count = dfmp3.getTotalTrackCount(DfMp3_PlaySource_Sd); Serial.print("files "); Serial.println(count); Serial.println("starting..."); // start the first track playing // dfmp3.playMp3FolderTrack(1); // sd:/mp3/0001.mp3 } void reconnect() { // Loop until we're reconnected while (!mqtt.connected()) { // Create a random client ID String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect if (mqtt.connect(clientId.c_str())) { // Once connected, publish an announcement... mqtt.publish("escape", "sound connected"); // ... and resubscribe mqtt.subscribe("escape/soundin"); } else { // Wait 5 seconds before retrying delay(5000); } } } void callback(char* topic, byte* payload, unsigned int length) { // digitalWrite(led, HIGH); String topicStr = topic; byte value = atoi((char*)payload); dfmp3.playMp3FolderTrack(value); // sd:/mp3/0001.mp3 Serial.println(value); } void waitMilliseconds(uint16_t msWait) { uint32_t start = millis(); while ((millis() - start) < msWait) { dfmp3.loop(); delay(1); } } void loop() { if (!mqtt.connected()) { reconnect(); } mqtt.loop(); waitMilliseconds(100); }