DFPlayer mit ESP8266 V3 ansteuern MP3-Player

Hallo Zusammen,

eventuell kann mir hier jemand helfen, da ich kurz vor dem Wahnsinnig werden bin.
Ich versuche anhand eines ESP8266 V3 einen DFPlayer MP3-TF16PV3.0 anzusteuern. Ich habe das ganze zuerst auf einem Arduino Nano programmiert und da hat alles wunderbar funktioniert. Auf dem ESP bekomme ich nun immer nur die Fehlermeldung dass der DFPlayer nicht verbunden ist.

Als Spannunsversorgung des DFPlayers verwende ich den Vu des ESP der 5 V hat. Diese habe ich auch nachgemessen.

Ich hoffe mir kann jemand helfen!

Meine Schaltung sieht folgendermaßen aus:

Hier noch mein verwendeter Sketch. Ich hoffe ich habe jetzt alles benötigte beschrieben.

#include <DFPlayerMini.h>
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//Initialisieren der PINs 11 und 10 fuer Rx und Tx
SoftwareSerial mySoftwareSerial(D7,D4); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

//Initialisierung des OLED

//#define OLED_RESET 4
//Adafruit_SSD1306 display(OLED_RESET);
//Adafruit_SSD1306  display(0x3c, A4, A5);



//Interrupt Routine
//const byte interruptPin = 2;
//volatile byte state = 1;

void setup()
{

//set up Screen
    
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
 
  

//set up Screen
  
 // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)
  //display.clearDisplay();
  //display.setTextSize(1);
  //display.setTextColor(WHITE);
  //display.setCursor(0,0);

  
//Intitialisierung des SD-Players und ueberpruefung auf Fehler
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini"));
  Serial.println(F("Initializing DFPlayer module ... Wait!"));

  if (!myDFPlayer.begin(mySoftwareSerial))
  {
  Serial.println(F("Not initialized:"));
  Serial.println(F("1. Check the DFPlayer Mini connections"));
  Serial.println(F("2. Insert an SD card"));
  while (true){
   delay(0);
    }
  }

  Serial.println();
  Serial.println(F("DFPlayer Mini module initialized!"));






//SD-Player Einstellungen
  myDFPlayer.setTimeOut(500); //Timeout serial 500ms
  myDFPlayer.volume(5); //Volume 10
  myDFPlayer.play(3);



//Define Interrup Routine
 //pinMode(interruptPin, INPUT);
 //attachInterrupt(digitalPinToInterrupt(interruptPin),play,RISING);

 
}



void loop()
{
  //if (interruptPin == LOW){
  //Serial.println(F("Es Klingelt!")); }
  //while (true);

 //Serial.println(interruptPin);
}
  




//void play(){
 // state = digitalRead(interruptPin);
  //myDFPlayer.play(2);
//}

Verwende besser die GPIO-Bezeichnung der Pins des ESP8266. Und achte auf die richtige Beschaltung TX auf RX und RX auf TX.

Deine zahlreichen und unnötigen Leerzeilen machen den Sketch schlecht lesbar.

Schon mal mit D7, D8 versucht?

SoftwareSerial mySoftwareSerial(D7,D4); // RX, TX

image

Und bei azdelivery ist in einem der Anschlüsse (Rx ?) noch ein 1KOhm-Widerstand mit eingeschleift:

image

Software Serial kann an jedem beliebigen digitalen Pin genutzt werden. Das funktioniert auch. Und einen Widerstand in der seriellen Leitung braucht es auch nicht, da beide Module mit 3,3Volt auf den Pins arbeiten. Der wird nur bei 5Volt Controllern benötigt.

2 Likes

Dann bleibt noch, dass die Anschlüsse RX/TX getauscht werden müssen ...

Nicht nur. Ich sehe da zwei DFPlayer Libraries, die sich evtl. beharken.
Oder es wurde ein falscher Controller in der IDE ausgewählt, dann passt es mit den Pin Kennzeichnungen nicht.

Ja habe ich und ich bekomme dann immer den Fehler:

esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header

So wie ich das verstehe verhindert das verwenden dieser Pins das booten.

Hast du das mal mit den GPIO Bezeichnungen gemacht ?
Und RX und TX richtig angeschlossen ?

So hier nochmal der Code in Übersichtlich.
Ich habe die GPIO Bezeichnungen verwendet und Rx und Tx im Code getauscht. Ich bekomme immer noch den Fehler mit der Initialisierung.

#include <SoftwareSerial.h>
#include "DFRobotDFPlayerMini.h"

//Initialisieren der PINs 11 und 10 fuer Rx und Tx
SoftwareSerial mySoftwareSerial(2,13); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

void setup()
{

//set up Screen
    
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

//Intitialisierung des SD-Players und ueberpruefung auf Fehler
  Serial.println();
  Serial.println(F("DFRobot DFPlayer Mini"));
  Serial.println(F("Initializing DFPlayer module ... Wait!"));

  if (!myDFPlayer.begin(mySoftwareSerial))
  {
  Serial.println(F("Not initialized:"));
  Serial.println(F("1. Check the DFPlayer Mini connections"));
  Serial.println(F("2. Insert an SD card"));
  while (true){
   delay(0);
    }
  }

  Serial.println();
  Serial.println(F("DFPlayer Mini module initialized!"));


  //SD-Player Einstellungen
  myDFPlayer.setTimeOut(500); //Timeout serial 500ms
  myDFPlayer.volume(5); //Volume 10
  myDFPlayer.play(3);

}

void loop()
{
 
}

Dein Fehler ist der VU Pin. Das ist kein Spannungsausgang. Nimm den Vin Pin.
Besse ist eine einheitliche Spannung mit 5 Volt aus einer externen Versorgung.

Gerade mit einem Multimeter nachgemessen, am Vin habe ich 2.9 V anliegen was nicht ausreichend sein wird für den DFPlayer. Am Vu zeigt mir das Multimeter konstant 5 V an, weshalb kann ich diese nicht verwenden?

Andere frage würde als externe Versorgung auch der 5V Pin des Arduino Nano gehen?

VU ist VUSB manchmal als VU, VUS, oder VUB == +5V vom USB direkt

Dann ist das in dem mir vorliegenden Pinout unklar (Reserved) bezeichnet.
Das sollte auch das NodeMCU V3 sein.

Ok, mittlerweile habe ich auch andere Pinouts gefunden.

Ja, das wird auch funktionieren.
GND nicht vergessen.

Durch das verwenden des Arduino blinkt die eingebaute LED am ESP jetzt dauerhaft, irgendeine Idee weswegen sowas passieren könnte?

Und hier gib ich Dier recht, es gibt mehrere Ausführungen, habe beide mit und ohne VU

Da könnte der Strom nicht ausreichen.
Andere Idee habe ich nicht.

Ich versorge den DFPlayer jetzt über den Arduino und die Sache mit dem zu geringen Strom habe ich beseitigt. Die Verbindung steht jedoch immer noch nicht.

@HotSystems ich habe diesen Post gefunden indem du auch kommentiert hattest. Könnte das Serial(1) hier eine Lösung sein? Ich verstehe jedoch leider überhaupt nicht wie das funktioniert.

Bei dem Post handelt es sich um einen ESP32 und der Serial1 ist nicht die Lösung. Es funktioniert sicher auch mit SoftwareSerial.
Wenn du die Spannung angeschlossen hast, was passiert, wenn du den Pin IO_1 gegen GND schaltest ? Hier die Doku.