Hey Leute, ich versuche das DFPlayer mini Modul zum laufen zu bekommen aber scheitere kläglich. Wenn ich am Chip den trigger fürs nächste Lied nutze, spielt ein Lied und die LED am Chip leuchtet. Sprich die SD Karte ist drin und der Speaker funzt und der Chip hat Strom. Wenn ich den Beispiel Code nutze schlägt das Initialisieren aber fehl. Ich habe auf meinem Arduino Nano Klon schon einige Pins ausprobiert (A6+A7, TX1+RX0, D6+D7) und auch mit 1K Widerstand an RX,TX und RX+TX aber kein Glück. Habt ihr ne Idee was ich noch versuchen kann? Kann mir jemand verraten wie ich messen kann ob der Chip überhaupt die serielle Verbindung annimmt? Habs mit nem Multimeter versucht aber bekomme auf beiden Pins ca 3V wobei ich dachte nur der TX würde 3V haven weil Output und so. Danke schon mal :)
Thomas S. schrieb: > Wenn ich den Beispiel Code nutze Sehe ich nirgends. Warte, ich geb Dir meinen:
1 | #include <SoftwareSerial.h> |
2 | const byte txPin = 4; |
3 | const byte rxPin = 5; |
4 | SoftwareSerial mySerial (rxPin, txPin); |
5 | int Volume[10] = {0x7E, 0xFF, 0x06, 0x06, 0x00, 0x00, 0x00, 0xFE, 0xF5, 0xEF}; |
6 | const int zero = 0x00; |
7 | int val = 0; |
8 | int photo1 = A0; |
9 | int photo2 = A1; |
10 | |
11 | void setup() { |
12 | pinMode(rxPin, INPUT); |
13 | pinMode(txPin, OUTPUT); |
14 | // set the data rate for the SoftwareSerial port
|
15 | mySerial.begin(9600); |
16 | Serial.begin(9600); |
17 | wiederHolt(1); |
18 | }
|
19 | |
20 | void loop() { |
21 | for (int j = 0; j < 31; j = j + 1) { |
22 | delay(500); |
23 | setVolume(j); |
24 | val = analogRead(photo1); |
25 | Serial.print(val); |
26 | Serial.print(" "); |
27 | val = analogRead(photo2); |
28 | Serial.println(val); |
29 | }
|
30 | }
|
31 | |
32 | void setVolume(int v){ |
33 | if (v > 30) { |
34 | v = 30; |
35 | }
|
36 | Volume[6] = v; |
37 | Volume[8] = 0xF5 - v; |
38 | for (byte i = 0; i < 10; i = i + 1) { |
39 | mySerial.write(Volume[i]); |
40 | }
|
41 | }
|
42 | |
43 | void wiederHolt(int v){ |
44 | // 7E FF 06 08 00 00 01 FE F2 EF 1. Stück wiederholt abspielen
|
45 | mySerial.write(0x7E); |
46 | mySerial.write(0xFF); |
47 | mySerial.write(0x06); |
48 | mySerial.write(0x08); |
49 | mySerial.write(zero); |
50 | mySerial.write(zero); |
51 | switch (v) { |
52 | case 1: |
53 | mySerial.write(0x01); |
54 | mySerial.write(0xFE); |
55 | mySerial.write(0xF2); |
56 | break; |
57 | case 2: |
58 | mySerial.write(0x02); |
59 | mySerial.write(0xFE); |
60 | mySerial.write(0xF1); |
61 | break; |
62 | case 3: |
63 | mySerial.write(0x03); |
64 | mySerial.write(0xFE); |
65 | mySerial.write(0xF0); |
66 | break; |
67 | default:
|
68 | mySerial.write(0x04); |
69 | mySerial.write(0xFE); |
70 | mySerial.write(0xEF); |
71 | break; |
72 | }
|
73 | mySerial.write(0xEF); |
74 | }
|
Der funzt bei mir. Hier noch die wichtigsten Befehle mit fertig berechnetem Checksum:
1 | 7E FF 06 03 00 00 01 FE F7 EF 1. Stück abspielen |
2 | 7E FF 06 03 00 00 02 FE F6 EF 2. Stück abspielen |
3 | |
4 | ^^ ^^ |
5 | Checksum: 0x1000- |
6 | (^^+^^+^^+^^+^^+^^) |
7 | |
8 | 7E FF 06 03 00 00 03 FE F5 EF 3. Stück abspielen |
9 | 7E FF 06 03 00 00 04 FE F4 EF 4. Stück abspielen |
10 | |
11 | 7E FF 06 08 00 00 01 FE F2 EF 1. Stück wiederholt abspielen |
12 | 7E FF 06 08 00 00 02 FE F1 EF 2. Stück wiederholt abspielen |
13 | 7E FF 06 08 00 00 03 FE F0 EF 3. Stück wiederholt abspielen |
14 | 7E FF 06 08 00 00 04 FE EF EF 4. Stück wiederholt abspielen |
15 | |
16 | 7E FF 06 06 00 00 1E FE D7 EF Volume 30 |
17 | 7E FF 06 06 00 00 1D FE D8 EF Volume 29 |
18 | 7E FF 06 06 00 00 1C FE D9 EF Volume 28 |
19 | 7E FF 06 06 00 00 1B FE DA EF Volume 27 |
20 | 7E FF 06 06 00 00 1A FE DB EF Volume 26 |
21 | 7E FF 06 06 00 00 19 FE DC EF Volume 25 |
22 | 7E FF 06 06 00 00 18 FE DD EF Volume 24 |
23 | 7E FF 06 06 00 00 17 FE DE EF Volume 23 |
24 | 7E FF 06 06 00 00 16 FE DF EF Volume 22 |
25 | 7E FF 06 06 00 00 15 FE E0 EF Volume 21 |
26 | 7E FF 06 06 00 00 14 FE E1 EF Volume 20 |
27 | 7E FF 06 06 00 00 13 FE E2 EF Volume 19 |
28 | 7E FF 06 06 00 00 12 FE E3 EF Volume 18 |
29 | 7E FF 06 06 00 00 11 FE E4 EF Volume 17 |
30 | 7E FF 06 06 00 00 10 FE E5 EF Volume 16 |
31 | 7E FF 06 06 00 00 0F FE E6 EF Volume 15 |
32 | 7E FF 06 06 00 00 0E FE E7 EF Volume 14 |
33 | 7E FF 06 06 00 00 0D FE E8 EF Volume 13 |
34 | 7E FF 06 06 00 00 0C FE E9 EF Volume 12 |
35 | 7E FF 06 06 00 00 0B FE EA EF Volume 11 |
36 | 7E FF 06 06 00 00 0A FE EB EF Volume 10 |
37 | 7E FF 06 06 00 00 09 FE EC EF Volume 09 |
38 | 7E FF 06 06 00 00 08 FE ED EF Volume 08 |
39 | 7E FF 06 06 00 00 07 FE EE EF Volume 07 |
40 | 7E FF 06 06 00 00 06 FE EF EF Volume 06 |
41 | 7E FF 06 06 00 00 05 FE F0 EF Volume 05 |
42 | 7E FF 06 06 00 00 04 FE F1 EF Volume 04 |
43 | 7E FF 06 06 00 00 03 FE F2 EF Volume 03 |
44 | 7E FF 06 06 00 00 02 FE F3 EF Volume 02 |
45 | 7E FF 06 06 00 00 01 FE F4 EF Volume 01 |
46 | 7E FF 06 06 00 00 00 FE F5 EF Volume 00 |
47 | |
48 | 7E FF 06 16 00 00 00 FE E5 EF Stop Playback |
Hey, sorry das ich den code nicht mitgeschickt hab. Es ist aber der Beispiel code von der DFPlayer Seite. Als Serial Pins hatte ich auch schon mehrere versucht. 30 + 31, 32 + 1, 10 + 11 und 22 + 19. Hab auch die pins mal getauscht und mit und ohne 1kOhm Widerstand. Kann man denn i.wie überprüfen ob die serielle Verbindung am Start ist? Ich habe mehrfach gelesen, dass Leute kaputte Chips bekommen haben wo die Lötstellen kaputt waren oder so. Ich weiß leider nicht wie und wo ich da messen muss um das zu prüfen.
1 | #include "Arduino.h" |
2 | #include "SoftwareSerial.h" |
3 | #include "DFRobotDFPlayerMini.h" |
4 | |
5 | SoftwareSerial mySoftwareSerial(7, 8); // RX, TX |
6 | DFRobotDFPlayerMini myDFPlayer; |
7 | void printDetail(uint8_t type, int value); |
8 | |
9 | void setup() |
10 | {
|
11 | mySoftwareSerial.begin(9600); |
12 | Serial.begin(115200); |
13 | |
14 | Serial.println(); |
15 | Serial.println(F("DFRobot DFPlayer Mini Demo")); |
16 | Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); |
17 | |
18 | if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. |
19 | Serial.println(F("Unable to begin:")); |
20 | Serial.println(F("1.Please recheck the connection!")); |
21 | Serial.println(F("2.Please insert the SD card!")); |
22 | while(true); |
23 | }
|
24 | Serial.println(F("DFPlayer Mini online.")); |
25 | |
26 | myDFPlayer.volume(10); //Set volume value. From 0 to 30 |
27 | myDFPlayer.play(1); //Play the first mp3 |
28 | }
|
29 | |
30 | void loop() |
31 | {
|
32 | static unsigned long timer = millis(); |
33 | |
34 | if (millis() - timer > 3000) { |
35 | timer = millis(); |
36 | myDFPlayer.next(); //Play next mp3 every 3 second. |
37 | }
|
38 | |
39 | if (myDFPlayer.available()) { |
40 | printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states. |
41 | }
|
42 | }
|
43 | |
44 | void printDetail(uint8_t type, int value){ |
45 | switch (type) { |
46 | case TimeOut: |
47 | Serial.println(F("Time Out!")); |
48 | break; |
49 | case WrongStack: |
50 | Serial.println(F("Stack Wrong!")); |
51 | break; |
52 | case DFPlayerCardInserted: |
53 | Serial.println(F("Card Inserted!")); |
54 | break; |
55 | case DFPlayerCardRemoved: |
56 | Serial.println(F("Card Removed!")); |
57 | break; |
58 | case DFPlayerCardOnline: |
59 | Serial.println(F("Card Online!")); |
60 | break; |
61 | case DFPlayerPlayFinished: |
62 | Serial.print(F("Number:")); |
63 | Serial.print(value); |
64 | Serial.println(F(" Play Finished!")); |
65 | break; |
66 | case DFPlayerError: |
67 | Serial.print(F("DFPlayerError:")); |
68 | switch (value) { |
69 | case Busy: |
70 | Serial.println(F("Card not found")); |
71 | break; |
72 | case Sleeping: |
73 | Serial.println(F("Sleeping")); |
74 | break; |
75 | case SerialWrongStack: |
76 | Serial.println(F("Get Wrong Stack")); |
77 | break; |
78 | case CheckSumNotMatch: |
79 | Serial.println(F("Check Sum Not Match")); |
80 | break; |
81 | case FileIndexOut: |
82 | Serial.println(F("File Index Out of Bound")); |
83 | break; |
84 | case FileMismatch: |
85 | Serial.println(F("Cannot Find File")); |
86 | break; |
87 | case Advertise: |
88 | Serial.println(F("In Advertise")); |
89 | break; |
90 | default:
|
91 | break; |
92 | }
|
93 | break; |
94 | default:
|
95 | break; |
96 | }
|
97 | }
|
:
Bearbeitet durch User
Schau mal in diesen Thread - das sind alle möglichen Probleme (und deren Lösung) besprochen worden: Beitrag "Projekt fertiggestellt: MP3 Player für Kinder auf ATTiny-Basis"
vielleicht hilft dir diese Seite. https://wolles-elektronikkiste.de/dfplayer-mini-ansteuerung-mit-dem-arduino Man beachte die Pin-Beschreibungs-Tabelle in der Mitte. Ich habe das Modul auch mal in China bestellt aber leider noch keine Zeit gehabt es zu testen/nutzen.
Schau dir am DFPlayer die Lötstelle an Pin 3 (TX) genau an, ob dort eine leitende Verbindung zu der Lasche des SD-Kartenlesers existiert. Dann kommt aus TX nichts mehr heraus, da das Gehäuse des Lesers auf GND liegt. Der Abstand von Lasche zu Lötstelle ist sehr gering, und das Problem entsteht wenn zuviel Lötzinn verwendet wurde. Dies war bei einem meiner Boards der Fall, und es hat mich einige Zeit gekostet diese Info in den Tiefen des Internets zu finden.
Astro schrieb: > Schau dir am DFPlayer die Lötstelle an Pin 3 (TX) genau an Interessanter Tipp, bei einem der 3 Chips scheint wirklich das Lötzinn das Metall zu berühren. Bei dem aktuellen allerdings scheint alles ok zu sein wie man eventuell den Bildern entnehmen kann. Ein Freund schrieb: > Schau mal in diesen Thread Heilige Makrele, da sind 500 Beiträge in dem Thema o.O Ich guck mal ob ich per Suche was finde. Lesen kann man das alles nicht. Schlaumaier schrieb: > vielleicht hilft dir diese Seite. Die Seite kenne ich schon. Danke trotzdem :) Ich habe auch mal mein Breadboard fotografiert. Ich nutze im Code die Pins RX 10 und TX 11 Ist da irgendein Fehler drin der mir einfach nicht bewusst wird?
Ich habe jetzt auch mal ein ESP32 Modul mit HardwareSerial genommen um zu prüfen ob es am Arduino lag, jedoch ohne Erfolg. Ich kann leider immer noch nicht sagen ob ich die serielle Verbindung richtig hergestellt habe und ob sie wirklich funktioniert aber ich nehme die Pins laut esp32 pinout G17 und G16 welche UART 2 sein sollten. Die LED am DFPlayer leuchtet leicht kontinuierlich .
Thomas S. schrieb: > Ich nutze im Code die > Pins RX 10 und TX 11 Im Bild aber 6 und 7, dass kann ja nicht gehen! Ausserdem hast Du den RX vom Modul nicht verbunden, dass geht auch nicht! Versuch erst mal mit einem Terminal-Programm direkt mit dem Rechner zu senden, z.B. mit HTerm, da kannst Du die HEX-Sequenzen direkt senden und sehen, ob etwas passiert. Mit irgendeinem FT232 Board siehst Du dann auch die LEDs blinken - oder eben nicht... Mit dem Nano dazwischen hast DU zuviele Baustellen, kannst das Problem nicht gut eingrenzen.
Nachtrag: TX geht auf RX, und umgekehrt, das ist Dir schon klar, oder?!
OMFG, ich raste aus. Ich bin nach den Pins gegangen und nicht nach DX oder AX omg. Sprich der 10te Pin ist D6 und der 11te D7. Ich habe 10 und 11 anstatt 6 und 7 genutzt. Funzt jetzt :D Ich hasse mich grade selber für diese Dummheit. Danke fürs Aufklären <3
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.