Grove MP3 Player 1.0 via seriell

Hallo,

ich versuche den MP3-Player V1.0 von Seeed via Grove ans Laufen zu bekommen. Ja, ich weiss, dass er “discontinued” ist. Aber ich möchte es erst als Elektronikschrott abschreiben, wenn ich weiss, warum.

Ich verwende den Calliope 2017 (v1.2).
An A1 habe ich den MP3-Player (https://www.seeedstudio.com/Grove-Serial-MP3-Player-p-1542.html) angeschlossen. Auf der SD-Karte liegen zwei MP3-Dateien und ggf. noch ein oder zwei Ordner, die Betriebssysteme (MAC, Linux) selbst erzeugen.
An die Klinkenbuchse habe ich einen Stereo-Kopfhörer angeschlossen.

Das Draufladen und Starten des Programms funktioniert. Ich verwende die RBG-LED als Check-Point, so dass ich weiss, bis wohin das Programm gekommen ist.
Leider wird keine Musik abgespielt.
Wenn ich den Reset-Knopf am MP3-Player drücke, höre ich im Kopfhörer ein “Knack-Knack” und ca. 3 Sekunden später erneut ein “Knack”. Daher gehe ich davon aus, dass die Audioausgabe physisch mit dem Kopfhörer funktioniert.

Das beste Datenblatt zum verwendeten Chip WT5001 habe ich hier gefunden: https://www.seeedstudio.com/Grove-Serial-MP3-Player-p-1542.html
Das Seeed-Wiki ist da leider weniger aussagekräftig.

Ich verwende MakeCode als Editor.

Mein JavaScript-Code startet so:
serial.redirect( SerialPin.C17, SerialPin.C16, BaudRate.BaudRate9600 )

Sind C16 und C17 so richtig gewählt? Auf der MP3-Player-Platine ist das weisse Kabel (innen neben VCC) mit RX beschriftet. Dies sollte dann doch auf TX auf der Calliope-Platine gehen, oder? Laut Calliope-Pinlayout auf Github wäre dies C17.

Nach meinem Verständnis müsste folgendes als Zusatz nach der Initialisierung (s.o.) reichen:
serial.writeNumber(126)
serial.writeNumber(4)
serial.writeNumber(160)
serial.writeNumber(0)
serial.writeNumber(1)
serial.writeNumber(126)

Ich habe sicherheitshalber aber noch den “random mode” ausgewählt:
serial.writeNumber(126)
serial.writeNumber(3)
serial.writeNumber(169)
serial.writeNumber(3)
serial.writeNumber(126)

Auch ein Umbennen der Datei in 0001.mp3 hat nichts gebracht.
Als “störend” stellte sich ein Block zur Auswertung der empfangenen Daten an (serial.onDataReceived()). Deshalb habe ich den entfernt.

Was mache ich falsch? Was kann ich noch ausprobieren?
Wenn alles klappt, werdet Ihr hier natürlich meine Lösung finden.

Gruß,
Daniel

Auf github gibt es einen Beispielcode. Wie würde ich Folgendes in MakeCode umsetzen?

#include <SoftwareSerial.h>
SoftwareSerial mp3(2, 3);  //modify this with the connector you are using.

boolean SetMusicPlay(uint8_t hbyte,uint8_t lbyte)
{
	mp3.write(0x7E);
	mp3.write(0x04);
	mp3.write(0xA0);
	mp3.write(hbyte);
	mp3.write(lbyte);
	mp3.write(0x7E);
        delay(10);
	 while(mp3.available())
	{
	if (0xA0==mp3.read())
	return true;
	else 
	return false;
        }
}

Insbesondere verstehe ich nicht, warum ich die Daten lesen muss, bevor es weitergeht.