DFPlayer verschiedene Versionen

Es gibt auch eine Arduino-Library für den BY8001.

Klingt vielversprechend!
Wer wagt einen Versuch? :man_shrugging:t3:

Edit: bei ca. 3 Euro wäre es auf jeden Fall ein Versuch wert.
Die Frage wäre aber z.B. zu klären, wann speichert man den Fortschritt innerhalb des Tracks auf den Eprom? Nach Stop/Pause?
Haben wir noch genug Platz auf dem Eprom?

1 „Gefällt mir“

Wenn ich das Datenblatt des BY8001 richtig gelesen hab, kann man jedoch nicht zu einer speziellen Stelle im Track springen, lediglich „ein bisschen“ vor- bzw. zurückspulen. Wenn dieses „bisschen“ immer gleich ist, könnte man natürlich näherungsweise an die gewünschte Stelle springen, aber das wahrscheinlich nicht zuverlässig.

Ja das habe ich auch so verdtanden. Man konnte sich nur durch spulen und darauf folgendes abfragen der position ran tasten

Ob es Sinn macht, die Spulen-Funktion für das Speichern und Anspringen einer bestimmten gespeicherten Position zu verwenden, hängt in erster Linie davon ab, wie schnell das Spulen ist. Bei CD-Playern ist glaube ich die zweifache bis fünffache Geschwindigkeit üblich. Das könnte hier ähnlich sein.

Speichern sollte man nicht zu oft. Aber bei Stop/Pause und (wenn vorhanden) bei Initiierung der Abschaltfunktion dürfte ausreichend sein. Ansonsten könnte man auch über einen Timer jede Sekunde die Position speichern.

Es ist aber möglich, dass die Spulen-Funktion nicht um einen festen Wert vorspult, sondern das Vor- oder Zurückspulen aktiviert, welches dann solange läuft, bis ein Stop- oder Play-Signal kommt, oder bis der Track zuende ist. Dann könnte man (bei bekannter Spul-Geschwindigkeit) direkt zu jeder beliebigen Stelle im Track hinspulen.

Auch ohne die Möglichkeit, bestimmte Track-Positionen anzuspringen, habe ich eine Spulen-Funktion schon öfters vermisst. Man könnte das bei der 5-Tasten-Konfiguration sehr schön auf die Long-Press-Option der Previous- und Next-Tasten legen.

Hi,

ich habe inzwischen beide BY-Module getestet. Den
BY8001-16p ( mit integriertem Speicher mit Chinesischer Folklore :wink: incl. und mini USB Buchse )und den
BY8301-16p ( Mit Micro SD und Möglichkeit eine USB Buchse anzuschließen)

Die Player sind bis auf untereinander unterschiedliche Pin Belegung! Funktions-technisch identisch.
Die Pinbelegung ist auch wie schon von Paulaner erwähnt zum DFPlayer Mini ebenfalls unterschiedlich.

Ich dachte ich könnte beim BY8301 einen USB (Stummel)Stick mit 32GB per USB auf mini USB Adapter direkt anschließen.
Aber bei beiden Modulen ist es so das man die 5V selber nochmal zusätzlich speisen muss.
Daher habe ich den BY8001 genommen und eine günstige USB Buchse mit PCB genommen. Das war einfacher zu löten und für mich etwas übersichtlicher.

Mit den beiden Librarys von

