Projekt: Sound Memory
Dieses elektronische Spiel ist für Kinder und Erwachsene geeignet und funktioniert ähnlich wie das klassische Spielkarten-Memory. Beim Sound Memory müssen jedoch keine Paare von Bildern, sondern
identische Klänge gefunden werden. Bedient wird das Spiel über einen Touchscreen mit einer Größe von 4 Zoll (ca. 10 cm). Dieses bietet Platz für 3 Spielfeldgrößen mit 26, 38 oder 50 Buttons (13, 19
oder 25 Sound-Paare). 1-4 Spieler können mitmachen und beim Spielstart eine Farbe auswählen. Das Spielfeld wird dann immer in der Farbe des Spielers dargestellt, der gerade am Zug ist. Die zentrale
Steuerung übernimmt hier ein kleines Mikrocontroller-Board mit einem ESP32-C3. Für das Abspielen der Sounds sorgt ein weiteres Board mit MP3-Player, Class-D-Verstärker und Steckplatz für eine
Micro-SD-Karte. Hier wird eine Karte mit den Spiel-Sounds eingesteckt, die 4 Sound-Bänke mit jeweils 25 Sounds enthalten kann. Es gibt 2 Schaltungsvarianten, die sich bei der Stromversorgung
unterscheiden.
Status| Status | aktiv |
| Letzte Bearbeitung | 23.07.2026 |
| Aktueller Softwarestand | v1.00 vom 20.07.2026 |
Downloads| Schaltplan | |
| Stückliste für Schaltungsvariante 1 mit Empfehlungen zur Bauteilbestellung | |
| Stückliste für Schaltungsvariante 2 mit Empfehlungen zur Bauteilbestellung | |
| Software v1.00 für ESP32-C3 (ESP32-C3 Super Mini Board) als kompletter Quelltext in C++ vom 20.07.2026 | soundmem-software-v100.zip |
| Fertig kompilierte Firmware v1.00 für ESP32-C3 (ESP32-C3 Super Mini Board) vom 20.07.2026 | soundmem-firmware-v100.zip |
| Sound-Paket mit 3 Soundbänken (insgesamt 76 Sounds) | soundmem-sounds.zip |
| Flash Download Tool für ESP32 (wird für die Inbetriebnahme benötigt) | https://www.espressif.com/en/support/download/other-tools |
Inhaltsverzeichnis| Beschreibung | Allgemeine Informationen |
| Schaltung | Beschreibung der Schaltung |
| Hardware | Bilder und Hinweise zum Aufbau |
| Software | Beschreibung der Software |
| Inbetriebnahme | Inbetriebnahme des Gerätes |
| Bedienung | Bedienungsanleitung und komplette Beschreibung aller Funktionen |
| Sonstiges | Einige weitere Informationen |
Sound Memory ist ein elektronisches Spiel, welches dem klassischen Memory mit Spielkarten sehr ähnlich ist. Hier müssen jedoch keine Bilder, sondern Paare von Klängen gefunden werden. Gespielt wird auf einem Touchscreen mit einer Größe von 4 Zoll. Dieses Display stellt ein Spielfeld dar, welches aus farbigen Buttons besteht. Die Anzahl der Buttons kann in 3 Varianten gewählt werden: die kleine Variante verwendet 26 Buttons (13 Sound-Paare), die mittlere 38 Buttons (19 Paare) und die große 50 Buttons (25 Paare). Beim Start eines neuen Spiels können 1-4 Spieler jeweils eine Farbe auswählen. Anschließend wird per Zufall ein Spielfeld generiert und ebenfalls über den Zufallsgenerator ein Spieler für den ersten Zug ausgewählt. Welcher Spieler an der Reihe ist, erkennt man an der Farbe der Buttons. Diese werden immer in der Farbe dargestellt, die jeder Spieler beim Start ausgewählt hat.
Die Spielregeln sind einfach und entsprechen dem klassischen Memory: Der Spieler, der am Zug ist, drückt nacheinander auf zwei Buttons, wobei jeweils der dort hinterlegte Sound abgespielt wird. Sind die Sounds unterschiedlich, dann bleiben das Spielfeld und die beiden gedrückten Buttons noch 2 Sekunden sichtbar. Anschließend wird das Spielfeld neu gezeichnet und erscheint in der Farbe des nächsten Spielers. Hat man zwei gleiche Sounds gefunden, dann werden die beiden Buttons aus dem Spiel genommen und der aktuelle Spieler darf nochmals 2 Buttons drücken. Sobald keine Buttons mehr verfügbar sind und somit alle Paare gefunden wurden, erscheint eine einfache Spielauswertung. Diese zeigt eine farbige Tabelle mit der Platzierung und der Anzahl der gefundenen Paare jedes Spielers. Außerdem erscheint ein Pokal in der Farbe des Siegers.
Alle Sounds für das Spiel sind auf einer Micro-SD-Karte gespeichert. Diese kann jederzeit ausgebaut und mit anderen Sounds bespielt werden. Insgesamt können 4 Soundbänke, die jeweils 25 Sounds umfassen, verwaltet werden: Tierstimmen, Musikinstrumente, Geräusche aus aller Welt und Kinderlieder. Über ein Einstellungsmenü lässt sich vor Spielbeginn die gewünschte Soundbank auswählen. Die Spielfeldgröße (26, 38 oder 50 Buttons) lässt sich ebenfalls in diesem Menü einstellen und auch die Lautstärke kann hier in 30 Stufen festgelegt werden. Eine WLAN-Funktion ist ebenfalls vorhanden und ermöglicht ein komfortables Update der Firmware. Dazu lassen sich über eine virtuelle Tastatur auf dem Touchscreen WLAN-Name und Passwort eingeben, um eine Verbindung zum gewünschten WLAN herzustellen.
Das Spiel gibt es in 2 Schaltungsvarianten, die sich bei der Stromversorgung unterscheiden. Variante 1 ist etwas aufwändiger und verwendet einen internen Lithium-Ionen-Akku. Dafür ist etwas mehr
Komfort vorhanden: Das Gerät lässt sich mit einem einzigen Taster ein- und auch wieder ausschalten. Außerdem wird dafür gesorgt, dass das Gerät nach 5 Minuten ohne Bedienung automatisch ausgeschaltet
wird und ein leerer Akku führt ebenfalls zur automatischen Abschaltung. Über einen USB-C-Anschluss lässt sich der Akku wieder aufladen.
Die Schaltungsvariante 2 ist einfacher konstruiert und nutzt eine Powerbank, wobei hier durchaus ein älteres Modell wiederverwendet werden kann. Hier muss man allerdings mit einem Schiebe- oder
Kippschalter arbeiten und es gibt keine automatischen Abschaltungen.
Schaltungsvariante 1
Dieses Bild zeigt die Schaltungsvariante 1, die etwas mehr Aufwand erfordert. Das zentrale Element ist ein ESP32-C3 Mikrocontroller, welcher in Form des kleinen und preiswerten Boards ESP32-C3 Super Mini (K2) zum Einsatz kommt. Dieses enthält neben dem Controller eine WLAN-Antenne, 2 Taster, 2 LEDs und einen USB-C-Anschluss. Über letzteren kann die Software bei der Inbetriebnahme in den Controller übertragen werden. Insgesamt bietet das Controller-Board 13 I/O-Anschlüsse, 7 davon steuern das Display und das Touchpanel (K3). Beide haben separate Steuersignale, sind aber zum Teil parallel geschaltet (Anschlüsse SCK und SDI), da die Kommunikation über das gleiche Protokoll erfolgt (SPI).
Das Display hat eine Größe von 4 Zoll (ca. 10 cm), eine Auflösung von 480 x 320 Pixel und kann mit der hier verwendeten Software 65536 Farben darstellen. Ein integrierter Controller (ILI9488) steuert die Kommunikation und die Display-Ausgabe. Auf dem Display ist ein Touchpanel älterer Bauart aufgeklebt. Dieses muss etwas fester gedrückt werden und erfordert außerdem eine einmalige Kalibrierung. Für die Steuerung und Kommunikation wird auch hier ein Controller (XPT2046) verwendet. Die Display-Einheit enthält außerdem eine Hintergrundbeleuchtung, die ständig eingeschaltet bleibt. Trotzdem ist das gesamte Display recht sparsam und benötigt nur ca. 40 mA. Unterhalb der Display-Platine befindet sich noch ein Steckplatz für eine SD-Karte, dieser wird jedoch hier nicht genutzt.
Leider ist das Display nur schwer in Deutschland zu bekommen. Ich habe es bei AliExpress für ungefähr 16€ gekauft (Anfang 2026), jetzt wird es wohl wegen der zusätzlichen Zollgebühren teurer werden. Außerdem gibt es mehrere Varianten davon, die sich äußerlich kaum unterscheiden. Man muss also beim Kauf sehr genau auf die Bilder schauen.
Wichtig: Bevor das Display angeschlossen wird, muss unbedingt auf der Rückseite kontrolliert werden, ob der Spannungsregler U1 vorhanden ist. Auf dem nebenstehenden Bild
von meinem Display fehlt dieses Bauteil. In diesem Fall muss das Display mit 3,3V betrieben werden, so wie es in der Schaltung oben durch die Verbindung 1-2 dargestellt ist. Ist U1 bestückt, dann
muss das Display mit einer höheren Spannung betrieben werden. Der Anschluss VDD vom Display (K3, linke Reihe, Pin 1) muss dann mit dem Anschluss 5V des Mikrocontroller-Boards (K2, Pin 8) verbunden
werden. In der Schaltung oben würde das dann einer Verbindung 2-3 entsprechen.
Es gibt noch einen weiteren Unterschied: Die Folien-Anschlüsse des Touchpanels sind bei meiner Display-Variante auf der rechten Seite zu sehen (wo sich die 4 ungenutzten Anschlüsse des
SD-Steckplatzes befinden). Bei anderen Varianten befinden sich diese an der linken Seite mit dem 14-poligen Steckverbinder. Dies sollte keinen Einfluss auf die Funktion haben, konnte aber noch nicht
nachgeprüft werden.
Für die Erzeugung der Sounds ist das Modul DY-SV5W (K4) zuständig. Dieses kann über eine serielle Schnittstelle mit 9600 Baud angesteuert werden und spielt dann beliebige WAV- oder MP3-Dateien von der eingelegten Micro-SD-Karte ab. Auf dem Modul befinden sich neben einem Mikrocontroller ein MP3-Player und ein Class-D-Verstärker mit einer Leistung von 5W. Am Ausgang des Verstärkers ist ein kleiner, aber leistungsfähiger Lautsprecher angeschlossen. Das Sound-Modul ist über 2 Leitungen mit dem ESP32-C3 verbunden: eine Verbindung dient zum Senden von Kommandos zum Sound-Modul, die andere überträgt Antworten des Moduls zum ESP32-C3. Damit wird beim Systemstart geprüft, ob das Sound-Modul vorhanden und eine Micro-SD-Karte gesteckt ist. Auf dem Sound-Modul befindet sich außerdem noch ein Trimmpotentiometer für die Grundeinstellung der Lautstärke. Die Feineinstellung erfolgt dann in 30 Stufen über Kommandos.
Die Energie für das Spiel wird vom Lithium-Ionen-Akku G1 mit einer Nennspannung von 3,7V geliefert. Dieser ist mit dem Lade-Modul K1 verbunden. Über dessen USB-C-Anschluss kann der Akku aufgeladen werden. Dazu befindet sich auf dem Lade-Modul ein IC TP4056, welches auf einen Ladestrom von 1A eingestellt ist. Weiterhin enthält das Modul eine Schutzschaltung gegen Tiefenentladung und unterbricht den Stromkreis zur restlichen Schaltung, wenn die Akku-Spannung unter 2,5V fällt. Der Akku ist übrigens intern mit einer ähnlichen Schutzschaltung ausgestattet. Der zusätzliche Jumper J2 ermöglicht außerdem, die gesamte Sound-Memory-Schaltung bei Wartungsarbeiten vom Akku zu trennen.
Der aus den Bauteilen R1-R4, C1, D1-D2, K5-K6 sowie S1 bestehende Schaltungsteil steuert die Stromversorgung des Spiels. Im Ruhezustand sind die beiden MOSFET K5 und K6 gesperrt. Bei K5 (P-Kanal-Typ) erfolgt die Sperrung über R1, welcher das Gate auf dem Spannungs-Niveau vom Source-Anschluss hält. Bei K6 (N-Kanal-Typ) übernimmt R4 diese Funktion. Wird jetzt der Taster S1 gedrückt, dann kommt Leben in die Schaltung: Der entladene Kondensator C1 wirkt zunächst wie eine direkte Verbindung und so wird über S1, D1 und C1 eine negative Spannung auf das Gate von K5 gelegt (bezogen auf Source). Dieser schaltet durch und gibt somit die Akku-Spannung an die gesamte Schaltung (K2-K4) weiter. Der ESP32-C3 beginnt nun mit seinem Programm und schaltet als erstes den I/O-Port 1 (Pin 2) auf High. Das bewirkt, dass über R3 eine positive Spannung an das Gate von K6 gelangt und dieser durchschaltet. Er überbrückt damit den Startpfad (S1, D1, C1) und die Spannung über K5 bleibt eingeschaltet. Der Taster kann nun losgelassen werden und weitere Betätigungen wirken sich nicht mehr auf die Stromversorgung aus.
Der Taster hat trotzdem noch eine weitere Funktion: Über D2 und den I/O-Port 10 (Pin 14) kann der ESP32-C3 den Zustand des Tasters lesen und auswerten. So wird ein kurzer Druck für die Menüsteuerung genutzt und ein langer Druck startet die Ausschalt-Prozedur. Dabei schaltet der ESP32-C3 den I/O-Port 1 auf Low und das führt über R3 zur Sperrung von K6. Über R1 wird dann auch K5 gesperrt und die Spannung wird abgeschaltet. Sollte der Taster zu diesem Zeitpunkt noch gedrückt sein, dann bleibt K5 über den Weg S1-D1-C1 weiterhin aktiv. Allerdings nur kurz, denn C1 wird nun über R1 aufgeladen. Dabei fällt die Gatespannung an K5 irgendwann unter den Schwellwert und K5 wird gesperrt. Über R2 entlädt sich C1 wieder und nach kurzer Zeit lässt sich das Gerät erneut über den Taster einschalten.
Wichtig sind noch die beiden Widerstände R5 und R6. Diese halbieren die Akku-Spannung und führen diese zum I/O-Port 0 (Pin 1) des ESP32-C3. Dieser kann über einen internen A/D-Konverter die Spannung messen und damit auch den ungefähren Ladestand ermitteln, da dieser bei Li-Ion-Akkus an der Spannung erkennbar ist. Über diese Spannungsmessung wird die automatische Abschaltung des Gerätes gesteuert, die bei ungefähr 3,65V ausgelöst wird.
Übrigens: Die Stromanschlüsse beim ESP32-C3-Board und Sound-Modul sind zwar mit +5V beschriftet, funktionieren aber auch mit kleineren Spannungen. Beim ESP32-C3-Board ist die untere Grenze bei ungefähr 3,6V, wo der interne 3,3V-Regler gerade noch arbeitet. Das Sound-Modul kommt auch mit 3,3V klar, liefert dann aber nicht mehr die volle Verstärkerleistung.
Noch ein Hinweis: Leider gibt es die MOSFET K5 und K6 nur in SMD-Bauform (SOT-23-Gehäuse). Größere Exemplare in klassischen Bauformen sind leider nicht für diese kleinen Spannungen geeignet. Es hat sich außerdem als praktisch erwiesen, die Bauteile in unmittelbarer Nachbarschaft der MOSFET ebenfalls in SMD-Bauform zu realisieren. Die Stückliste für Schaltungsvariante 1 schlägt aus diesem Grund für die Bauteile R1, R3 und R4 SMD-Versionen vor.
Wichtig: Das fertig aufgebaute Sound Memory darf nur über den USB-Anschluss des Lade-Moduls (K1) mit Strom versorgt werden. Die USB-Anschlüsse des ESP32-C3-Boards (K2) und des Sound-Moduls (K4) dürfen nicht benutzt werden! Anderenfalls gelangt die USB-Spannung von +5V nahezu ungehindert über K5 zum Akku und richtet möglicherweise Schaden am Akku oder der Schaltung an. Sollte aus irgendeinem Grund der USB-Anschluss des ESP32-C3 benötigt werden (z.B. weil ein Firmware-Update fehlgeschlagen ist und das Programm nicht mehr funktioniert), dann gibt es 2 Möglichkeiten:
- Öffnen des Jumpers J2. Das trennt den Akku von der Schaltung ab und ermöglicht die gefahrlose Nutzung des USB-Anschlusses des ESP32-C3.
- Ausbau des Controller-Boards (K2). Damit ist der ESP32-C3 isoliert und kann ebenfalls gefahrlos z.B. an einen PC angeschlossen werden.
An dieser Stelle noch einige technische Daten:
| Eigenschaft | Wert | Bemerkung |
|---|---|---|
| Stromaufnahme | 105 mA | ohne Sound-Wiedergabe, WLAN ausgeschaltet |
| maximale Ladespannung | 4,2 V | |
| maximaler Ladestrom | 1A | |
| Abschaltspannung | 3,65V | |
| Ladezeit | 2h 10min | nach Abschaltung wegen leerem Akku |
Schaltungsvariante 2
Dieses Bild zeigt die Schaltungsvariante 2. Diese wurde stark vereinfacht und eine handelsübliche Powerbank ersetzt hier den gesamten Schaltungsteil für die Stromversorgung. Auf das komfortable Ein- und Ausschalten mittels Taster muss man leider verzichten, stattdessen wird das Gerät hier mit einem Kipp- oder Schiebeschalter (S2) eingeschaltet. Allerdings führt ein vergessenes Ausschalten unweigerlich zum Entladen der Powerbank. Ein Schaden entsteht aber nicht, da Powerbanks bei leerem Akku die USB-Ausgänge abschalten. Man kann hier übrigens ältere Powerbanks verwenden, Kapazitäten von 2000 mAh reichen aus, um das Sound Memory über mehrere Stunden mit Strom zu versorgen.
Für den Anschluss der Powerbank kann man ein vorhandenes USB-Kabel durchschneiden und das Stück mit dem USB-A-Stecker für das Spiel nutzen. Vor dem Verbinden mit der Schaltung sollte man die richtigen Anschlüsse für Masse und +5V herausfinden (meist Schwarz und Rot). Dazu kann man den USB-Stecker an die Powerbank stecken und an den Drähten messen. Es ist sinnvoll, die Powerbank zusammen mit dem Spiel in ein Gehäuse einzubauen. Hier muss dann der Ladeanschluss für die Powerbank von außen zugänglich sein.
Auch wenn der Taster S1 nicht mehr zum Ein- und Ausschalten genutzt werden kann, ist er dennoch weiterhin notwendig. Er wird für die Menüsteuerung benötigt. Wichtig ist auch der Widerstand R5. Dieser ist hier von der ESP32-C3-Spannung (3,3V) direkt zum I/O-Port 0 (Pin 1) geführt. Hier wird über den internen A/D-Konverter scheinbar sinnlos die Betriebsspannung gemessen. Das ist aber sehr wichtig, damit die Software des ESP32-C3 die beiden Schaltungsvarianten unterscheiden kann. Bei Variante 2 ist die Spannung am I/O-Pin höher und das veranlasst die Software, die Akku-Anzeige auf dem Display grau darzustellen. Außerdem wird die automatische Abschaltung, die hier nicht funktionieren würde, komplett deaktiviert.
Der Hauptteil der Schaltung mit K2, K3 und K4 ist übrigens identisch mit der Schaltungsvariante 1 und wurde bereits weiter oben beschrieben. Die Stückliste für Schaltungsvariante 2 enthält hauptsächlich die elektronischen Bauteile. Weitere Teile wie z.B. das Gehäuse sind von der verwendeten Powerbank abhängig und müssen passend ausgewählt werden.
Dieses und alle nachfolgenden Bilder zeigen das Sound Memory in der aufwändigeren Schaltungsvariante 1. Alle Bauteile außer dem Lautsprecher finden auf einer Lochrasterplatine mit einer Größe von 160
x 100 mm Platz. Die Platine muss etwas schmaler geschnitten werden, damit sie ins Gehäuse passt. Außerdem sind an den Ecken Ausschnitte für das Gehäuseoberteil und ein größerer Ausschnitt für den
Lautsprecher erforderlich.
Im oberen Bereich ist links das Modul für die USB-Ladefunktion und rechts das Sound-Modul untergebracht. Beide Module sind mit Stiftleisten direkt auf die Hauptplatine aufgelötet. Hier ist leider nicht genug Platz in der Höhe für Steckverbinder. Unten links sind 2 flache Buchsenleisten, auf die später das ESP32-C3-Board aufgesteckt wird. Rechts daneben ist der Akku zu sehen. Dieser wird mit einem Anschlusskabel geliefert und dieses ist hier bereits mit dem USB-Lade-Modul verbunden. Oben links befindet sich der Jumper J2, der im Moment noch offen ist, die Hauptschaltung ist also noch abgetrennt.
Die 4 schwarzen Plastik-Hülsen sind die Abstandshalter für das Display. Hier wird eine Höhe von 15,5 mm benötigt. Die Hülsen sind 15 mm hoch und unter jeder befindet sich noch eine M3-Unterlegscheibe. Alle 4 Hülsen und Scheiben wurden mit Zweikomponentenkleber auf der Hauptplatine befestigt. Ebenfalls für das Display gedacht sind die 14- und die 4-polige Präzisions-Buchsenleiste. Hier wird noch eine weitere Buchsenleiste in Normalhöhe eingesteckt und das ergibt die optimale Verbindung zum Display.
Ganz rechts ist noch der Taster S1 zu sehen. Dieser wurde auf einer kleinen Platine montiert, damit er die richtige Bauhöhe hat. Das Platinenstück kann man übrigens aus dem Ausschnitt für den
Lautsprecher gewinnen. Stichwort Lautsprecher: die beiden Stifte unterhalb vom Jumper sind die Anschlüsse für den Lautsprecher.
Die Platinenunterseite besteht aus einigen dicken Drähten (0,5 mm) für Masse und Stromleitungen sowie aus einigen Kupferlackdrähten (0,3 mm) für weitere Verbindungen. Eine kleine Herausforderung ist
der SMD-Schaltungsteil im oberen Mittelfeld. Dieser ist auf dem nächsten Bild noch einmal vergrößert zu sehen.
Beim Bestücken habe ich hier mit den MOSFET K5 und K6 angefangen und diese etwas schräg auf 3 Löcher gelötet. Man beginnt am besten mit einem Loch. Wenn die Position passt, dann können auch die
anderen Anschlüsse verlötet werden. Anschließend wurden die 3 Widerstände auf die gleiche Weise platziert. Es ist etwas anspruchsvoll, aber machbar.
Der blanke Draht, der nach unten führt, ist die Masseverbindung. Der andere blanke Draht auf der rechten Seite führt zum Jumper J2 (Spannung vom Akku). Der schwarze Draht ist der Schaltausgang und
führt zu den +5V-Anschlüssen von K2 und K3. Es bleiben die beiden Kupferlackdrähte übrig. Einer führt zu C1/R2 und steuert das Einschalten, der andere ist mit dem ESP32-C3 verbunden und steuert das
Halten und Ausschalten der Betriebsspannung.
Auf diesem Bild wurde die Hauptplatine ins Gehäuse-Unterteil eingelegt und mit den 6 speziellen Schrauben befestigt. Die zusätzliche 14- und 4-polige Buchsenleiste für das Display wurde aufgesteckt
und auch das ESP32-C3-Board befindet sich jetzt an seinem Platz.
Übrigens, die USB-Anschlüsse des ESP32-C3-Boards und des Sound-Moduls sollten nicht von außen zugänglich sein! Nur der USB-Anschluss des Akku-Lade-Moduls und die Micro-SD-Karte des Sound-Moduls
sollten entsprechende Öffnungen nach außen haben. Das hat technische Gründe, die etwas weiter oben bei der Schaltungsvariante 1 beschrieben worden sind.
Dieses Bild zeigt einen seitlichen Blick auf das Gerät. Das Display wurde aufgesteckt und liegt jetzt auf den Plastik-Hülsen auf. Eine zusätzliche Verschraubung ist nicht notwendig, das Display
bleibt stabil in dieser Position, sobald das Gehäuse-Oberteil montiert ist.
Hier ist das Gehäuse-Oberteil von innen zu sehen. Zunächst mussten die Schraubendome in der Mitte und rechts entfernt werden, um Platz für das Display zu schaffen. Als nächstes wurde das große
Fenster für das Display ausgesägt. Es folgen die vielen Löcher für den Lautsprecher, für die ich eine Bohrschablone erstellt habe. Diese ist im PDF-Schaltplan auf Seite
2 zu finden. Hier ist auch das zusätzliche Teil abgebildet, welches zur Aufnahme des Lautsprechers dient. Dieses kann man übrigens aus dem Materialrest vom Display-Ausschnitt herstellen.
Dann muss noch das Loch für den Taster gebohrt und die Aussparungen für USB-Ladeanschluss sowie Micro-SD-Karte hergestellt werden. Ebenfalls aus Restmaterial habe ich unten 2 rechteckige Streifen
angeklebt. Ohne diese sind die beiden LEDs vom Lade-Modul oben am Displayrand sichtbar und das stört. Die LEDs sollen direkt am USB-Anschluss sichtbar sein und dafür habe ich ein kleines Loch neben
dem Lade-Anschluss gebohrt.
Für den Lautsprecher-Anschluss habe ich 2 ungefähr 20 cm lange Litzenkabel verwendet und an das Ende eine 2-polige Buchsenleiste gelötet. Der mit Anschlusskabel vorbereitete Lautsprecher wird dann
auf die 4 Schraubengewinde gesteckt und mit Muttern festgeschraubt.
Wenn man den Lautsprecher auf andere Weise einbauen möchte, dann sollte man beachten, dass nur der äußere Rand des Lautsprechers auf dem Gehäuse aufliegen darf. Die weiter innen liegende Membran muss
frei schwingen können und darf nicht mit dem Gehäuse in Berührung kommen.
Bevor man die Gehäuseteile zusammenfügt, muss der Lautsprecher-Anschluss auf die dafür vorgesehene Stiftleiste gesteckt werden. Anschließend steckt man das Oberteil auf und sollte dabei nicht das
Lautsprecherkabel einklemmen. Hat man alles richtig gemacht, kann das Spiel beginnen.
Dieses Kapitel beschreibt die Software des Sound Memory. Die Informationen sind für den Nachbau und den Betrieb des Spiels nicht unbedingt notwendig und können übersprungen werden.
Zur Erstellung der Software für den ESP32-C3 habe ich die Arduino-Plattform und die dort übliche Sprache C++ verwendet. Bei der Entwicklungsumgebung fiel die Wahl auf Visual Studio Code in Verbindung mit pioarduino. Es ist ebenso möglich, die Arduino-Entwicklungsumgebung zu verwenden, diese ist allerdings nicht so komfortabel. Die Datei soundmem-software-v100.zip enthält den Quelltext in 2 Versionen: eine für PlatformIO/pioarduino und eine für die Arduino-IDE. Die Programmdateien sind in beiden Versionen identisch und haben folgende Funktion:
| main.cpp / Sound-Memory.ino | enthält die Hauptfunktionen mit Initialisierung und Hauptprogrammschleife |
| functions.h | enthält zahlreiche Funktionen, die vom Hauptprogramm und anderen Komponenten benötigt werden |
| http.h | enthält die HTML-Seitenstruktur für den Web-Server und eine Funktion für dynamische Inhalte |
| symbols.h | enthält einige Grafiken und Symbole |
| FreeSansBold12pt7bGe.h | enthält eine modifizierte Schriftart mit deutschen Umlauten |
| FreeSansBold18pt7bMod.h | enthält eine modifizierte Schriftart mit einigen Symbolen |
| platformio.ini | enthält Projekt-Einstellungen und eine Liste der benötigten Bibliotheken (wird nur bei PlatformIO/pioarduino benötigt) |
| User_Setup.h | enthält die Display-Konfiguration (wird nur bei Arduino IDE benötigt) |
| Wichtig!.txt | enthält wichtige Hinweise für die Konfiguration (wird nur bei Arduino IDE benötigt) |
main.cpp bzw. Sound-Memory.ino: Das Hauptprogramm des Sound Memory beginnt mit einer Liste von Definitionen. Hier werden viele Werte festgelegt, wobei der größte Teil aus Positionen und Farben von Display-Elementen besteht. Es folgt eine Liste von Strings und Variablen. Außerdem werden hier alle benötigten Bibliotheken eingebunden. Bei der Verwendung von PlatformIO bzw. pioarduino erfolgt die Installation der Bibliotheken automatisch über die Datei platformio.ini, bei Verwendung der Arduino-IDE muss man alle notwendigen Bibliotheken manuell installieren. Die nachfolgende Tabelle listet alle externen Bibliotheken und deren Bezugsquelle auf:
| TFT_eSPI | https://github.com/Bodmer/TFT_eSPI |
| ESP32Async/AsyncTCP | https://github.com/ESP32Async/AsyncTCP |
| ESP32Async/ESPAsyncWebServer | https://github.com/ESP32Async/ESPAsyncWebServer |
Jetzt beginnt das eigentliche Programm, welches aus 2 Teilen besteht:
setup(): Dieser Programmteil wird nur einmal beim Systemstart ausgeführt und beginnt mit der Initialisierung einiger I/O-Ports des ESP32-C3 sowie 2 seriellen Schnittstellen. Die Schnittstelle Serial ist mehr oder weniger direkt mit dem USB-Anschluss des ESP32-C3-Boards verbunden. Hier werden beim Systemstart und auch im laufenden Betrieb des Spiels einige Statusinformationen ausgegeben, die in der Entwicklungsumgebung oder mit einem Terminalprogramm angezeigt werden können. Die andere Schnittstelle Serial2 wird zur Kommunikation mit dem Sound-Modul verwendet. Anschließend wird das Display initialisiert und ein Startbild ausgegeben. Nach einer kurzen Wartezeit erfolgt eine Spannungsmessung am Analogeingang und die Ermittlung der Schaltungsvariante. Im nächsten Schritt wird das Dateisystem geprüft und gegebenenfalls ein neues Dateisystem angelegt. Gibt es ein Problem mit dem Dateisystem, dann erscheint eine Fehlermeldung auf dem Display und das Gerät wird je nach Schaltungsvariante ausgeschaltet oder angehalten.
Ist das Dateisystem in Ordnung, werden nacheinander 3 Konfigurationsdateien gelesen. Die erste enthält die Kalibrierungsdaten für das Touchpanel. Fehlt diese Datei oder ist diese fehlerhaft, dann wird automatisch eine Kalibrierung gestartet. Als nächstes ist die Datei mit den letzten Spiel-Einstellungen an der Reihe. Fehlt diese oder ist diese fehlerhaft, dann wird hier eine Grundeinstellung gesetzt. Die letzte Datei enthält die WLAN-Informationen (SSID und Passwort). Der nächste Schritt sendet eine Anfrage an das Sound-Modul und erkennt an der Antwort, ob eine Micro-SD-Karte gesteckt ist. Kommt hier keine Antwort oder fehlt die SD-Karte, dann erscheint eine Fehlermeldung. Der letzte Block ist etwas größer und enthält alle Funktionen für den Web-Server. Diese erzeugen die Web-Seite mit den Status-Informationen und steuern das Firmware-Update.
loop(): Dieser Programmteil läuft in einer endlosen Schleife und steuert alle Funktionen des Sound Memory. Einige davon laufen nur in bestimmten Zeitabständen oder nach einer festgelegten Zeit und diese werden als erstes bearbeitet. Das betrifft die 2 Sekunden Wartezeit nach der kompletten Eingabe eines Spielzuges und die regelmäßige Aktualisierung der Akku-Anzeige. Ist der dazugehörige Timer abgelaufen, dann werden die damit verbundenen Aktionen ausgeführt. Ein weiterer Timer sorgt für die zyklische Abfrage von Taster und Touchpanel und abhängig davon für die komplette Steuerung des Spiels und der Menüs:
In diesem recht großen Programmblock wird zunächst der Taster und das Touchpanel gelesen. Ein erkannter Tasterdruck führt zu einem Wechsel von Menüs, sofern nicht schon das Hauptmenü aktiv ist. Es wird weiterhin ermittelt, ob der Taster länger oder mehrfach gedrückt wurde und dann in eine spezielle Funktion verzweigt (Ausschalten oder Kalibrierung). Der weitere Programmablauf ist abhängig vom gerade angezeigten Menü bzw. Spielfeld und wird über ein großes Switch-Konstrukt realisiert. Hier erfolgt in jedem Case-Abschnitt abhängig vom aktuellen Menü die Auswertung der gedrückten Position auf dem Touchpanel und wenn sich diese innerhalb eines Display-Buttons befindet, dann wird die entsprechende Funktion gestartet. Dabei wird relativ viel Programmkode für die Anzeige der Menüs und Buttons benötigt, z.B. für das Neuzeichnen bei einem Menüwechsel oder die Invers-Darstellung nach Berührung.
Das Ende bildet ein kleiner Block. Dieser steuert den automatischen Neustart nach einem Firmware-Update sowie das automatische Ausschalten bei Inaktivität oder niedrigem Akku-Stand.
functions.h: In dieser Datei befinden sich viele Funktionen, die zur besseren Übersicht der Hauptprogrammschleife ausgelagert wurden. Die wichtigsten sind in der folgenden Übersicht aufgelistet:
- Abschalten des Gerätes
- Anzeige eines Fehlers
- Schreiben von Binärdateien in das Dateisystem
- Lesen von Binärdateien aus dem Dateisystem
- Touchpanel-Kalibrierung
- Ausgabe einer Bitmap-Grafik auf dem Display
- Anzeige eines Batterie-Symbols und eines Fortschrittsbalkens bei einem Firmware-Update
- Anzeige von WLAN-Signalstärke und Status-Informationen
- Anzeige eines Lautsprecher-Symbols mit dem aktuellen Lautstärkewert
- Anzeige des Spielstatus
- Anzeige einer virtuellen Tastatur für die Eingabe von WLAN-Zugangsdaten
- Anzeige der Eingaben der virtuellen Tastatur
- Funktionen zum Zeichnen aller Menüs
- Funktionen zum Zeichnen des Spielfeldes
- Auswahl des nächsten Spielers
- Start eines neuen Spiels
- Funktionen zur Kommunikation mit dem Sound-Modul
http.h: In dieser Datei sind alle Daten und Programmteile zusammengefasst, die mit dem Web-Server zusammenhängen. Hier ist eine einfache Web-Seite hinterlegt, die aus dem HTML-Header, der Hauptseite und einer weiteren Seite für die Ergebnis-Anzeige nach einem Firmware-Update besteht. Die HTML-Seite enthält Platzhalter, die bei der Ausgabe der Seite im Browser des Benutzers durch entsprechende Werte ersetzt werden. Dafür zuständig sind die beiden Funktionen am Ende.
symbols.h: Diese Datei enthält insgesamt 16 Symbole, die als Bitmap-Grafik abgelegt sind. Diese werden für unterschiedliche Zwecke eingesetzt und dienen als Startbild oder als zusätzliches Element für Menü-Buttons. Alle Grafiken verwenden ein Bit pro Pixel und erscheinen somit immer nur in einer Farbe auf dem Display. Eine Ausnahme macht das ebenfalls hier abgelegte favicon.png für den Web-Server, welches 24-Bit-Farben verwendet.
FreeSansBold12pt7bGe.h: Diese Datei heißt im Original FreeSansBold12pt7b.h und stammt aus der Display-Bibliothek TFT_eSPI. Hier wurden die Zeichen [\]{|}~ durch die deutschen Umlaute ÄÖÜäöüß ersetzt.
FreeSansBold18pt7bMod.h: Diese Datei heißt im Original FreeSansBold18pt7b.h und stammt ebenfalls aus der Display-Bibliothek TFT_eSPI. Hier sind die Zeichen []{|} durch Pfeil-Symbole, ein Haken-Symbol und Symbole für Minus und Plus ersetzt worden.
platformio.ini: Diese Datei enthält wichtige Informationen zum Projekt und wird nur dann benötigt, wenn der Quelltext mit Visual Studio Code und pioarduino bzw. PlatformIO bearbeitet werden soll. Hier stehen Daten über die genutzte Controller-Plattform, Einstellungen für die TFT_eSPI-Bibliothek und eine Liste mit den benötigten Bibliotheken.
User_Setup.h: Diese Datei wird nur bei der Arduino IDE benötigt und enthält die Einstellungen für die TFT_eSPI-Bibliothek.
Die nachfolgend beschriebene Inbetriebnahme des Sound Memory erfolgt in 2 Schritten und muss nur einmal durchgeführt werden. Dabei wird zuerst über den USB-Anschluss des ESP32-C3-Boards und einer speziellen Software die Firmware des Sound-Memory in den Flash-Speicher des Mikrocontrollers übertragen. Erfahrene Programmierer können auch den Quelltext verwenden und mit der Entwicklungsumgebung ihrer Wahl den Flash-Vorgang durchführen. Im zweiten Schritt werden die benötigten Sound-Dateien auf eine Micro-SD-Karte übertragen und damit das Sound-Modul vorbereitet.
Schritt 1 - Inbetriebnahme des ESP32-C3
Wichtig: Wenn die Schaltungsvariante 1 aufgebaut wurde, dann muss jetzt dafür gesorgt werden, dass der Akku von der Schaltung abgetrennt wird. Anderenfalls gelangt die Spannung vom USB-Anschluss des ESP32-C3-Boards direkt an den Akku, was zu Schäden an der Schaltung und am Akku führen kann. Es gibt hier 2 Möglichkeiten:
- Öffnen des Jumpers J2. Das trennt den Akku von der Schaltung ab und ermöglicht die gefahrlose Nutzung des USB-Anschlusses des ESP32-C3.
- Ausbau des ESP32-C3-Boards. Damit ist der ESP32-C3 isoliert und der USB-Anschluss kann ebenfalls gefahrlos genutzt werden.
Über ein USB-C-Kabel kann nun das ESP32-C3-Board mit dem PC verbunden werden. Wir benötigen jetzt ein von Espressif (dem Entwickler der ESP32-Mikrocontroller) zur Verfügung gestelltes Programm und gehen auf die Homepage: https://www.espressif.com/en/support/download/other-tools. Über den Download-Link unten rechts gelangt man auf eine weitere Seite und dort kann das Paket Flash Download Tool geladen werden. Außerdem brauchen wir das aktuelle Firmware-Paket für das Sound Memory soundmem-firmware-v100.zip.
Nach dem Download beider Pakete wird zunächst das Flash Download Tool entpackt und alle enthaltenen Dateien in einen geeigneten Ordner kopiert. Wichtig für uns ist die Programmdatei flash_download_tool_x.x.x.exe (die x enthalten die Versionsnummer) und das leere Verzeichnis bin. Dieses Verzeichnis ist für die Dateien vorgesehen, die in den ESP32-C3 programmiert werden sollen und hier kopieren wir die 4 bin-Dateien aus dem Firmware-Paket soundmem-firmware-v100.zip hinein. Jetzt wird das Programm flash_download_tool_x.x.x.exe gestartet.
Bei jedem Start zeigt das Flash-Download-Tool einen kleinen Dialog wie im Bild. Hier ist es wichtig, die erste Einstellung ChipType in ESP32-C3 zu
ändern. Außerdem muss die Option LoadMode auf USB gesetzt werden. Die ESP32-C3 haben im Gegensatz zum älteren ESP32 keinen UART-Chip und der
Mikrocontroller verwaltet selbst den USB-Anschluss. Mit einem Klick auf OK erscheint das Hauptfenster des Flash-Download-Tools.
Im Hauptfenster sind etwas mehr Einstellungen notwendig. Der Flash-Speicher des ESP32-C3 ist in mehrere Bereiche unterteilt, die unterschiedliche Funktionen haben. Bei diesem Projekt müssen insgesamt
4 Dateien an ganz bestimmte Speicherpositionen geschrieben werden. Beim ersten Start des Flash-Download-Tools ist die Tabelle im oberen Bereich zunächst leer. Um diese zu füllen, klickt man in der
ersten Zeile ganz links auf die Checkbox. Dabei wird ein Haken gesetzt und die gesamte Zeile rot eingefärbt. Als nächstes klickt man auf den Button mit den 3 Punkten. Es öffnet sich ein Dialog, mit
dem man nun in das Verzeichnis bin wechseln und die erste Datei bootloader.bin auswählen kann. Die gewählte Datei erscheint anschließend in der
Tabelle und der Eintrag wird grün. Jetzt muss noch in der rechten Spalte die Speicheradresse eingetragen werden. Beim Bootloader in der ersten Zeile ist das die Adresse
0x0000 (hexadezimale Schreibweise). Die Eingaben der Zeilen 2-4 erfolgen auf die gleiche Weise und am Ende muss das Programmfenster so aussehen wie im Bild.
Weitere Einstellungen sind normalerweise nicht erforderlich. Im unteren Bereich sollte automatisch ein virtueller COM-Port voreingestellt sein und die Baudrate muss nicht geändert werden. Mit einem
Klick auf START wird der Programmiervorgang gestartet, dieser dauert ungefähr 10 Sekunden.
Wenn der untere Teil des Programmfensters so aussieht wie im nebenstehenden Bild, dann war der Programmiervorgang erfolgreich. Die Werte im Anzeigefeld sind bei jedem ESP32-C3 anders und zeigen
dessen Netzwerk-Adressen (MAC) an.
Hinweis: Wenn das ESP32-C3-Board vorher in einem anderen Projekt verwendet wurde, dann sollte man zuerst über den Button ERASE den Flash-Speicher
löschen. Anschließend kann ein normaler Programmiervorgang über START erfolgen. Generell kann man auch bei einem fabrikneuen Board so vorgehen.
Das Flash-Download-Tool wird vorerst nicht mehr benötigt und kann beendet werden. Der ESP32-C3 ist jetzt einsatzbereit und wird vom PC getrennt. Bei Schaltungsvariante 1 kann man jetzt den Jumper J2 wieder stecken oder das ESP32-C3-Board wieder in das Gerät einsetzen.
Hinweis: Diese Inbetriebnahme-Prozedur ist nur einmal erforderlich. Firmware-Updates können später über die WLAN-Funktion des Sound Memory und einen Web-Browser durchgeführt werden.
Schritt 2 - Inbetriebnahme des Sound-Moduls
Damit das Sound-Modul mit dem ESP32-C3 kommunizieren kann, muss es in die Betriebsart UART Mode gesetzt werden. Dafür sind die 3 Dip-Schalter auf dem Modul in die folgenden Positionen zu setzen:
Dip-Schalter 1 - OFF
Dip-Schalter 2 - OFF
Dip-Schalter 3 - ON
Auf dem Sound-Modul befindet sich außerdem ein Trimmpotentiometer. Mit diesem lässt sich eine grundsätzliche Lautstärke vorgeben. Ein guter Anfangswert ist die Mittelstellung.
Jetzt wird die Micro-SD-Karte vorbereitet. Diese darf eine Speichergröße von maximal 32 GB haben und sollte vor der Verwendung im Sound Memory formatiert werden. Unterstützt werden die Dateiformate FAT und FAT32. Jetzt brauchen wir das Paket soundmem-sounds.zip mit den Sounddateien. Dieses wird entpackt und mit der gleichen Ordnerstruktur wie im Paket auf die Micro-SD-Karte geschrieben. Der Inhalt der Karte muss dann so aussehen wie in der nachfolgenden Tabelle:
| \1\01.mp3 | Soundbank 1, Sound 1 |
| ... | Soundbank 1, Sounds 2-24 |
| \1\25.mp3 | Soundbank 1, Sound 25 |
| \2\01.mp3 | Soundbank 2, Sound 1 |
| ... | Soundbank 2, Sounds 2-24 |
| \2\25.mp3 | Soundbank 2, Sound 25 |
| \3\01.mp3 | Soundbank 3, Sound 1 |
| ... | Soundbank 3, Sounds 2-24 |
| \3\25.mp3 | Soundbank 3, Sound 25 |
| \4\01.mp3 | Soundbank 4, Sound 1 |
| ... | Soundbank 4, Sounds 2-24 |
| \4\25.mp3 | Soundbank 4, Sound 25 |
| \5\01.mp3 | Sound beim Ausschalten |
Anstatt mp3 sind auch Sounds im Format wav möglich. Ich habe allerdings festgestellt, dass nicht alle wav-Dateien abgespielt werden, während mp3 problemlos funktioniert.
Hinweis: Aus urheberrechtlichen Gründen dürfen die 25 Sounds für Soundbank 4 leider nicht veröffentlicht werden. Damit stehen für die Soundbank Kinderlieder leider keine Sounds zu Verfügung. Das Sound Memory ist aber trotzdem mit den anderen 3 Soundbänken spielbar. Es ist übrigens nicht schwer, eigene Sounds zu erstellen. Hinweise zu diesem Thema findet man im Kapitel Sonstiges.
Sind alle Sounds kopiert, dann wird die Speicherkarte jetzt vom PC abgemeldet und in das Sound-Modul gesteckt. Die Karte muss hier etwas weiter in die Halterung gedrückt werden und rastet dann ein.
Entfernt wird die Karte ebenfalls durch Eindrücken, die Verriegelung wird dann gelöst und die Karte kommt etwas aus der Halterung heraus.
Eingeschaltet wird das Sound Memory durch einen etwas längeren Druck auf den Taster S1 (bei Schaltungsvariante 1) oder über den Schalter S2 (bei Schaltungsvariante 2). Auf dem Display erscheint dann für ungefähr 2 Sekunden ein Startbild und es werden intern einige Tests durchgeführt. Wenn alles in Ordnung ist, wird anschließend das Hauptmenü angezeigt und das Spiel kann beginnen.
Das Ausschalten erfolgt über die gleichen Bedienelemente: Bei Schaltungsvariante 1 muss der Taster mindestens 2 Sekunden lang gedrückt werden, dann erscheint eine Ausschalt-Meldung und ein Ausschalt-Sound wird abgespielt. Nach weiteren 1,5 Sekunden schaltet sich das Sound Memory aus. Bei Schaltungsvariante 2 wird einfach der Schalter S2 in die Aus-Stellung gebracht. Hier ist es allerdings sinnvoll, vorher mit dem Taster ins Hauptmenü zu wechseln. Dabei wird der letzte Status gespeichert. Schaltet man einfach während des Spiels aus, dann geht der Spielstand leider verloren.
Fehler und Kalibrierung
Es ist durchaus möglich, dass beim Einschalten ein Fehler gemeldet wird. Das nebenstehende Bild wird hoffentlich niemals angezeigt, denn das lässt sich nur durch eine erneute Inbetriebnahme-Prozedur
beheben. Auch ein defekter ESP32-C3 kann zu diesem Fehler führen. Ich habe diese Fehlermeldung für das Bild absichtlich herbeigeführt, während der gesamten Entwicklungszeit und im bisherigen
praktischen Einsatz ist er niemals aufgetreten.
Es sind noch 2 weitere Fehlermeldungen möglich:
Sound-Modul-Fehler - Hier wurde festgestellt, dass die Kommunikation mit dem Sound-Modul nicht funktioniert. Das kann eigentlich nur bei der ersten Inbetriebnahme passieren, wenn noch ein Fehler in der Verdrahtung vorliegt.
SD-Karte fehlt - Das erklärt sich von selbst. Hier fehlt die Micro-SD-Karte oder sie wurde nicht richtig gesteckt. Diese muss (wie weiter oben bereits beschrieben) etwas weiter in die Halterung gedrückt werden und rastet dann ein. Entfernt wird die Karte ebenfalls durch Eindrücken, die Verriegelung wird dann gelöst und die Karte kommt etwas aus der Halterung heraus.
Wenn einer dieser 3 Fehler auftritt, dann wird die Meldung bei Schaltungsvariante 1 für 3 Sekunden angezeigt. Anschließend schaltet sich das Gerät automatisch wieder aus. Bei Schaltungsvariante 2
erscheint die Meldung dauerhaft und das Programm wird angehalten. Es ist in jedem Fall erforderlich, das Problem zu beseitigen und erst dann ist ein fehlerfreier Start des Gerätes möglich.
Der Touchscreen im Sound Memory verwendet eine ältere Technik, bei der man ein wenig fester auf das Touchpanel drücken muss. Dabei berühren sich 2 spezielle Folien und über die Messung von
Widerstandswerten ermittelt ein Chip auf der Display-Platine die gedrückte Position. Damit die Position möglichst exakt ermittelt werden kann, ist eine einmalige Kalibrierung erforderlich. Das Sound
Memory versucht beim Einschalten eine Datei mit Kalibrierungsdaten aus dem Dateisystem zu laden. Beim ersten Start nach der Inbetriebnahme gibt es diese Datei noch nicht und dann wird eine
Kalibrierung gestartet.
Die Kalibrierung erfordert ein Hilfsmittel in Form eines Plastikstifts. Bei meinem Display lag ein solcher Stift bei, alternativ kann es auch ein anderer Gegenstand mit einer abgerundeten und nicht zu harten Spitze sein. Damit wird nun sanft und möglichst exakt auf die Spitze des angezeigten Pfeils links oben gedrückt. Wurde die Berührung erkannt, dann schaltet die Anzeige auf die nächste Ecke links unten um. Der Vorgang wird wiederholt, bis alle Ecken erfasst sind. Auf dem Display erscheint dann kurz OK zur Bestätigung, die ermittelten Daten werden im Dateisystem gespeichert und das Hauptmenü wird angezeigt.
Wie schon erwähnt, ist diese Kalibrierung nur einmal erforderlich. Das Sound Memory holt sich zukünftig die Kalibrierdaten bei jedem Einschalten aus dem Dateisystem. Sollten sich dennoch im Laufe der Zeit Ungenauigkeiten beim Touchpanel zeigen, dann kann die Kalibrierung jederzeit wiederholt werden. Dazu muss der Taster innerhalb einer Sekunde 4 mal hintereinander gedrückt werden. Das erfordert möglicherweise etwas Übung, soll aber verhindern, dass die Kalibrierung versehentlich aktiviert wird.
Übrigens, technisch bedingt kann das Touchpanel immer nur einen Berührungspunkt erkennen.
Hauptmenü und Spielablauf
Normalerweise sieht das Display des Sound Memory nach der Startphase so aus. Das ist das Hauptmenü, welches im Prinzip nur aus 3 großen Buttons und einer Statuszeile besteht. Grundsätzlich habe ich
alle Menüs einfach gehalten, damit auch Kinder damit zurechtkommen. Auch wenn sie den Text noch nicht lesen können, so lernen sie doch recht schnell, sich an den Symbolen oder an der Button-Position
zu orientieren.
Die Buttons sollten ihre Funktion weitgehend selbst erklären. Über den Button Neues Spiel beginnen kann direkt ein neues Spiel gestartet werden. Über den Button Spiel fortsetzen kann ein unterbrochenes Spiel weitergeführt werden. An dieser Stelle ist das nicht möglich, weil noch kein Spiel begonnen wurde und der Button ist deshalb inaktiv. Der untere Button Einstellungen / WLAN führt bei einer normalen Berührung in das Einstellungsmenü. Die WLAN-Funktion erreicht man, indem man den Button mindestens 5 Sekunden lang drückt. Auch hier soll der Zugang erschwert werden, da für den normalen Spielbetrieb kein WLAN benötigt wird.
Die Statuszeile im oberen Bereich zeigt den Punktestand aller Spieler vom letzten bzw. laufenden Spiel an. Auf diesem Bild direkt nach der Inbetriebnahme gibt es noch keine Spieldaten, deshalb erscheinen hier nur Striche. Grundsätzlich werden nur Punkte eines Spiels gezählt, eine Aufsummierung über mehrere Spiele erfolgt nicht.
Das Symbol rechts oben informiert ständig über den aktuellen Akku-Zustand, allerdings nur bei der Schaltungsvariante 1. Bei Variante 2 ist ständig ein graues Symbol zu sehen, da die Spannung der
Powerbank nicht überwacht werden kann. Bei Li-Ion-Akkus lässt sich der Ladestand ungefähr über die Spannung ermitteln. Diese wird jede Sekunde gemessen und die letzten 8 Messungen ergeben einen
Mittelwert, der für die Anzeige genutzt wird.
Der angezeigte Akku-Stand wird kontinuierlich abnehmen und bei niedrigem Stand ändert sich auch die Farbe des Symbols:
![]() | So sollte der Akku-Zustand direkt nach dem Aufladen angezeigt werden. |
![]() | Nach einigen Stunden Spielzeit geht die Energie langsam zur Neige. |
![]() | Hier geht es nun wirklich dem Ende entgegen, es wird Zeit zum Aufladen. Das Symbol blinkt, damit es besser wahrgenommen wird. |
![]() | Bei Schaltungsvariante 2 erscheint immer dieses Symbol. Die Powerbank kann nicht gemessen werden. |
Übrigens, durch Lastschwankungen kann es passieren, dass bei den Übergängen Grün/Gelb bzw. Gelb/Rot vorübergehend mehrfach die Farbe hin und her wechselt.
Noch ein Hinweis: Es gibt grundsätzlich in den Menüs keinen Button für die Rückkehr ins Hauptmenü. Diese Funktion übernimmt der Taster. Gleichzeitig mit dem Menüwechsel werden dabei die aktuellen Spieldaten und Einstellungen gespeichert.
Drückt man im Hauptmenü auf den Button Neues Spiel beginnen, dann erscheint das nebenstehende Bild. Alle Mitspieler haben nun die Möglichkeit, ihre Spielfarbe zu wählen,
indem sie auf das entsprechende Farbfeld drücken. Jedes ausgewählte Farbfeld ändert dann die Beschriftung in ein Haken-Symbol. Sollte man sich vertippt haben, dann ist das kein Problem: Einfach das
gleiche Feld nochmals drücken und der Haken verschwindet wieder.
Sobald mindestens ein Farbfeld ausgewählt wurde, wird außerdem der rechte Button Spiel starten aktiv.
Hier haben sich 2 Mitspieler für die Farbe Rot bzw. Blau entschieden. Durch Drücken des Buttons Spiel starten geht es los.
Im Hintergrund passiert jetzt einiges: Es wird ein neues Spielfeld generiert. Dazu ermittelt ein Zufallsgenerator eine Nummer zwischen 1 und 25 und wählt somit einen Sound aus. Ebenfalls durch Zufall
werden nun 2 Buttons bestimmt und dort die Sound-Nummer hinterlegt. Dieser Vorgang wiederholt sich so lange, bis alle Buttons des Spielfeldes mit einem Sound belegt sind. Jetzt werden noch die
Punktestände aller Spieler auf 0 gesetzt und wiederum durch Zufall ausgewählt, wer das Spiel beginnen soll.
Das Spiel beginnt. Der Zufallsgenerator hat entschieden, dass der Spieler mit der Farbe Rot beginnt und das Spielfeld in dieser Farbe gezeichnet. In der Statuszeile oben wurden die Punktestände für
die beiden Mitspieler Rot und Blau auf 0 gesetzt. Die Punktestände der anderen Spielerfarben bleiben inaktiv.
Der Spieler Rot darf jetzt einen Button drücken und der dort hinterlegte Sound wird abgespielt. Er hat sich für den Button 10 entschieden. Alle Mitspieler sollten gut
aufpassen und sich den Button sowie den Sound merken.
Spieler Rot darf jetzt noch einen weiteren Button drücken und der dort hinterlegte Sound wird wiederum abgespielt. Diesmal sollte es die 18 sein.
Dieses Bild bleibt genau für 2 Sekunden so stehen, danach wird das Spielfeld neu aufgebaut.
Leider hatte Spieler Rot kein Sound-Paar gefunden und so ist jetzt der nächste Spieler an der Reihe. Die Reihenfolge entspricht dabei immer den Farben in der Statuszeile. Nach Rot folgt Grün und da
es hier keinen grünen Spieler gibt, geht es also mit Blau weiter und das Spielfeld wird jetzt in dieser Farbe gezeichnet.
Nun kann also Spieler Blau seine beiden Buttons drücken und ebenfalls versuchen, ein Sound-Paar zu finden.
Übrigens, man muss nicht warten, bis ein Sound zu Ende gespielt wird. Sobald man einen Button drückt, wird ein laufender Sound beendet und sofort der neue abgespielt. Es gibt allerdings 2
Sperrzeiten: Nach dem Druck auf den ersten Button muss man mindestens 0,5 Sekunden warten und erst dann wird die zweite Eingabe akzeptiert. Nach dem zweiten Button muss mindestens 2 Sekunden gewartet
werden.
Irgendwann wird auch mal ein Sound-Paar gefunden und wenn das passiert, wird das entsprechende Button-Paar deaktiviert. Das Spielfeld bleibt dann in der Farbe des letzten Spielers und dieser darf
nochmals 2 Buttons drücken.
Hier ist das Spiel schon etwas fortgeschritten und Spieler Rot hat mit 4 Punkten die Führung übernommen.
Sind alle Sound-Paare gefunden, dann ist das Spiel beendet und die Spielauswertung wird angezeigt. Auf der linken Seite erscheint eine einfache Tabelle mit der Platzierung und den erspielten Punkten.
Hier hat sich am Ende der Spieler Blau mit 9 Punkten durchgesetzt und wird mit einem entsprechend gefärbten Pokal geehrt.
Die Tabelle passt sich immer an die Anzahl der Spieler an. Das Spiel verwendet eine ungerade Anzahl von Sound-Paaren, so gibt es bei 2 Spielern immer einen eindeutigen Gewinner. Bei 3 oder 4 Spielern müssen sich manchmal auch mehrere Spieler den Siegerplatz teilen. In diesen Fällen erscheint der Pokal in Gelb.
Über den grünen Button gelangt man wieder ins Hauptmenü. Dort bleibt in der Statuszeile der letzte Punktestand weiterhin sichtbar. Dieser wird erst gelöscht, wenn ein neues Spiel gestartet wird.
Ein laufendes Spiel lässt sich übrigens jederzeit durch einen Druck auf den Taster abbrechen. Der aktuelle Spielstand wird dann gespeichert und es erscheint das Hauptmenü auf dem Display. Hier ist jetzt der Button Spiel fortsetzen aktiviert und man kann das abgebrochene Spiel an der gleichen Stelle fortsetzen. Man kann diese Option beispielsweise für einen Wechsel in das Einstellungsmenü verwenden, um dort die Lautstärke anzupassen. Danach lässt sich das Spiel entsprechend leiser oder lauter fortsetzen. Längere Unterbrechungen sind allerdings wenig sinnvoll, denn man wird sich dann nicht mehr an die Button-Positionen und Sounds erinnern.
Einstellungen und WLAN-Funktion
Über einen Druck auf den Button Einstellungen / WLAN im Hauptmenü erreicht man die Einstellungen.
Auch dieses Menü ist einfach aufgebaut. Über den oberen Button wählt man die gewünschte Soundbank aus, wobei durch Drücken des Buttons auf die nächste Soundbank gewechselt wird. Zur Auswahl stehen
hier Tierstimmen, Musikinstrumente, Geräusche aus aller Welt und Kinderlieder. Ein weiterer Druck
auf den Button schaltet wieder zu den Tierstimmen zurück.
Der mittlere Button legt die Größe des Spielfeldes und somit auch den Schwierigkeitsgrad fest. Auch hier wird durch Drücken des Buttons auf die nächste Stufe gewechselt. Zur Auswahl stehen hier Kleines Spielfeld (26), Mittleres Spielfeld (38) und Großes Spielfeld (50). Ein weiterer Druck führt wieder zum kleinen Spielfeld. Der Wert in Klammern informiert über die Anzahl der Buttons im Spielfeld. Das entspricht dann 13, 19 oder 25 Sound-Paaren.
Die 3 Buttons ganz unten gehören zusammen und dienen zur Einstellung und Kontrolle der Lautstärke. Über den mittleren Button Test kann ein zufällig ausgewählter Sound aus der aktuellen Soundbank abgespielt werden, um die eingestellte Lautstärke zu beurteilen. Eine einfache Balken-Grafik zeigt dabei den aktuellen Lautstärkewert an. Über die seitlichen Buttons - und + kann der Wert um eine Stufe vermindert oder erhöht werden.
Die Titelzeile wird hier genutzt, um die Software-Version anzuzeigen.
Über einen kurzen Druck auf den Taster kommt man wieder ins Hauptmenü zurück.
Das Sound Memory kann eine Verbindung zu einem WLAN herstellen. Für das Spiel selbst wird diese Verbindung nicht benötigt, aber man kann damit die Firmware des Gerätes updaten. Die WLAN-Funktion erreicht man, indem man im Hauptmenü mindestens 5 Sekunden lang auf den Button Einstellungen / WLAN drückt. Man erkennt den Zeitpunkt zum Loslassen daran, dass der Button wie von Geisterhand vom gedrückten in den losgelassenen Zustand wechselt.
Auf diesem Bild ist das WLAN-Menü zu sehen und nur hier wird die WLAN-Verbindung aktiv. In allen anderen Menüs bleibt die WLAN-Funktion ausgeschaltet, da sie dort nicht benötigt wird und natürlich
auch um Energie zu sparen.
Wenn noch keine WLAN-Daten vorhanden sind, dann zeigt sich dieses Bild. Um eine Verbindung zum WLAN herzustellen, werden jetzt der Name des WLAN (SSID) sowie das Passwort benötigt.
Zur Eingabe des WLAN-Namens gibt es hier 2 Möglichkeiten: Der obere Button WLAN-Name auswählen startet eine WLAN-Suche und zeigt anschließend eine Übersicht mit den gefundenen Netzwerken an. Alternativ lässt sich über den mittleren Button WLAN-Name eingeben der Name auch direkt über eine virtuelle Tastatur eingeben. Die gleiche virtuelle Tastatur wird benötigt, um über den unteren Button WLAN-Passwort eingeben das Passwort einzugeben.
Außer den 3 Buttons zur Dateneingabe gibt es ganz oben eine Zeile, die über den Status der WLAN-Verbindung informiert. Sobald die WLAN-Daten vorhanden sind und eine Verbindung hergestellt wurde, sollte hier eine IP-Adresse erscheinen. Links daneben wird dann die Stärke des WLAN-Signals angezeigt.
Direkt darunter befindet sich eine dünne graue Linie. Diese zeigt bei einem laufenden Firmware-Update den Fortschritt an. Hier war ursprünglich ein größerer Balken vorgesehen. Es hat sich aber
gezeigt, dass der ESP32-C3 beim Firmware-Update alle Hände voll zu tun hat und kaum Ressourcen für das Zeichnen des Balkens übrig bleiben. Unterhalb dieser Linie gibt es noch ein weiteres Feld, hier
erscheinen nach Eingabe von WLAN-Name bzw. Passwort weitere Informationen.
Dieses Bild zeigt das Ergebnis einer über den Button WLAN-Name auswählen gestarteten Netzwerksuche. Hier wurden 9 Netzwerke gefunden und auf dem Bild unkenntlich gemacht. Das
Ergebnis einer Suche wird immer in Form einer Button-Tabelle angezeigt. Diese kann (wie hier) aus 6 Buttons bestehen, die in 2 Spalten angeordnet sind oder aber aus 6 breiten Buttons, wenn nur wenige
Netzwerke gefunden wurden. Maximal können 12 Netzwerke angezeigt werden. Meist erscheinen die stärksten ganz oben und so sollte das Heimnetz eigentlich immer in der Liste zu finden sein.
Ist der gewünschte Netzwerkname dabei, dann kann man einfach auf den entsprechenden Button drücken. Der Name wird dann übernommen und zum WLAN-Menü zurückgekehrt.
Ist das gewünschte Netzwerk nicht in der Liste, dann muss man durch einen Druck auf den Taster die Liste wieder verlassen und ins WLAN-Menü zurückgehen. Hier kann man nochmals eine Suche starten oder
den Namen über den Button WLAN-Name eingeben direkt eingeben.
Ist es notwendig, den WLAN-Namen direkt einzugeben, dann erreicht man diese Funktion im WLAN-Menü über den mittleren Button WLAN-Name eingeben. Es erscheint dann eine
virtuelle Tastatur und ein Textfeld im oberen Bereich.
Die Tastatur hat einen ähnlichen Aufbau wie eine Standard-Tastatur. Allerdings gibt es hier keine Shift- oder Alt-Tasten zur Umschaltung. Stattdessen wird eine spezielle Taste verwendet, um 3 verschiedene Layouts anzuzeigen:
• Ziffern und Kleinbuchstaben
• Ziffern und Großbuchstaben
• Sonderzeichen
Alle grünen Buttons können zur Eingabe verwendet werden und die entsprechenden Zeichen erscheinen dann oben im Textfeld. Der WLAN-Name darf maximal 32 Zeichen lang sein und mehr erlaubt die Tastatur
auch nicht. Außerdem gibt es noch die Besonderheit, dass aus Platzgründen nur die letzten 25 Zeichen sichtbar sind.
Die anders gefärbten Buttons haben spezielle Funktionen:
![]() | Über diesen Button wird die Tastatur von Ziffern und Kleinbuchstaben auf
Ziffern und Großbuchstaben umgeschaltet. |
![]() | Über diesen Button wird die Tastatur von Ziffern und Großbuchstaben auf
Sonderzeichen umgeschaltet. |
![]() | Über diesen Button wird die Tastatur von Sonderzeichen auf
Ziffern und Kleinbuchstaben umgeschaltet. |
![]() | Mit diesem Button wird das letzte Zeichen im Textfeld gelöscht. |
![]() | Dieser Button beendet die Eingabe. Der eingegebene Name wird gespeichert und es erscheint wieder das WLAN-Menü. |
Übrigens, bei dieser Tastatur können nur Zeichen ans Textende angefügt und nur am Ende gelöscht werden. Es ist nicht möglich, Zeichen innerhalb des Textes zu korrigieren. Soll die Eingabe abgebrochen werden, dann genügt ein kurzer Druck auf den Taster. Die Eingabe wird dann verworfen und wieder ins WLAN-Menü zurückgekehrt.
Nach der Auswahl bzw. Eingabe des WLAN-Namens ist noch die Eingabe des WLAN-Passworts notwendig. Dazu wird im WLAN-Menü der Button WLAN-Passwort eingeben gedrückt und auch hier erscheint wieder die virtuelle Tastatur. Diese verhält sich genauso wie bei der Eingabe des WLAN-Namens mit dem einzigen Unterschied, dass hier bis zu 63 Zeichen eingegeben werden können. Auch hier wird die Eingabe mit dem roten Haken-Button abgeschlossen oder durch einen Druck auf den Taster verworfen.
Wenn alle Eingaben korrekt waren und das ausgewählte WLAN in Reichweite ist, dann wird eine Verbindung aufgebaut und der Router sollte dem Sound Memory eine IP-Adresse zuweisen. Auf dem Bild sieht alles gut aus und die Signalstärke zeigt an, dass der Router nicht weit entfernt ist.
Mit einem Druck auf den Taster kann das WLAN-Menü wieder verlassen werden. Dabei wird die Verbindung getrennt, das WLAN-Funktionsmodul ausgeschaltet und es erscheint wieder das Hauptmenü.
Wenn zukünftig die WLAN-Funktion benötigt wird, dann muss nur im Hauptmenü über den Button Einstellungen / WLAN das WLAN-Menü aufgerufen werden. Es wird dann automatisch eine
Verbindung zum gespeicherten WLAN aufgebaut. Die 3 Buttons werden dann nur benötigt, wenn ein anderes WLAN genutzt werden soll.
Die Balkengrafik für das WLAN-Signal wird von der gemessenen Signalstärke abgeleitet:
![]() | Die Signalstärke liegt über -50 dBm (sehr gut). |
![]() | Die Signalstärke liegt zwischen -59 und -50 dBm (gut). |
![]() | Die Signalstärke liegt zwischen -69 und -60 dBm (ausreichend). |
![]() | Die Signalstärke liegt zwischen -79 und -70 dBm (schlecht). |
![]() | Die Signalstärke liegt unter -79 dBm (sehr schlecht). |
Firmware-Update
Keine Software ist fehlerfrei und das gilt auch für das Sound Memory. Es ist auch nicht ausgeschlossen, dass das Spiel noch erweitert wird und neue Funktionen hinzukommen. Wie auch immer, es ist möglich, dass auf dieser Seite irgendwann eine neue Firmware bereitgestellt wird. Diese kann man herunterladen und entpacken. Hier findet man die Datei firmware.bin und diese brauchen wir für die nachfolgende Update-Prozedur.
Firmware-Updates können über die WLAN-Funktion des Sound Memory installiert werden. Dazu wird, wie etwas weiter oben beschrieben, im Hauptmenü der Button Einstellungen / WLAN für 5 Sekunden gedrückt. Danach erscheint das WLAN-Menü und wenn die WLAN-Zugangsdaten bereits eingegeben wurden, stellt das Gerät eine WLAN-Verbindung her und bekommt eine IP-Adresse vom Router des Netzwerks zugewiesen. Intern passiert noch mehr: Es wird ein WEB-Server gestartet und dieser wartet darauf, dass sich ein weiteres Gerät im Netzwerk (PC, Laptop, Smartphone oder Tablet) mit der IP-Adresse des Sound Memory verbindet.
Auf dem anderen Gerät wird jetzt ein Web-Browser gestartet und in die Adresszeile ganz oben die IP-Adresse des Sound Memory eingegeben. Ist die Adresse beispielsweise 192.168.1.45, dann ist die folgende Eingabe erforderlich:
http://192.168.1.45
Es erscheint dann eine einfache Web-Seite mit Informationen zur aktuellen Software und Hardware des Sound Memory. Außerdem wird der Name des WLAN und die Signalstärke angezeigt. Über den Button
Aktualisieren wird die Seite neu geladen und die Signalstärke aktualisiert.
Soll ein Firmware-Update durchgeführt werden, dann wird im unteren Bereich zunächst auf den Button Durchsuchen ... geklickt. Dieser Button kann je nach verwendetem Browser auch mit Datei auswählen oder Browse... beschriftet sein. Die Funktion ist aber immer gleich und bewirkt, dass sich ein Dialog-Fenster öffnet, in dem eine Datei ausgewählt werden kann. Hier suchen und markieren wir die zuvor geladene und entpackte firmware.bin und bestätigen die Auswahl. Das Dialog-Fenster wird wieder geschlossen und auf der Web-Seite erscheint nun neben dem Button der ausgewählte Dateiname.
Mit einem Klick auf den Button Update starten wird der Update-Vorgang gestartet. Auf der Web-Seite passiert zunächst nichts, aber auf dem Sound Memory sollte sich jetzt der
schmale Fortschrittsbalken von links beginnend Orange färben und schließlich komplett auf Grün wechseln.
Jetzt ändert sich auch die Web-Seite und zeigt den erfolgreichen Update-Vorgang an. Das Sound Memory führt jetzt noch einen Neustart durch und damit ist das Update abgeschlossen. Auf dem Sound Memory
sollte man jetzt die Einstellungen aufrufen. Hier kann man in der Titelzeile kontrollieren, ob die neue Firmware aktiv ist.
Dieses Bild ist zu sehen, wenn man das Update ohne vorherige Dateiauswahl startet oder wenn eine falsche Datei ausgewählt wurde. Auch eine sehr schlechte WLAN-Verbindung kann diesen Fehler
verursachen. In diesem Fall sollte man nochmals alles kontrollieren und den Update-Vorgang wiederholen.
Ein Firmware-Update über WLAN dauert inklusive dem anschließenden Neustart nicht länger als 15 Sekunden. Danach ist das Sound Memory sofort wieder einsatzbereit und es gehen auch keine Einstellungen verloren. Es besteht trotzdem immer ein gewisses Risiko, dass dabei etwas schiefgeht und das Gerät nicht mehr startet. Es muss dann mit einer Inbetriebnahme-Prozedur wiederbelebt werden. Ich habe allerdings bei der Entwicklung des Sound Memory oft das WLAN-Update benutzt und das hat immer zuverlässig funktioniert.
Einige Schwächen des Sound Memory möchte ich nicht verschweigen:
- Grundsätzlich ist das Display von guter Qualität, aber perfekt ist es leider nicht. Die Anzeige ist etwas abhängig vom Blickwinkel und zeigt insbesondere von links betrachtet leichte Farbverfälschungen. Auch das Touchpanel hat kleine Schwächen. So ist es technisch bedingt an den Rändern etwas unempfindlich und gelegentlich passiert es im Spiel, dass anstatt des gedrückten Buttons ein darunterliegender Button erkannt wird.
- Nur bei Schaltungsvariante 1: In einem laufenden Spiel und in allen Menüs kann mit dem Taster zum Hauptmenü gesprungen oder das Gerät ausgeschaltet werden. Es gibt aber eine Ausnahme: Eine Touchpanel-Kalibrierung kann nicht unterbrochen werden. Man muss also die Kalibrierung durchführen, damit das Sound Memory wieder normal bedient werden kann. Sollte dies aufgrund eines Fehlers am Touchpanel nicht möglich sein, dann muss man leider das Gerät aufschrauben und den Jumper öffnen. Vielleicht finde ich dafür irgendwann eine Lösung.
Hier noch einige Informationen über die im Sound Memory verwendeten Grafiken, Symbole und Sounds. Diese stammen zu einem großen Teil von kostenlosen Angeboten im Web, welche auch die Weiterverwendung erlauben. Einige Symbole in den Menüs und auch einige Sounds habe ich selbst erstellt. Die folgende Tabelle listet einige Quellen auf:
| https://pixabay.com/de/ | Pixabay (Sounds, Symbole und Icons) |
| https://www.salamisound.de/ | Salamisound (Sounds) |
| https://www.audiyou.de/home/ | Audiyou (Sounds) |
| https://freesound.org/ | FreeSound (Sounds) |
| https://icon-sets.iconify.design/ | Iconify (Symbole und Icons) |
Man kann auch eigene Sounds für das Sound Memory erstellen. Das ist nicht schwer, aber sehr zeitaufwändig. Die Sounds müssen geschnitten und mit einer Ein- bzw. Ausblendung versehen werden. Außerdem muss man darauf achten, dass die Lautstärke aller Sounds möglichst gleich ist. Folgende Programme sind dafür sehr hilfreich:
| https://www.audacityteam.org/ | Audacity - Mit diesem kostenlosen Programm (Windows, macOS, Linux) lassen sich Sound-Dateien bearbeiten. |
| https://mp3gain.sourceforge.net/ | MP3Gain - Dieses etwas ältere Windows-Programm ermöglicht die Änderung der Lautstärke von MP3-Dateien ohne Neukodierung. |
Während der Entwicklung des Sound Memory kamen noch einige weitere Hilfsmittel zum Einsatz:
| https://github.com/SnijderC/dyplayer | Diese Bibliothek (C++) erlaubt die einfache Ansteuerung der DY-Sound-Module. Ich habe diese Bibliothek nicht im Projekt verwendet, hier aber viele hilfreiche Informationen über die Sound-Module bekommen. |
| https://notisrac.github.io/FileToCArray/ | Dieses Online-Tool bietet die Möglichkeit, nahezu beliebige Grafiken in C-Arrays zu konvertieren. Ich habe damit alle Grafiken und Symbole für die Menüs ins Programm eingefügt. |
| https://tchapi.github.io/Adafruit-GFX-Font-Customiser/ | Dies ist ebenfalls ein Online-Tool und ermöglicht die Bearbeitung von grafischen Zeichensätzen, die von der TFT_eSPI-Bibliothek verwendet werden. Mit diesem Tool habe ich zusätzliche Umlaute und Sonderzeichen in 2 Zeichensätze eingefügt. |
An dieser Stelle möchte ich mich bei den Entwicklern der Software-Komponenten (pioarduino, Bibliotheken und Tools) sowie bei den Web-Anbietern (Grafiken, Icons und Sounds) bedanken.

















