Audio Adventskalender DFPlayer_mini

Hallo zusammen,

ich bin recht neu in der Welt der kleinen Arduinos und auch der grossen, ich habe bei Heise den Artikel gefunden "Statt Schokolade: Audio Adventskalender"

leider ist das Modul welches in dem Artikel aufgeführt ist nicht rechtzeitig lieferbar, nun gab es den Beitrag, der DFPlayer_mini wäre eine alternative, also diesen bestellt einen Nano dabei, und das genannte RTC, für die Advents Spielerei ausreichend.

Mein Problem besteht nun darin das ich a. keine Serielle Infos sauber ausgelesen bekomme, und auch keinen Mux aus dem Modul.

Wenn ich das RTC Manuel auslese, und abfrage funktioniert das, und ich bekomme Datum und Uhrzeit Quasie von meinem Rechner angezeigt. Die Abfrage im Sketch hat mir bereits die Info ausgegeben das der Tages Track gespielt wird, allerdings ohne das vom Modul etwas ausgegeben wird.

der Original Sketch sieht wie folgt aus:

#include <JQ6500_Serial.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include "RTClib.h"

JQ6500_Serial mp3(2,3); //create an mp3 object
RTC_DS1307 rtc;         //create an rtc object

void setup() {
 Serial.begin(57600);
 Serial.println("Audio Advent Calendar by Mischka");
 Serial.println("----");
 
 pinMode(4, INPUT);
 pinMode(13, OUTPUT);

// setup the mp3 module 
 mp3.begin(9600);
 mp3.reset();
 delay(500);
 mp3.setVolume(22);
 mp3.setLoopMode(MP3_LOOP_NONE);

// setup rtc
 Wire.begin();
 rtc.begin();
 rtc.adjust(DateTime(__DATE__, __TIME__));
}

void loop() {
 
 DateTime now = rtc.now();
 
 if(mp3.getStatus() != MP3_STATUS_PLAYING) {
   if (now.day() < 25){
     if (now.month() == 12) {

       Serial.print("playing track Number: ");
       Serial.println(now.day());

       mp3.playFileNumberInFolderNumber(0, now.day());      
     }
     else{
       Serial.println("not an advent day");
       delay(100);
       exit(0);
     }
   }
 }
exit(0);  
}

nun meine abgewandelte Version, welche mich zum erzweifeln bringt sieht wie folgt aus:

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

SoftwareSerial mySoftwareSerial(2,3); // RX, TX
DFRobotDFPlayerMini mp3;
unsigned int numFiles; // Total number of files on media (autodetected in setup())
byte mediaType;        // Media type (autodetected in setup())
RTC_DS1307 rtc;         //create an rtc object

