Hallo, ich versuche mich an einem mp3 - Player mit einem Arduino Uno / RC522 RFID / DFPlayer mini und 3 Arcade - Buttons .
Button1: nächster Titel / Lautstärke+ am Player auf
Button2: vorheriger Titel / Lautstärke-
Button3: starte von vorne
Grundsätzlich funktioniert de Player mit RFID und DFPlayer mini - nur bei der Aktivierung der Buttons hab ich ein Problem. Mit dem gegenwärtigen Setup funktioniert Button3.
Button1 hat so keine Funktion und Button2 nur "FF fast forward" wenn lange gedrückt.
#include <SPI.h>
#include <MFRC522.h>
#include <SoftwareSerial.h>
#include <DFPlayerMini_Fast.h>
#define CMD_PLAY_NEXT 0x01
#define CMD_PLAY_PREV 0x02
#define CMD_PLAY_W_INDEX 0x03
#define CMD_SET_VOLUME 0x06
#define CMD_SEL_DEV 0x09
#define CMD_PLAY_W_VOL 0x22
#define CMD_PLAY 0x0D
#define CMD_PAUSE 0x0E
#define CMD_SINGLE_CYCLE 0x19
#define DEV_TF 0x02
#define SINGLE_CYCLE_ON 0x00
#define SINGLE_CYCLE_OFF 0x01
#define ARDUINO_RX 7 // Arduino Pin connected to the TX of the Serial MP3 Player module
#define ARDUINO_TX 6 // Arduino Pin connected to the RX of the Serial MP3 Player module
#define SS_PIN 10 // Arduino Pin connected to the SS of the RFID reader
#define RST_PIN 5 // Arduino Pin connected to the RST of the RFID reader
#define SONG_NUM 30
MFRC522 rfid(SS_PIN, RST_PIN);
SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX);
byte RFID_UIDs[SONG_NUM][30] = {
{ 0x73, 0x9B, 0x5D, 0x95 }, // UPDATE THIS VALUE FROM PREPARATION STEP
{ 0xF3, 0x45, 0x9D, 0x30 }, // UPDATE THIS VALUE FROM PREPARATION STEP
{ 0x23, 0x41, 0x33, 0x36 } // UPDATE THIS VALUE FROM PREPARATION STEP
// ADD MORE IF NEEDED
};
void setup() {
Serial.begin(9600);
mp3.begin(9600);
delay(500); // wait chip initialization is complete
mp3_command(CMD_SEL_DEV, DEV_TF); // select the TF card
delay(200); // wait for 200ms
SPI.begin(); // init SPI bus
rfid.PCD_Init(); // init MFRC522
Serial.println("Tap RFID Tag on reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) { // new tag is available
if (rfid.PICC_ReadCardSerial()) { // NUID has been readed
Serial.print("Tag UID:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
for (int index = 0; index < SONG_NUM; index++) {
if (rfid.uid.uidByte[0] == RFID_UIDs[index][0] && rfid.uid.uidByte[1] == RFID_UIDs[index][1] && rfid.uid.uidByte[2] == RFID_UIDs[index][2] && rfid.uid.uidByte[3] == RFID_UIDs[index][3]) {
Serial.print("Playing song ");
Serial.println(index);
mp3_command(CMD_PLAY_W_INDEX, index); // Play mp3
}
}
rfid.PICC_HaltA(); // halt PICC
rfid.PCD_StopCrypto1(); // stop encryption on PCD
}
}
}
void mp3_command(int8_t command, int16_t dat) {
int8_t frame[8] = { 0 };
frame[0] = 0x7e; // starting byte
frame[1] = 0xff; // version
frame[2] = 0x06; // the number of bytes of the command without starting byte and ending byte
frame[3] = command; //
frame[4] = 0x00; // 0x00 = no feedback, 0x01 = feedback
frame[5] = (int8_t)(dat >> 8); // data high byte
frame[6] = (int8_t)(dat); // data low byte
frame[7] = 0xef; // ending byte
for (uint8_t i = 0; i < 8; i++) {
mp3.write(frame[i]);
}
}
Die Bibliothek #include <DFPlayerMini_Fast.h> würde die richtigen Funktionen beinhalten, damit die Buttons korrekt funktionieren - diese kann ich aber in meinen Code nicht funktionierend einbinden
Bitte um Eure Unterstützung und Verständnis für mein "Problem" - bin blutiger Anfänger und versuche Codes anzupassen (sehr zeitintensiv).
Danke, Helmut
Soweit mir bekannt ist, werden die "externen" Buttons nicht durch die Library angesprochen. Das macht auch keine Sinn, da du mit der Library ja den Player komfortabel per serieller Schnittstelle (UART) ansprechen kannst.
An die Buttons kannst du aber zusätzlich Tasten zur manuellen Steuerung anschließen.
Der DFPlayerMini kann autark (I/O-Mode) betrieben werden, indem VCC, GND, der Lautsprecher an SPKR+/SPKR- und ein Überbrückungskabel von GND angeschlossen werden. Ein kurzes Drücken des Überbrückungskabels an IO_2 spielt die "nächste Datei" ab, ein kurzes Drücken des Überbrückungskabels an IO_1 spielt die "vorherige Datei" ab. Ein langer Druck auf das Überbrückungskabel an IO_2 erhöht die Lautstärke. Ein langer Druck auf das Überbrückungskabel an IO_1 verringert die Lautstärke. Vielleicht war das "schnelle Vorspulen" auf das Tastenabprallen zurückzuführen? Sie können die Tasten entfernen und DIO-Pins mit HIGH und LOW für unterschiedliche Zeiträume anwenden, um langes und kurzes Drücken zu simulieren.
Hallo - ist tatsächlich von der Hardware her an den Tonuino angelehnt - aber mit dem Code und den Setup - Dateien komm ich leider noch weniger klar .....
Wenn ich den DFPlayer mini mit folgendem Code verwende, dann funktionieren die Pins auch wie sie sollten. Nur bekomme ich diesen Code in meinen Code nicht eingebunden - hab das schon stundenlang versucht - vielleicht hat jemand eine Lösung?
Dann benutzt du auch nicht die Pins direkt, sondern die serielle Schnittstelle.
Das sind schon unterschiede.
Wie schon geschrieben, die Pins kannst du über die Software nicht direkt ansteuern.
Du könntest aber eine Krücke basteln und per Code mittels Transistoren diese Pins ansteuern.
Das wäre aber Sinnfrei, weil über die serielle deutlich besser.
Es gibt ein prima Beispiel auf der Seite von DF-Roberts
Da wird JEDE Funktion mit den Player 1 x ausgeführt. Via Serial-Befehl.
Das sollst du dir runterladen und analysieren.
Alternativ würde ich zu einen ESP-32 raten, mit SD-Kartenmodul und 1-2 kleinen Audiochips. Das Ergebnis ist besser im Ton.
Das sind die AUDIO-Chips die du brauchst bei einen ESP32 DEV4.
Ich entwickele gerade das selbe und bin mit den Nano + den DF-Mini schnell an die Grenzen gekommen.
Deshalb zum ESP32-DEV4 gewechselt und nun hat das Teil einen Touch-Screen und das mit den RFID (rotes Modul) funktioniert prima. Das blaue ist bei mir Mist.
Da der ESP32 Wlan fähig ist, baue ich gerade noch das Internet-Radio ein. So dann man eine Auswahl hat.
Es gibt aber im Internet eine Comunity spezial zu den TonUINO. Einfach den Begriff googlen.
Habe mir das angesehen u wie geschrieben der klang ist schlimmer als erste MPG3 Player der ESP32 hat nur ein 8 Bit DAC.
"ESP32 has two 8-bit DAC (digital to analog converter) channels respectively connected to GPIO25 (Channel 1) and GPIO26 (Channel 2). Each DAC channel can convert the digital value 0~255"
Jo. Direkt Output ist nicht so der Burner. Da magst du recht haben, habe ich nie getestet.
Ich habe mir 2 der Module (s.o.) gekauft und damit ist der Klang im Bereich der 100 Euro Geräte die man auf den Markt kaufen kann. Und zum Decodieren benutze ich eine Audio-Libs. (ESP32-audioI2S-master)
Was für ein Klang erwartest du von einen 5 Euro Player (DF-Player-Mini). DEN schlägt meine Konstruktion um Längen.
Datenblatt vom Player gelesen, verstanden?
Genau geht es um die abtastratte bei komprimirieren Analog zu MPG3. So wie weiß kan der auch WAV abspielen somit im schlimsten fall viel besser als Musik aus dem Inet, was wurde durch Dynamikkompresser gejagt, machen fast alle sender um geld sparen, die müssen den Sender bezahlen je größer die bandbreite desto teurer.
Glaube nicht das die sender machen sich den uwand und machen extra zwiei Streams einen für sender zweiten für inet
Aber ALLE Internet-Radios die ich kenne haben mind. 128 kbs, einige sogar 224 kbs.
Und nochmal . Ich habe die Schaltung (s.o.) bereits getestet. Das Ergebnis ist einwandfrei und zu 100% mit den eines gekauften Radio /einen TOP-PC zu vergleichen.
Opfere die 10 Euro (aus DE) und kauf dir das Platinchen. Dann wirst du es selbst merken.