Es wird Weihnachten und es soll ein Musik Spieler für meine beiden Töchter her (fünf und ein Jahre alt). Er soll so einfach sein, dass ihn auch die Kleine selbständig bedienen kann. Dazu mus er auch einigermaßen robust sein.
Durch Anregungen von MiB und nachdem mich Tobias auf den ESP8266 aufmerksam gemacht hatte, den es ja schon für 3 Euro in China gibt, reifte dann der Plan einen MP3-Player zu basteln, der sich mit RFID-Karten bedienen lässt. Dazu bestellte ich folgenden Teile:
- ESP8266 WeMos D1 Mini WIFI 4M Bytes
- YX5300 UART Control Serial MP3 Music Player Module
- RC522 MFRC-522 Card Read Antenna RF Module RFID Reader
- PAM8403 5V 2 Channel USB Power Audio Amplifier
Außerdem für die Verbindung der Module:
- 2x40PCS Dupont Wire 2.54mm 1P-1P Female to Female Connector Cable
- 2x40PCS Dupont Wire 2.54mm 1P-1P Male to Female Connector Cable
Optional zwei 1000μF (35V) Kondensatoren für die Geräuschunterdrückung.
Micropython auf den Wemos
Da ich mich am besten mit der Sprache Python auskenne, musste natürlich Micropython auf den Microcontroler. Das gibt es hier zum Download. Wie man die Firmware deployed steht hier. Für mich funktioniert die Zeile gut:
sudo esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20171101-v1.9.3.bin
Danach verbindet man den Wemos per USB mit dem Rechner kommt mit Linux z.B. so auf den Wemos D1 Mini:
sudo picocom /dev/ttyUSB0 -b115200
>>> print("hello world")
Python ist sozusagen das Betriebssystem, das ist erst mal etwas gewöhnungsbedürftig. Um das Verzeichnis anzuzeigen gibt man z.B. ein:
Wer mehr Komfort braucht kann zur mpfshell greifen.
WebREPL aktivieren
Um vom hauseigenen Netz aus auf den Wemos zugreifen zu können verbinden wir ihn mit dem WLAN:
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('ssid', 'password')
Mit WebREPL kann man per Browser seinen Code hochladen und auf die Python-Shell zugreifen. Sie wird so aktiviert:
Dazu benötigt man außerdem den WebREPL-Client. Der ist im wesentlichen ein HTML-File, das man im Browser öffnet und womit man sich dann auf den Microcontroler verbindet.
Anschliessen der Module
So verbindet man den Serial MP3 Player mit dem Wemos D1 Mini:
D1 Mini <-> MP3-Player
TX <-------------> RX
RX <-------------> TX
5V <-------------> VCC
G <-------------> GND
Den Kartenleser verbindet man folgendermaßen mit dem Wemos D1 Mini:
D1 Mini <---> MFRC522
D5 <----------> SDA
D3 <----------> SCK
D4 <----------> MOSI
D2 <----------> MISO
G <----------> GND
D1 <----------> RST
3v3 <----------> 3.3V
Verstärker
Der PAM8403 ist ein erstaunliches Teil. So klein und kann doch ganz schön Krach machen. Das Anschließen ist relativ selbsterklärend. "Power +" verbindet man mit der Stromversorgung. Eigentlich benötigt er 5 Volt, er ist aber nicht wählerisch und funktioniert genauso an 3.3V vom Wemos D1 Mini. Dort gibt es weniger "Noise", weswegen ich ihn an den 3.3V betreibe. Mehr dazu im Abschnitt Denoising/Geräuschreduzierung.
Die Pins L/G/R sind der Soundeingang. Hierfür schneiden wir ein Soundkabel mit Klinkenstecker auf, stecken die Klinke in den Serial MP3 Player und verbinden die anderen Enden mit L/G/R.
rout/lout sind die Ausgänge und werden mit den Lautsprecherboxen verbunden.
Denoising/Geräuschreduzierung
Beim ersten Betreiben waren deutlich Spannungsschwankungen zu hören, die vom Wemos D1 Mini herrührten und im Verstärker zu einem regelmäßigen Tak-Tak-Tak-Geräusch führten. Nach einigem herumprobieren brachten zwei 1000μF Kondensatoren Linderung.
Der eine kommt möglichst nahe an die Spannungsversorgung des Wemos D1 Mini. Also bei mir zwischen die Pins 5V und G.
Der zweite Kondensator wird mit dem langen Bein (plus) mit der Stromversorgung des PAM8403 verbunden (power +) und mit dem kurzen möglichst nahe an den Ground-Eingang, also mit "G" vom Wemos D1 Mini.
MP3-Verzeichnis abspielen
Jetzt gilt es sich zu entscheiden, in welchem Modus man den MP3 Player betreibt. Im ersten Anlauf habe ich jedem RFID-Chip einen Song zugeordnet. In diesem Modus ist es raltiv egal wie man die Musikdateien auf der Speicherkarte anordnet.
Inzwischen habe ich mich für den Modus entschieden, einem RFID-Chip einen Ordner mit MP3-Files zuzuordnen. In dem Modus muss man sich genau an ein bestimmtes Namensschema halten. Es ist auch in der Dokumentation von Catalex angegeben: /01/001xxx.mp3
D.h. im Root-Verzeichnis wirklich nur Ordnernamen wählen mit zwei Ziffern: "01", "02", "03" usw. Und die Filenamen müssen mit drei Ziffern beginnen.
Code
Der Programmcode findet sich hier.
Video
Linksammlung