(rOndl
und
NachtRave

habe ich die Module mit Spielen vom USB Stick auch zum Laufen gebracht.

Die Implementierung in den Code von Thorsten stellt sich für mich als schwierig dar, aber ich bleib mal dran.

Die eine Schwierigkeit

besteht darin das das BY Modul zwar Advertisments unterstützt ( heisst hier Spot play insertion function bzw Playback insertion from specific folder),
aber dafür keinen vordefinierten Ordner hat und es auch keinen vordefinierten Ordner gibt der Mp3 heissen muss.

Wenn man dafür einen Ordner (0-99) angibt kann man nur max 257 titel spielen. ( ja von 000-256)
Wenn man einfach eine Datei spielen will geht das nach Dateisystem Index 1-65535 (finde ich persönlich recht ungut)

Beim normalen Folder Play (in NachtRaves Lib >> playFolderFileIndex) Folder(0-99) Files(1-255)

Das heisst für die Ordner die Bisher advert und Mp3 heissen für den DFPlayer und von Thorsten bis 999 benutz werden muss man alternative Folder anlegen die beim BY nur 257 files beinhalten dürfen und dann dementsprechend die Soundfiles umbenennen und den Code anpassen damit die richtigen Ansagen kommen. Dann könnte es hinhauen.
Das hat bei mir bisher nur so halb geklappt. Aber da habe ich bestimmt noch ein paar Denkfehler drin und hab den Code von Thorsten im Detail vielleicht falsch interpretiert. Das Gerüst vom Code ist mir recht klar.

Zweites Problem

ist das ich den MP3Notify Bereich vom DFPlayer lib bisher auskommentieren musste weil es den in der gleichen Form für den BY-8001 nicht gibt, weil der etwas andere Codes zurückschmeisst und auch nicht so vielseitig.
Könnte evtl Probleme machen weil bei einer funktion ja nach dem Beendeten Track der nächste gespielt wird.

static void OnPlayFinished(uint16_t track) {
	Serial.print("Track beendet");
	Serial.println(track);
	delay(100);
	nextTrack(track);
}

Drittes Problem

die Funktion
mp3.getFolderTrackCount(myCard.folder);

bzw die Zeile

numTracksInFolder = mp3.getFolderTrackCount(myCard.folder);

funktioniert mit dem BY8001 so nicht da zwar eine ähnliche Funktion existiert, diese aber keine Argumente für einen angeforderten Ordner erlaubt, sondern nur den den Ihnalt des derzeitigen zählt.

daher kann myCard.folder aus dem myCard struct nicht eingesetzt werden.

Ich versuche da noch weiterzukommen, wäre aber um Tipps froh oder den vielleicht ein oder Anderen, der sich auch dran versucht.

Ich würde nämlich gerne die Spulen funktion des BY8001 nutzen da ich schon ein Gyro/accelerometer (MPU6050) dran hängen habe der Tapping rechts oder links erkennt für skippen und eben auch kippen für Spulen. Dann wäre da der gleiche Funktionsumfang wie bei der Box mit dem Löwen drin.

Grüße

Marc

Sollte

3 „Gefällt mir“

Ich bin noch immer am Überlegen, ob ich mir einen BY8001 hole, kann also selbst nichts testen. Kann man gür das Abfragen der Trackanzahl nicht kurz einen Track (bei minimaler Lautstärke) anspielen, nach vielleicht 100ms stoppen und dann die Anzahl der Tracks im nun aktuellen Ordner abfragen?

Und konntest Du die Funktionen zur Dateinamenabfrage, Tracklänge und aktueller Trackposition schon testen?

Hi Peer,

stimmt sowas hatte ich mir auch schon überlegt. Kurz Track anspielen bei 0 als Workaround.

Die Funktionen die Du ansprichst hatten mich bisher für meine belange noch nicht interessiert, aber gerne probier ich es mal. Melde mich.

Grüße

Marc

Also zum Thema Dateianamenabfrage, Tracklänge und Trackposition beim BY8001.

Das funktioniert soweit. Tracklänge und Trackposirion wird mit den NachtRave Library funktionen in ganzen Sekunden ausgegeben. Als Hex werte.

Trackname: Da wird aus 002Aramsamsam.mp3 ----> 002ARA~1.MP3

Im Datasheet nennen sie das (provides only FAT32 stored short file names (8 characters) which appear as abbreviated track title taken from FAT32 long file name (e.g., if naming with more than 8 characters)

Soweit so gut…

Grüße

Marc

1 „Gefällt mir“

Das ist super! Mehr als 8 Zeichen brauche ich nicht. Nur schade, dass es die MP3- und ADVERT-Ordner nicht gibt.

Das mit den 257 Dateien je Ordner kann übrigens nicht stimmen, da der Befehl ein Byte als Dateinummer an den BY8001 schickt. Also sind es höchstens 256 (0-255), wohlmöglich aber eben „nur“ 255 (1-255) Dateien je Ordner, wie beim DFPlayer. So oder so muss man bis zu 4 Ordner für die sonst in MP3 und Advert liegenden Dateien opfern. Das sollte ja gut machbar sein.

Cool! Danke für die Tests.
Hast Du schon ausprobiert wie schnell das Spulen funktioniert? Also wie schnell man wieder an eine gemerkte Stelle im Track spulen könnte?

@Mcschippenhorst:
Hast Du die Spot Play Insertion-Funktion ausprobiert? Im Datenblatt steht, dass die bei TF-Cards (SD-Karten) nicht geht…

Hi Peer,

ja das geht. Hab ja geschrieben das ich die per externem USB Port bediene und das funktioniert. Auch mit Spot insertion.

Was mir noch einfällt ist: Dadurch das man den BY8001 Player Dual betreiben kann, also mit TF und USB im wechsel könnte man ja die spot insertions auf den USB stick legen, dann sind sie sauber getrennt. Theoretisch könnte man dann auch nach Index spielen. Die Hör und Musikinhalte liegen dann auf der TF card. Es gibt nämlich die Funktion switch Device. Ob das klappt ist die andere Frage.

Aber mich würde mal interessieren wie ich nun den BY8001 samt Lib ordentlich in den bestehenden Code eingepflegt bekomme. Ich komme da nicht so recht weiter. Vielleicht kann sich zusätzlich jemand der Sache annehmen und auf mit dem von mir herausgefundenen aufbauen.
Ich probiere derweil weiter

Grüße

Marc

Hallo Marc,

dass Du den USB-Anschluss statt einer SD-Karte verwendest, hatte ich überlesen. Dann steht Dein Test ja nicht im Widerspruch zum Datenblatt.

Grundsätzlich den USB-Anschluss zu verwenden, ist dann natürlich eine naheliegende Option.

Wenn man wie von Dir beides gleichzeitig nutzen will, müsste zuerst geprüft werden, ob die Insertion-Funktion auch funktioniert, wenn gerade etwas von der SD-Karte abgespielt wird.

An welcher Stelle hakt es denn bei der Umsetzung?

Und müssen die Advert-Dateien nun eigentlich durchgehend ohne Lücken nummeriert werden?

Hi,

ja das mit dem gleichzeitig nutzen ist nur eine Theorie. Hab ich noch nicht probiert.

ich habe die ganzen Pieps stimmern ansagen in den Ordner 97 geschrieben und Ihnen andere Namen gegeben die 255 nicht überschreiten. Das dann im Code umgeschrieben. Das z.B. beim Karte resetten bzw neu konfigurieren die richtigen ansagen kommen. Die im Original haben ja auch lücken.
So sieht das derzeit aus:

benennungen

die Nummeransagen von advert habe ich in ordner 98 und die Nummeransagen von Mp3 habe ich in den Ordner 99 geschrieben.

Momentan komme ich so weit das das Karten neu konfigurieren über langen Pausetastendruck getartet wird. es kommt auch die von mir umbenannte Ansage 0001_300_new_tag.mp3

dann möchte ich über den up button den Ordner wählen. Da sagt die gepitchte Stimme dann auch eins, aber spielt keine Vorschau und zu wei oder drei komme ich gar nicht. auch die Pause Taste tut nichts mehr. Irgendwo kreiselt der da im code oder hängt sich auf.

Ich beschäftige mich heute Abend nochmal damit.

Die Geschichte mit dem Track in Folder Count habe ich über den Umweg gelöst eine Dartei bei Lautstärke null abzuspielen. Allerdings sind das recht viele kommandos und es gibt eine spürbare Verzögerung.

Grüße

Marc

Der DFPlayer beherrscht ja nur im MP3- und im Advert-Ordner Lücken in der Nummerierung, nicht in den anderen Ordnern. Ich vermute, dass der BY8001 gar keine Lücken verträgt, da jeder Ordner ein ganz normaler Ordner mit 255 Einträgen ist. Das könnte auch genau das von Dir beobachtete Fehlverhalten erklären.

Gibt es einen Grund, die Nummernansagen beim BY8001 zu unterscheiden? Da dürfte doch ein Ordner reichen. So wie ich es verstehe sind das beim DFPlayer nur deshalb zwei Ordner, weil es da eben nur einen für Advertisements geeigneten Ordner gibt.

Ok hab zumindest den Grund gefunden warum es nicht weiterging. Er war im do while loop festgehangen weil die Busypin Logic beim BY8001 umgekehrt ist. Hab ein Serial.print dort eingefügt ///Schippie und das feuerte dann ununterbrochen.

Hier am Beispiel UpButton:

} else if (upButton.wasReleased()) {
		
		if (!ignoreUpButton) {
			returnValue = min(returnValue + 1, numberOfOptions);
			mp3.playFolderFileIndex(98,messageOffset + returnValue);
			delay(1000);
			if (preview) {
				do {
					delay(10);
					Serial.println("upButton"); ///// SCHIPPIE
				} while (isPlaying());
				if (previewFromFolder == 0)
				mp3.playFolderFileIndex(returnValue, 1);
				else
				mp3.playFolderFileIndex(previewFromFolder, returnValue);
			}
		} else
		ignoreUpButton = false;
	}

Hab dann hier am Anfang des Codes das NOT ! beim digitalRead entfernt um das umzudrehen und jetzt geht es schonmal weiter.

bool isPlaying() { return digitalRead(busyPin); }

und Unterbrechungen sind scheinbar auch kein Problem, weil die nächste Ansage mit der Nummer 10 OK Karte verknüpft kam.

Ja stimmt ein Ordner müsste reichen. Hab das nur so kopiert wie es war als ich es mit dem DFPlayer alles am Laufen hatte. Vielleicht habe ich da was falsch verstanden. Ich hatte mich nämlich auch gewundert warum in Advert und in MP3 dieselben Ansagen liegen…

Der BY8001 scheint genau das zu können, was ich suche: sekundengenaues Spulen innerhalb eines Tracks (am Ende des Tracks soll er dann am Ende des vorigen (rückwärts spulen) bzw am Anfang des nächsten Tracks (vorwärts spulen) weitermachen. Wie ich in Möglichkeiten des DFPlayerMini beschieben habe, möchte ich mit einem Drehimulsgeber vor bzw zurückspulen. Wegen meiner fehlenden Erfahrung mit Arduino möchte ich aber erst einmal die Standard TonUINO-Box bauen und mich dann langsam an die Modifikationen machen. Jetzt zu meinen Fragen:

  • Kann ich die Standardsoftware des TonUINO auch mit dem BY8001 verwenden oder gibt es bereits fertig verwendbare Modifikationen des TonUINO.ino Programms für BY8001?
  • Wisst ihr, wo man mp3-Player-Module mit BY8001 herbekommt? Pinkompatibilität ist nicht wichtig, kann ich fliegend verdrahten.
    Vielen Dank und Grüße,
    Bernhard

Die zweite frage hat sich erübrigt, die module heißen wie der chip und freund google weist den weg. Sorry für die unnötige frage