Hallo zusammen,
ich bin absolut unerfahren im Umgang mit Mikrokontrollern, habe mir aber den Arduino uno und den esp8266 gekauft, da ich mich in diesen Bereich einarbeiten möchte. Nach einigen Stunden Internetrecherche habe ich es geschafft ein funktionierendes Nippelbrett mit dem Arduino zu bauen. Aus Kostengründen will ich aber den esp8266 verbauen.
Nun habe ich aber keinen Sketch gefunden der funktioniert. Auch Chat GPT und meine eigenen Versuche haben mich nicht weiter gebracht.
Ich habe über die Beispiele in Arduino IDE 2.2.1 habe ich es geschafft mit dem esp die Tracks auf der SD-Karte abzuspielen. Die Steuerung mit 6 Knöpfen klappt aber einfach nicht. Diesen Code habe ich verwendet:
#include "SoftwareSerial.h"
#include <DFRobotDFPlayerMini.h>
SoftwareSerial mySoftwareSerial(D3, D1); // RX, TX // Erstellen Sie ein DFPlayer-Objekt
DFRobotDFPlayerMini myDFPlayer;
// Definieren Sie die Pins für die Tasten
const int buttonPins[] = {D2, D4, D5, D6, D7, D8};
const int numButtons = sizeof(buttonPins) / sizeof(int);
// Zustand der Tasten speichern
bool buttonStates[numButtons];
void setup() {
Serial.begin(115200);
delay(10);
// Initialisieren Sie die Tasten-Pins als INPUT
for (int i = 0; i < numButtons; i++) {
pinMode(buttonPins[i], INPUT);
buttonStates[i] = false;
}
// DFPlayer initialisieren
if (!myDFPlayer.begin(Serial)) {
Serial.println("DFPlayer nicht gefunden, bitte überprüfen Sie die Verbindung.");
while(true);
}
Serial.println("DFPlayer Mini bereit.");
// Lautstärke einstellen (0-30)
myDFPlayer.volume(10);
}
void loop() {
// Überprüfen Sie den Zustand jeder Taste
for (int i = 0; i < numButtons; i++) {
bool state = digitalRead(buttonPins[i]);
if (state != buttonStates[i]) {
if (state == HIGH) {
// Wenn die Taste gedrückt wird, spielen Sie den entsprechenden Track ab
myDFPlayer.play(i + 1);
}
buttonStates[i] = state;
}
}
}
Hey,
vielen Dank schon mal für die Antwort.
Also der Player läuft die ganze Zeit (das blaue Licht a Player leuchtet), es kommt aber nur Rauschen. Und manchmal kommt ein Track. aber immer der Gleiche.
Einen Widerstand habe ich nicht eingebaut. Beim Arduino war ein 1kOhm Widerstand verbaut. Ich hatte diese Anleitung nachgebaut:
Dann wird das nix.
Du bekommst keinen sauberen Pegel hin.
Du musst zwischen PIN und einem bezugspotential einen Widerstand einbauen - irgendwas zwischen 1 udn 10K.
Dann kannst Du zwischen dem PIN und dem anderen Potential den Taster einbauen.
R zwischen PIN und GND -> PULLDOWN -> Taster zwischen PIN und +3.3V
R zwischen PIN und 3.3V -> PULLUP -> Taster zwischen PIN und GND
Da Dein Code auf STATE == HIGH prüft, empfiehlt sich die Variante 1 -> pulldown
Wenn Du mit den internen des Arduino konform gehen willst, dann muss es PULLUP sein und dein Code muss auf STATE == LOW testen.
Ah, OK. Ich habe den Player am "vin" Pin angeschlossen. Also auf 5V, da ich mehrfach gelesen hatte, dass der Dfplayer mit 3,3V nicht läuft. Werde das dann aber gleich mal mit 3,3V probieren. Und den 1kOhm Wdst baue ich auch wieder ein.
Danke!
Gibt es denn ein Programm, mit dem ich sauber die Schaltung graphisch darstellen kann? Habe viele Bilder gesehen, die alle vom Stil her gleich waren.
LG und schönen Sonntag!
Hast du denn schon mal getestet, ob der DFPlayer die Titel spielt, wenn du am Player direkt die "Taste" drückst ?
So kannst du auch zwischen den einzelnen Titeln und der Lautstärke wechseln.
Hey,
da bin ich überfragt. Ich sehe keine Taste am Player. Ich habe den DFPlayer mini und leider nicht den DFPayer pro. Habe gerade gegoogelt und gesehen, dass dieser eine Play Taste hat.
LG
Ungeachtet dessen...
Der Widerstand für die Tastenfunktion ist essentiell - für jede Taste.
Dann ist zu entscheiden, ob der Sketch so bleiben kann oder an die R anzupassen ist.
Und wenn das gemacht ist, könnte man eine serielle Ausgabe einbauen, damit man sieht, ob der Tastendruck erkannt wird.
Der muss eigentlich auch mit 3.3V funktionieren - von daher würde ich den erstmal genauso anschliessen...
Guten Morgen,
Ich habe versucht die Tipps umzusetzen. Leider klappt es noch nicht. Ich habe mich bei fritzing angemeldet um mal darzustellen was ich mache. Ich habe die Schaltung mit einem Taster noch einmal aufgebaut. Sie sieht so aus:
#include "SoftwareSerial.h"
#include <DFRobotDFPlayerMini.h>
SoftwareSerial mySoftwareSerial(D3, D1); // RX, TX // Erstellen Sie ein DFPlayer-Objekt
DFRobotDFPlayerMini myDFPlayer;
// Definieren Sie die Pins für die Tasten
const int buttonPins[] = {D2, D4, D5, D6, D7, D8};
const byte numButtons = sizeof(buttonPins) / sizeof(buttonPins[0]);
// Zustand der Tasten speichern
bool buttonStates[numButtons];
void setup() {
Serial.begin(115200);
delay(10);
// Initialisieren Sie die Tasten-Pins als INPUT
for (int i = 0; i < numButtons; i++) {
pinMode(buttonPins[i], INPUT);
buttonStates[i] = false;
}
// DFPlayer initialisieren
if (!myDFPlayer.begin(Serial)) {
Serial.println("DFPlayer nicht gefunden, bitte überprüfen Sie die Verbindung.");
while(true);
}
Serial.println("DFPlayer Mini bereit.");
// Lautstärke einstellen (0-30)
myDFPlayer.volume(10);
}
void loop() {
// Überprüfen Sie den Zustand jeder Taste
for (int i = 0; i < numButtons; i++) {
bool state = digitalRead(buttonPins[i]);
if (state != buttonStates[i]) {
if (state == HIGH) {
// Wenn die Taste gedrückt wird, spielen Sie den entsprechenden Track ab
myDFPlayer.play(i + 1);
}
buttonStates[i] = state;
}
}
}
Kann sein, dass auf dem Bild die Polung am Lautsprecher falsch ist. Die Kabel sind noch nicht verlötet. Ich teste immer aus, wie es passt. Darin liegt also kein Fehler.
Du hast auf dem Schaltbild D1(RX) mit RX und D2 (nichts) mit TX vom MP3 Player verbunden.
In der Software steht aber SoftwareSerial mySoftwareSerial(D3, D1); // RX, TX
Das MP3 Player Modul ist falsch angeschlossen. Die serielle Verbindung ist immer:
Controller RX <----- TX MP3 PLayer
TX -----> RX
Wenn Deine Zeichnung der Realität entsprechen sollte, dann musst Du entweder umstecken oder beim SoftwareSerial D2 als RX Pin definieren. Auf der Verbindung D1 (TX) zum Modul (RX) fehlt der 1K Reihenwiderstand.
D1 (TX) muss auf dem MP3 Modul auf RX (PIN2) gesteckt werden. Entsprechend D3 (oder D2) (RX) auf TX (PIN3). [Edit] Habe mich verguckt.
Bei dem Button muss der Pulldown-Widerstand auf die linke PIN Seite des Buttons (über Kreuz). Sonst ist der Button immer gedrückt.
Dem Taster fehlt das zweite Potential.
Momentan schaltest Du GND via R auf einen PIN.
Wenn Du den Taster loslässt musst Du aber einen Pegelwechsel initieren.
Plan:
+5V
|
R1K
S |
+--w ----+
| i
PIN+--t ----+
c |
h |
GND
Drauf achten, das der taster richtig rum drauf sitzt
Darüber hinaus ist in Deinem Code ein Problem. Wenn Du einmal eine Taste als ausgelöst erkannt hast, wird die nach dem loslassen nicht mehr zurück gesetzt.
So wie es auf der Zeichnung gesteckt ist kann doch aus dem INPUT ein INPUT_PULLUP gemacht werden. Muss der Kollege nur die Logik im Programm rumdrehen.
Das ist die Vorlage.
Wieviele von denen geht als inputePullup?
@gehirnknoten Die Pins die Du nicht belegst müssen zwingend! einen definierten pegel bekommen, der dem NICHT gedrückten Taster entsprechen.
Du kannst - wenn Du meine Schaltung nimmst - jeden nicht benutzten PIN mit 3.3V direkt verbinden.
Nur nicht versuchen da gleichzeitig mit GND irgendwas auszulösen
OK ist das ESP irgendwas special? Dann habe ich nix gesagt .... bin gedanklich bei AVR gewesen...
Ich stecke beim ESP8266 nicht so tief drin aber dein Kommentar hat mich neugierig gemacht.
Wenn ich mir die Doku zum ESP8266 anschaue steht da
Pin numbers in Arduino correspond directly to the ESP8266 GPIO pin numbers. pinMode, digitalRead, and digitalWrite functions work as usual, so to read GPIO2, call digitalRead(2).
Digital pins 0—15 can be INPUT, OUTPUT, or INPUT_PULLUP.
Wenn ich mich danach richte, verstehe ich Deinen Kommentar nicht.
Hey,
Ihr seid echt klasse, vielen Dank für die Rückmeldungen! Ich versuche das umzusetzen.
Noch eine Verständnisfrage zur Pin-Bezeichnung auf dem ESP:
Wenn ich im Code Pinnummer 2 verwende, dann ist das nicht D2, sondern GPIO2, also D4?
Wenn ich D3 in den Code schreibe, dann ist es auch der Pin D3, also GPIO 0?
Oder sehe ich das falsch?
LG und schönen Sonntag!!!
Es ist immer besser, sich die Datenblätter und technische Unterlagen zu den verwendeten Produkten genauestens anzusehen. Dann kannst du sicher auch erkennen, was alles geht.
Am DFPlayer mini brauchst du keinen Arduino, den kannst du auch ohne betreiben.
Aber das wurde dir jetzt ja schon alles geschrieben.