Im letzten Artikel habe ich die Raspberry-Pi-Version des Projekts vorgestellt: ein vollstaendiges, funktionierendes Open-Source-System. Und ich endete damit, dass es Zeit fuer ein neues Kapitel ist. Hier kommt also der Anfang der Fortsetzung.
Warum weg vom Raspberry Pi
Im Alltag hat der Raspberry Pi seine Grenzen. Er ist teuer, verbraucht viel, startet langsam und laesst ein komplettes Betriebssystem laufen fuer etwas, das im Kern ein NFC-gesteuerter Audioplayer ist. Das ist zu viel fuer das, was er macht.
Nach einigem Recherchieren und ein paar wertvollen Ratschlaegen habe ich mich endgueltig davon ueberzeugt, die Raspberry-Pi-Version zu pausieren und mich auf die Entwicklung der ESP32-Version zu konzentrieren. Schlanker, deutlich guenstiger, sehr stromsparend und vor allem volle Kontrolle ueber das, was laeuft. Kein OS, keine Updates, die Treiber zerschiessen, keine ueberfluessigen Abstraktionsschichten. Nur die Anwendung, direkt auf dem Mikrocontroller.
Es war keine leichte Entscheidung. Ich hatte schon ziemlich lange an der Python-Version gearbeitet und war gerade dabei, Bugs zu fixen, nur zog sich dieser Teil immer mehr in die Laenge, waehrend ich parallel gemerkt habe, dass der ESP32 fuer die Zukunft interessanter ist. Ich wollte den richtigen Punkt zwischen "fertig machen, was begonnen wurde" und "ein Projekt einfach liegen lassen" finden.
Die Entscheidung hat sich dann von selbst aufgedraengt.
Die gesamte Codebase neu schreiben
Das Problem: Man portiert kein Python auf einen ESP32. Es musste alles in C++ neu aufgesetzt werden. Und die Sprache kannte ich nicht.
print("Hello, World!")#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}Das war eine riesige Herausforderung. C++ hat nichts damit zu tun, was ich bis dahin gemacht hatte: manuelle Speicherverwaltung, Kompilieren, Ressourcen-Limits, kein Garbage Collector. Eine ganz andere Denkweise.
Wie schon beim ersten Proof of Concept haben mir generative KIs sehr geholfen. Beim Einstieg, beim Verstehen der Patterns, beim Erkennen, was ich falsch mache. Aber diesmal war der konzeptionelle Sprung groesser: Ich musste wirklich lernen, nicht nur meine iOS-Entwicklerreflexe uebertragen.
Nach ein paar Monaten Beharrlichkeit habe ich aber etwas Funktionierendes. Das System laeuft, liest Karten, spielt Musik ab, verwaltet Playlists. Das Geruest steht, und es steht auf einem Mikrocontroller fuer ein paar Euro.
Die richtige Platine finden
Angefangen habe ich mit einem Arduino Nano ESP32-S3. Schoene kleine Platine, perfekt fuer den Start. Nur fehlte alles andere: NFC-Leser, Audio-Ausgang, SD-Karten-Leser, Stromverwaltung. Fuer jede Komponente ein externes Modul, mehr Kabel. Praktisch zum Anfangen, aber so nicht nutzbar fuer meine Kinder.

Bei der Suche bin ich auf eine Platine gestossen, die die Basis-Komponenten fuers Projekt schon mitbringt: den NFC Reader von HermitX, in der Variante N8R8. ESP32-S3, NFC-Leser integriert, Audio-Ausgang, SD-Karten-Leser, aber keine Akku-Verwaltung. Eine Platine, die genau fuer diese Art von Anwendung gedacht ist und mir erspart, bei jeder Iteration alles neu zu verkabeln.

Auf dieser Platine laeuft der aktuelle Prototyp.
Das Gehaeuse, schlichter
Waehrend ich die Firmware neu geschrieben habe, habe ich auch das Gehaeuse-Modell neu aufgesetzt. Die v3 hatte eine wuerfelfoermige Struktur, gedacht als 3D-gedrucktes Geruest mit lasergeschnittenen MDF-Platten als Seitenflaechen. Schoen im Rendering, aber aufwendig zu drucken, und jeder Fehlschlag hat Stunden Druckzeit gekostet.
Also habe ich alles vereinfacht. Keine komplexe Struktur mehr, keine Paneele mehr, die auf den Zehntelmillimeter passen muessen. Eine schlichte Box, kompakter, einfacher zu drucken, die die Platine, den Lautsprecher und den Akku aufnimmt, und das war's.
Weniger Teile, weniger Kalibrierung, weniger Gelegenheiten, sich zu verzetteln.
Was noch offen ist
Die grosse, ungeloeste Baustelle ist immer noch die Akku-Verwaltung. Ich nutze immer noch denselben LiPo Rider wie bei der v3, und er hat dieselbe Schwaeche: Wenn man den USB-Stecker zieht, fuehrt das Umschalten auf Akku zu einem kurzen Stromabriss, der die Platine neu starten laesst.
Die gute Nachricht: Der ESP32 startet in zehn Sekunden. Gegenueber einer bis zwei Minuten beim Raspberry Pi. Das ist nicht perfekt, aber Welten dazwischen. Im Alltag aendert das alles: Man zieht den Stecker, sie startet neu, und es ist fast unbemerkt.
Was ich daraus mitnehme
Von vorne anzufangen macht im ersten Moment Angst. Man laesst Code zurueck, der funktioniert hat, ein Gehaeuse, das jeden Tag zu Hause lief, Monate an Gebastel. Aber es war die richtige Entscheidung.
Das Projekt ist jetzt naeher an dem, was es eigentlich sein sollte: ein schlichter Gegenstand, sparsam, der eine Sache macht und die gut. Und ausgerechnet die harte Beschraenkung des Mikrocontrollers zwingt mich, sauberer zu programmieren als auf dem Raspberry Pi. Und das Schoenste: Man kann endlich damit unterwegs sein, weil das Ganze viel leichter ist und mehr als fuenf Stunden mit einer Akkuladung durchhaelt.
Als naechstes geht es darum, die Firmware zu stabilisieren, die Stromversorgung in den Griff zu bekommen und ernsthaft daran zu arbeiten, was aus diesem Prototypen etwas macht, das andere Leute nachbauen koennen. Dazu mehr im naechsten Artikel.