Hallo,
ich versuche gerade mein ESP8266 mit dem MP3-TF-16P Modul zum laufen zu bringen.
Leider erkennt er den Serial Port nicht. Ich verwende dafür ESPSoftwareSerial.
Code:
#include <SoftwareSerial.h>
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(1, 2, false); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(5); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
// myDFPlayer.next(); //Play next mp3 eve
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
void printDetail(uint8_t type, int value){
switch (type) {
case TimeOut:
Serial.println(F("Time Out!"));
break;
case WrongStack:
Serial.println(F("Stack Wrong!"));
break;
case DFPlayerCardInserted:
Serial.println(F("Card Inserted!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Card Removed!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Card Online!"));
break;
case DFPlayerPlayFinished:
Serial.print(F("Number:"));
Serial.print(value);
Serial.println(F(" Play Finished!"));
break;
case DFPlayerError:
Serial.print(F("DFPlayerError:"));
switch (value) {
case Busy:
Serial.println(F("Card not found"));
break;
case Sleeping:
Serial.println(F("Sleeping"));
break;
case SerialWrongStack:
Serial.println(F("Get Wrong Stack"));
break;
case CheckSumNotMatch:
Serial.println(F("Check Sum Not Match"));
break;
case FileIndexOut:
Serial.println(F("File Index Out of Bound"));
break;
case FileMismatch:
Serial.println(F("Cannot Find File"));
break;
case Advertise:
Serial.println(F("In Advertise"));
break;
default:
break;
}
break;
default:
break;
}
}
Der Pin RX vom Modul ist an D1 angeschlossen. TX ist an D2 angeschlossen.
Leider kommt immer die Meldung, dass ich die Verbindung zum Modul checken soll, bzw. eine SD einschieben soll.
Die Verkablung ist richtig, da ich es schon mit meinem Arduino Uno getestet habe.
Ich hoffe mir kann jemand helfen!
LG
Dennis
Beim ESP8266 ist D1 nicht gleich 1, sondern 5 (GPIO5), D2 ist 4 (GPIO4)
Gruß Tommy
Erstmals vielen Dank für die schnelle Antwort.
Ich habe es nun so probiert:
#include <SoftwareSerial.h>
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(5, 4); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(5); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
// myDFPlayer.next(); //Play next mp3 eve
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
void printDetail(uint8_t type, int value){
switch (type) {
case TimeOut:
Serial.println(F("Time Out!"));
break;
case WrongStack:
Serial.println(F("Stack Wrong!"));
break;
case DFPlayerCardInserted:
Serial.println(F("Card Inserted!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Card Removed!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Card Online!"));
break;
case DFPlayerPlayFinished:
Serial.print(F("Number:"));
Serial.print(value);
Serial.println(F(" Play Finished!"));
break;
case DFPlayerError:
Serial.print(F("DFPlayerError:"));
switch (value) {
case Busy:
Serial.println(F("Card not found"));
break;
case Sleeping:
Serial.println(F("Sleeping"));
break;
case SerialWrongStack:
Serial.println(F("Get Wrong Stack"));
break;
case CheckSumNotMatch:
Serial.println(F("Check Sum Not Match"));
break;
case FileIndexOut:
Serial.println(F("File Index Out of Bound"));
break;
case FileMismatch:
Serial.println(F("Cannot Find File"));
break;
case Advertise:
Serial.println(F("In Advertise"));
break;
default:
break;
}
break;
default:
break;
}
}
Leider geht es immernoch nicht, erkennst du eventuell einen Fehler?
"Geht nicht" ist eine wenig nützliche Fehlerbeschreibung.
Was geht wie / wie nicht? Was sagen Deine seriellen Ausgaben?
Gruß Tommy
Edit: Mit welcher Spannung betreibst Du den MP3-Player? Der ESP8266 hat 3,3V.
Es kommt kein Fehler o.ä, es kommt die gleiche Meldung:
Unable to begin:
1.Please recheck the connection!
2.Please insert the SD card!
Der ESP8266 hat 5v. Bzw. meiner hat einen 5v Output.
Ich kenne keinen ESP8266, der 5V IO-Pins hat und glaube auch nicht, dass es einen gibt. Wenn doch, dann bitte einen Link dazu.
Gruß Tommy
Du solltest zwischen Stromversorgungspins und IO-Pins unterscheiden lernen. Die IO-Pins arbeiten mit 3,3V und sind nicht 5V-tolerant!
Entweder Du betreibst den MP3-Player mit 5V, dann brauchst Du Levelshifter oder Du betreibst ihn mit 3,3V von einem eigenen Netzteil (der NodeMCU kann das nicht mit versorgen).
Gruß Tommy
Ich habe ihn jetzt mit einem 5v Netzteil angeschlossen. Er erkennt den immernoch nicht...
Liest und besonders verstehst Du meine Antworten?
Gruß Tommy
Ja, aber ich habe den MP3-Player jetzt mit dem GND & 5V Pin von meinen Arduino UNO verbunden.
Warum brauche ich dafür noch einen Levelshifter?
weil der ESP an RX/TX nur 3.3 V Pegel hat. Weist du ob dein Modul das klar als High erkennt?
Bitte mach ein Echtfoto von deinem Aufbau worin man klar jedes Kabel vom NodeMCU zum Level-Shifter - zum MP3 Modul inkl. der Stromversorgung erkennt
Wo hast Du etwas vom UNO geschrieben? Bisher war es ein ESP8266.
Mit solchen Sprüngen ohne Info ist keine sinnvolle Hilfe machbar. Ich bin raus.
Gruß Tommy
Achso, jetzt weiß ich was gemeint ist. Wie kann ich denn die RX / TX hochpegeln auf 5v, dass er das als HIGH erkennt?
Du hast sicher noch ein weiteres Problem.
Du verwendest keinen DFplayer mini setzt aber die Library dazu ein. Das passt nicht zusammen.
Poste doch einfach mal einen Hyperlink deines verwendeten MP3-Players, dann sehen wir auch ob es daran liegt.
Warum brauche ich einen Levelshifter?
Ich habe die benötigten 5v am ESP.
Auch wenn ich sie extern schalte bringt es nichts.
dennis_dev:
Warum brauche ich einen Levelshifter?
Ich habe die benötigten 5v am ESP.
Auch wenn ich sie extern schalte bringt es nichts.
Jetzt verstehe ich Tommy auch, warum er hier nicht weiter macht.
Du weisst selbst nicht, welche Teile und welchen Controller du verwendest.
Oder willst du uns einfach nur verarschen ?