void setup() {
 Serial.begin(9600);
 Serial.println("Audio Advent Calendar");
 delay(500);
 
 pinMode(A4, INPUT);
 pinMode(A5, OUTPUT);
 
 mySoftwareSerial.begin(9600);
 Serial.begin(9600);
 mp3.reset();
 delay(500);
 mp3.volume(20);
 mp3.disableLoop();
 delay(500);
 Wire.begin();
 rtc.begin();
 rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop() {
 
 DateTime now = rtc.now();
 
 // if(mySoftwareSerial.read() != MP3_STATUS_PLAYING) {
   if (now.day() < 25){
     if (now.month() == 11) {

       Serial.print("playing track Number: ");
       Serial.println(now.day());

       mp3.play(now.day());             //, now.day());      
     }
     else{
       Serial.println("not an advent day");
       delay(100);
       exit(0);
     }
   }
 }
//end(0);  
//}

der Monat steht auf 11 zum Testen, aber wie gesagt ich bekomme Seriell weder die Info das es Tag X ist, noch bekomme ich einen mux aus dem Player entlockt, die Verdrahtung ist OK, wenn ich den Test Sketsch vom Playe hochlade, spielt dieser Track für Track ab.

vllt kann mir jemand einen Tip geben, dafür wäre ich sehr Dankbar.

Schönen Abend noch allseits.

Nimm mal nur SoftwareSerial ohne die Library "JQ6500".
Die JQ6500 kenne ich nicht, wird aber nicht gebraucht.

Danke für die Antwort, aber es geht mir um den zweiten Teil, mit dem DFPayer_Mini, der JQ6500 ist nicht im Einsatz, da dieser nur aus China, oder Hong Kong zu Bestellen ist, und die Lieferzeit somit bis mitte Dezember, oder gar Ende Januar fällt.

deswegen habe ich beide Sketsches rein kopiert, er hat sie aber am Stück geschrieben, daher ist der für mich relevante leider hinter den Original Sketsch gewandert.

Danke dennoch für die Antwort

Ach so.....warum sagst du das nicht gleich.

Was willst du denn von mp3 mit "now.day()" hören ?
Da musst du einen Titel aufrufen, den du in auf der SD-Karte hast.

Richtig, wie der Titel schon sagt, es soll ein Adventskalender werden der an den 24 Tagen je einen Audio Track wiedergibt. Meine Nichte ist ein absoluter Hörspiel Junky, daher fand ich den Artikel so interessant, und habe mich an die Umsetzung begeben, die Technische Seite ist auch soweit erledigt, nur mit dem Sketsch hut es halt hinten und vorne nicht hin.

gedacht ist das ganze so, das der Aktuelle Tag abgefragt wird, z.b. 6.12. vom RTC, dann soll der Player Track 006 von der SD Karte wieder geben, wenn ich den Sketsch zum testen des DFP Laufen lasse, und dort Track 006 anwähle, wird dieser auch problemlos wieder gegeben.

Allerdings nicht im kompletten Adventskalender Sketsch, und da scheitern meine leider sehr minimalen Arduino kenntnisse am Verständnis, vllt denke ich auch einfach zu kompliziert, allerdings ist ja leider auch nicht mehr viel Zeit um es bis zum 1.12. fertig zu bekommen.

Deswegen musst du auch die Titel entsprechend wählen.
Mir ist aktuell nicht bekannt, das du den per Variable übergeben kannst.
Also immer nur "0012" für "zwölf oder so....

Also im Original funktioniert das wohl sehr gut, da ich leider das passende MP3 Modul, den JQ6500-28P nicht rechtzeitig bekomme, habe ich mich für die sofort verfügbare Variante des DFP Mini entschieden, dazu steht in den Kommentaren muss nur ein wenig vom Sketch abgeändert werden, allerdings, bleibts bei mir leider komplett Stumm, und auch die Serielle Ausgabe tut nicht was sie soll, der Original Sketch, gibt mir den erkannten Tag an allerdings auch nur im Monitor, ob er den Richtgen Track anwählen würde kann ich mangels Modul nicht testen.

Das es mit dem originalen funktioniert, hilft dir jetzt nicht weiter.

Was zeigt denn der serielle Monitor an ?

Und was soll das "exit(0)" ?

Ich habe eben noch mal die Library und meinen Sketch angesehen, also das mit dem Datum aus einer Variablen sollte funktionieren.

Wenn du auch Probleme hast, das richtige auf dem seriellen Monitor anzusehen, muss es an deiner RTC liegen. Hier kann ich aktuell nichts sagen, da ich deine Library dazu nicht kenne und die DS1307 nicht die beste Wahl ist. Oder du hast die Geschwindigkeit nicht richtig eingestellt.

Vergleiche doch mal deinen Sketch (RTC) mit dem Beispiel-Sketch der RTC.

Auch musst du dein Setup aufräumen.

Das sollte so reichen:

void setup() {
 Serial.begin(9600);
 Serial.println("Audio Advent Calendar");
 delay(500);
  
 mySoftwareSerial.begin(9600);
 mp3.reset();
 delay(500);
 mp3.volume(20);
 mp3.disableLoop();
 delay(500);
 Wire.begin();
 rtc.begin();
}

Und das

mp3.outputDevice(DFPLAYER_DEVICE_SD);

vermisse ich.

Hallo nochmal,

war gestern leider ein wenig Stressig der Tag, und bin nun auch schon wieder im Büro.

Der Sketsch ist so wie vom Original, soweit abgeändert, soweit es mir selbst logisch erschien, anhand des Beispiels "PlaybyTrack"

Die Befehlszeilen sind soweit eingepflegt, meinen Seriellen Monitor habe ich auch von der Geschwindigkeit her angepasst, z.t. bekomme ich nur die Ausgabe "Aud" oder "Audio", dann wiederum "Audio Advents Kalender"

Ich hatte sogar schon die zusätzliche Ausgabe "Playing Track XX", allerdings ohne eine Akustische Ausgabe zu bekommen.

Wenn ich wie gesagt den PlaybyTrack Beispiel einen Beliebigen erstellten Track der 24 Stück anwähle, werden diese auch ohne Probleme abgespielt, selbst die Kurzzeit Schleife läuft ohne jegliche Probleme.

Er skipt durch die Tracks bis zum Ende.

Das Exit am Ende ist auch aus dem Original übernommen, Hintergrund des Projektes ist es ja, das in der Adventszeit, einmal am Tag ein Kästchen geöffnet wird, und dieses dann einen von 24 Tracks abspielen soll.

Die Umsetzung des Kästchens ist das kleinste übel und Problem gewesen, nur das der Original genannte MP3 Player leider noch auf dem Versandweg hängt, und das halt bis ende Dezember dauern kann bis dieser eintrifft, daher bin ich halt auf den DFPlayer Mini gestoßen, welcher im Prinzip das selbe kann, nur mit weniger Abmessung, und quasi 1 Tag später bei mir war.

Ich habe bisher halt nicht wirklich viel mit den Arduninos zu tuen gehabt, bin aber für neues auch offen. die angefügte Zeile, mit der Output Device hab ich heute morgen noch eingefügt, aber wird von der IDE angemeckert.

Wegen meiner wenigen Erfahrung mit den Arduinos bin ich ja hier aufgeschlagen, und hoffe das mir jemand weiter helfen kann.

Die Player Lib heisst "DFRobotDFPlayerMini-1.0.3"
Die RTC Lib ist die "RTClib" welche eine DS1307.h enthält, das Time Modul wird wenn ich DateCalc ausführe auch erkannt, und er gibt mir mit anderen Beispielen auch die Korrekte Uhrzeit, mit 1-2 Minuten Abweichungen aus, daher finde ich den irgendwo eingebauten fehler nicht, weshalb es in Kombination aller Komponenten nicht funktioniert.

MfG

Dark5:
.....
Die Befehlszeilen sind soweit eingepflegt, meinen Seriellen Monitor habe ich auch von der Geschwindigkeit her angepasst, z.t. bekomme ich nur die Ausgabe "Aud" oder "Audio", dann wiederum "Audio Advents Kalender"
......

Dann stimmt etwas an deinem Aufbau nicht.
Hast du einen Widerstand 1 kOhm in der TX>RX-Leitung ?
Der DFPlayer arbeitet intern nur mit 3,3 Volt.

Und teste doch die Ausgabe einfach mal mit einer Zahl, statt mit der Variablen.

Ja der 1K ist drin, und mit dem Test Sketch des Players funktioniert die Audio Ausgabe, daher ja mein auf dem Schlauch stehen.

Die Ansteuerung, Pin Benennung usw sollte funktionieren, mit dem festen Track muss ich heute Abend ausprobieren, aber das würde mich noch nicht weiter bringen, da ich ja die Variable Track anwahl via Datums Abgleich benötige.

Dark5:
Ja der 1K ist drin, und mit dem Test Sketch des Players funktioniert die Audio Ausgabe, daher ja mein auf dem Schlauch stehen.

Die Ansteuerung, Pin Benennung usw sollte funktionieren, mit dem festen Track muss ich heute Abend ausprobieren, aber das würde mich noch nicht weiter bringen, da ich ja die Variable Track anwahl via Datums Abgleich benötige.

Wenn es mit dem festen Track funktioniert, was ich vermute, liegt es an der Formatierung des Variablen-Inhaltes. Den musst du dann zuvor so wandeln, dass dein Player das erkennen kann.
Dazu musst du erst genau sehen, wie ein Wert deiner RTC ausgegeben wird.

Also laut Seriellem Monitor gibt er aus, Audio Advents Kalender ---- Playing Track Numer XX, so wie es sein soll, aber s gibt aktuell nur Stille, da er ja die 16 als Track Nummer auflistet, hat er ja mit dem Befehl now.day die korrekte Zahl für den benötigten Track.

Dark5:
Also laut Seriellem Monitor gibt er aus, Audio Advents Kalender ---- Playing Track Numer XX, so wie es sein soll, aber s gibt aktuell nur Stille, da er ja die 16 als Track Nummer auflistet, hat er ja mit dem Befehl now.day die korrekte Zahl für den benötigten Track.

Du kannst aber nicht erkennen, ob in der Ausgabe noch Steuerzeichen vorhanden sind, mit denen der DFPlayer nix anfangen kann. Daher ist nichts zu hören und du must den Test mit der "harten" Codierung machen.
Danach bleibt nur eine Wandlung des Formates.

Also ich hab nun alles noch X mal überprüft und getestet, allerdings bleibt es bei Stille.

Er gibt ja an das der Track 1/17 gespielt wird, und das mit der Variablen day.now.

Allerdings spielt der Player nichts ab.

Ich blicks einfach nicht wieso er das nicht macht. ich habs auch versucht um zu setzen eine wenn now day =XX dann mp3.play(XX)

setzt er auch nicht um, ich bin aktuel mit meinem Latein am Ende, ich muss mich da irgendwann einmal ausführlicher mit beschäftigen, dafür sind meine Arduino und programier kenntnisse zu gering, und zu sehr eingerostet.

Danke dennoch für den versuch der Hilfe, aber ich bin an dem Punkt das ich leider aufgebe, da ich leider zu wenig Zeit dafür habe das gesamt Projekt fertig zu bekommen, da es am Mittwoch in den Versand gehen müsste, um rechtzeitig an zu kommen.

Danke und schönen Abend noch.

Verstehen kann ich das nicht.
Du solltest uns dann den aktuellen Sketch sowie ein Foto deines Aufbaus posten.
Irgend einen Fehler musst du da machen.

Hallo,

Also der letzte zurecht gebaute Sketch führt zu einem Knattern im Lautsprecher für ca. 5-10 Sekunden, und dann verstummt die ganze Sache.

Die Seirelle Ausgabe ist Korrekt, aber wie gesagt immer noch Stumm, Habe mittlerweile auch versucht die Test MP3 um zu benennen, da die Datums Ausgabe bei z.b. 1.XX. 1 ist, und ich befürchtet habe das er ggf. mit 001 nicht zurecht kommt. Das war aber auch nicht das Problem.

Hier der sketch:

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

SoftwareSerial mySoftwareSerial(2, 3); // RX, TX
DFRobotDFPlayerMini mp3;
unsigned int numFiles; // Total number of files on media (autodetected in setup())
byte mediaType;        // Media type (autodetected in setup())
RTC_DS1307 rtc;         //create an rtc object

void setup() {
  Serial.begin(9600);
  Serial.println("Audio Advent Calendar");
  delay(500);

  pinMode(4, INPUT);
  pinMode(13, OUTPUT);

  mySoftwareSerial.begin(9600);
  Serial.begin(9600);
  mp3.begin(mySoftwareSerial);
  mp3.reset();
  delay(500);
  Wire.begin();
  rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  mp3.volume(20);
  //mp3.disableLoop();
  //mp3.EQ(DFPLAYER_EQ_NORMAL);
}

void loop() {

  DateTime now = rtc.now();

  //if (mySoftwareSerial.status() != MP3_STATUS_PLAYING) {
    if (now.day() < 25) {
      if (now.month() == 11) {

        Serial.print("playing track Number: ");
        Serial.println(now.day());

        mp3.outputDevice(DFPLAYER_DEVICE_SD);
        mp3.playMp3Folder(now.day());             //, now.day());
      }
      else {
        Serial.println("not an advent day");
        delay(100);
        exit(0);
      }
    }
      exit(0);

  }
//  }

in der RX Leitung habe ich den 1KOhm verbaut, und natürlich den DFPLayer_Mini in Gebrauch nicht den JQ6500, Verdrahtung ansonsten identisch, also gleichen Anschlüsse in Verwendung

hier das ganze auf dem Steckboard,

im test wird die Uhrzeit Korrekt angegeben, und auch der Player gibt fehlerfrei seinen angesteuerten Track wieder, nur in der Kombination mit der Datumsabfrage/Vergleich spalte passiert nichts.
Die Monatsabfrage ist übrigens wegen der Testerei auf 11 gesetzt, würde wenns funktioniert hätte aber auf 12 geändert.

Hi

Wie ruft der MP3-Sketch den Titel 11 auf?
Kannst Du mit genau diesem Aufruf, also ohne Variable, den Titel in Deinem Sketch aufrufen?
ja -> irgend etwas stimmt mit der Variable nicht
nein -> irgend etwas stimmt mit der Initialisierung des MP3-Zeug nicht

MfG