45 Euro für ein rundes AMOLED-Display mit ESP32-S3 drin, verkauft als „StopWatch“. Am 1. September ausgepackt, am 2. September zeigt das Ding meinen Stromverbrauch, das Regenradar über Salzburg, den Kalender, das letzte Spiel von Red Bull Salzburg und den Status meines Mähroboters. Eine Stoppuhr war es keine einzige Sekunde. Das ist keine Kaufempfehlung. Das ist die Geschichte, wie aus einem Wochenend-Gimmick mit Claude Code ein waschechtes Infodisplay wurde. Du bekommst am Ende die komplette Architektur, die Fallen, in die ich getreten bin, und eine ehrliche Antwort auf die Frage, ob sich sowas für dich lohnt.
Fangen wir mit dem Gerät an, so wie es aus der Box kam.
Was ist die M5Stack StopWatch eigentlich?
Kurz zur Begriffsklärung, weil das Ding einen irreführenden Namen trägt. Die StopWatch (SKU C152) von M5Stack ist ein rundes Entwicklerboard mit ESP32-S3R8-Prozessor, 16 MB Flash, 8 MB PSRAM und einem 1,75-Zoll-AMOLED-Touchdisplay mit 466 mal 466 Pixel. Dazu Mikrofon, Lautsprecher, Bewegungssensor, Echtzeituhr und ein 450-mAh-Akku. Verkauft wird sie als Stoppuhr für Sportler, Sprecherinnen, alles, was Zeit misst. ESP32 ist der Mikrocontroller-Chip, den halb die Bastlerszene für WLAN-Projekte einsetzt, günstig, gut dokumentiert, mit riesiger Community.
Ich hab das Ding nie als Stoppuhr benutzt. Nicht eine Sekunde.
Warum eine Stoppuhr für mich vertane Chance war
Ich hab seit 2024 ein Zuhause, das ziemlich viel über sich selbst weiß. Ein Raspberry Pi mit Home Assistant kennt meine Stromproduktion, das Wetter meines Gartensensors, drei Kalender, den Status meines Mähroboters, sogar wie viel von meinem Claude-Wochenlimit noch übrig ist. Das ist nicht das erste Mal, dass ich so ein Gadget zweckentfremde. Ich hab das schon mit der BUSY Bar gemacht, einer LED-Matrix, die eigentlich Bürostatus anzeigen sollte und jetzt dieselben Home-Assistant-Daten am Schreibtisch zeigt. Die StopWatch ist die mobile Version davon. Rund, farbig, akkubetrieben, geht mit ins Wohnzimmer, in die Küche, ins Auto.
Ein rundes AMOLED-Display, das nur Sekunden zählt, während zehn Meter weiter ein Home-Assistant-Server mit Dutzenden Sensoren läuft: Das ist, mit Verlaub, Verschwendung von Silizium.
Der erste Abend mit Claude Code
Projektordner angelegt, PlatformIO installiert, Claude Code gestartet. Am 1. und 2. September 2026 ist die komplette Firmware entstanden, Stack: PlatformIO mit espressif32 @ 6.12.0, Board esp32s3box, M5Unified und M5GFX direkt von GitHub, ArduinoJson 7 für die Datenverarbeitung. Die Board-Konfiguration hab ich eins zu eins aus der M5-Doku übernommen, das spart einem die Nacht, die ich beim StackChan-Projekt mit falschen Display-Treibern verbraten hab. Ich sag Claude Code, was ich will, in normalen Sätzen. Kein Python-Environment-Drama diesmal, kein GitHub-Issue, das ich selbst aufmachen muss. Das ist der Unterschied zwischen einem guten und einem schlechten Bastelabend: nicht die Hardware, sondern ob die Dokumentation stimmt.
Geflasht wird mit einem einzigen Terminalbefehl, py -m platformio run -t upload. Alles andere, WLAN-Handling, Webserver, DNS, Einstellungen, kommt aus den Bordmitteln des ESP32-Cores. Kein zusätzliches Framework, das man erst verstehen muss.
Wie das Gerät sich selbst ins WLAN findet
Bis zu acht Netze speichert das Ding im internen Speicher, beim Start nimmt es automatisch das stärkste erreichbare. Kein bekanntes Netz da: Die StopWatch spannt selbst einen Accesspoint auf, WPA2-geschützt, Name und Passwort aus der eigenen MAC-Adresse abgeleitet, plus QR-Code direkt am Display zum Scannen. Ein Captive Portal mit Netzliste und manuellem Eingabefeld erledigt den Rest. Ein Knopfdruck beim Einschalten löscht alle gespeicherten Netze, falls mal was schiefgeht.
Ein Detail, das mich eine Stunde gekostet hat: Der iPhone-Hotspot muss vorher eingetragen werden, weil iOS den Hotspot abschaltet, sobald das iPhone selbst dem Setup-WLAN beitritt. Und in den Hotspot-Einstellungen muss „Kompatibilität maximieren“ an sein, sonst funkt das iPhone auf 5 GHz, was der ESP32 nicht kann. Das ist keine Doku-Lücke von M5Stack, das ist einfach, wie iOS tickt.
Der Weg zu Home Assistant, und warum er nicht trivial war
Mein Home Assistant läuft nicht im Heimnetz, sondern remote hinter Cloudflare. Der ESP32 kann kein Tailscale, also musste alles über normales HTTPS gehen. Drei Stolperfallen, alle gelöst, alle mit Übertragswert für dein nächstes Projekt:
- Cloudflare blockiert untypische User-Agents mit Fehler 1010. Ein normaler Browser-User-Agent im Request löst das.
- Der ESP32 hat keinen eingebauten Zertifikatsspeicher. Die Root-Zertifikate von Let’s Encrypt, ISRG Root X1 und X2, mussten direkt in die Firmware eingebettet und gegen die echte Zertifikatskette validiert werden.
- Der Zugriffs-Token liegt im internen Speicher und lässt sich über die Weboberfläche austauschen, ohne die Firmware neu zu flashen.
Alle Sensorwerte kommen mit einem einzigen POST-Request: Home Assistant rendert 26 Werte als Text, mit Strichen getrennt, in einer Antwort. Das erspart 25 einzelne verschlüsselte Verbindungsaufbauten pro Aktualisierungsrunde, was bei einem batteriebetriebenen Gerät direkt Laufzeit bedeutet. Termine kommen über einen eigenen Kalenderabruf mit Zeitfenster, weil ein einzelner ganztägiger Termin sonst alle folgenden Termine im gleichen Abruf verdeckt hätte. Das war keine offensichtliche Falle, das musste ich erst durch einen leeren Terminkalender-Screen entdecken.
Warum ausgerechnet dieses Gerät
Ich bin Nerd und Spielkind, in dieser Reihenfolge, und beides zusammen erklärt, warum ich mir ausgerechnet ein Ding gekauft hab, das ich nie zweckgemäß nutzen wollte. Mein Freund – der Salzburger Eventmanager – hätte bei so einem Kauf vermutlich den Kopf geschüttelt. Ich schau mir sowas an und denk: rundes AMOLED, ESP32-S3, unter 50 Euro, das reicht als Grundlage für praktisch jedes Infodisplay. Der Name auf der Verpackung war für mich von Anfang an Nebensache.
Das ist auch der Grund, warum ich immer wieder bei Consumer-Gadgets lande, die eigentlich für etwas ganz anderes gedacht sind. Nicht weil ich die Original-Funktion nicht brauche, sondern weil gute Hardware zu günstigem Preis eine Einladung ist. Bei der BUSY Bar war’s eine Statusleiste, bei der StopWatch ist’s eine Zeitmessung, beim StackChan ein Spielzeug-Roboter. Dreimal dieselbe Frage: Was steckt technisch drin, und was könnte ich daraus machen, wenn ich die eigentliche Firmware einfach ignoriere?
Vierzehn Module im Wechsel
Uhr, Energie, Wetter, Vorhersage, Regen, Regenradar, Temperaturen, Homeserver-Status, Claude-Nutzung, Termine, Fußballspiel, letztes Spielergebnis, Zuhause-Status, Mähroboter. Die Farblogik und Formatierung hab ich eins zu eins aus dem BUSY-Bar-Projekt übernommen, warum eine funktionierende Ampel-Logik für Ladezustand und Temperatur neu erfinden.
Beim Regenradar musste ich improvisieren: Der genutzte Kartendienst gibt kostenlose Kacheln nur bis Zoomstufe 7 her, darüber kommt ein Fehlerbild. Also keine Hintergrundkarte, sondern Ringe bei 25 und 50 Kilometer Radius plus neun geocodierte Orte als Referenzpunkte. Sieben fertige Radar-Frames liegen als Sprites im PSRAM und werden alle zehn Minuten neu geladen.
Beim letzten Spielergebnis meines Fußballvereins hab ich diesmal keine Vereinsseite gescrapt wie noch beim BUSY-Bar-Gadget. Der Vereinskalender in Home Assistant trägt das Ergebnis direkt in der Terminbeschreibung, ich muss nur noch parsen.
Bedienung, die sich wie ein fertiges Produkt anfühlt
Tipp links blättert zurück, rechts weiter. Ein Tipp auf den Akku öffnet den Einstellungsbildschirm: Wechselmodus an oder aus, Intervall zwischen 5 und 120 Sekunden, jedes Modul einzeln aktivierbar. Scrollen per Wischen mit Scrollbalken. Ein Tipp aufs Kopfband oder 30 Sekunden Ruhe schließt die Einstellungen wieder. Alles landet im internen Speicher und spiegelt sich auf der Web-Konfigurationsseite.
Design folgt dem einem System, das ich mit Claude Design erstellt habe: IBM Plex Sans für Werte, IBM Plex Mono für Labels, dunkles Anthrazit als Grundton, Blau als Primärakzent, Amber für Hervorhebungen. Die Icons stammen aus dem Material-Design-Set, das Home Assistant selbst verwendet, als 8-Bit-Alphamasken gerendert, weil das Display kein Transparenz-Alpha kann.
Gelöste Fallen mit Übertragswert
Ein paar Dinge, die mich Zeit gekostet haben und die dir vielleicht welche sparen, wenn du selbst mit M5Unified arbeitest:
WiFi.scanNetworks()liefert im Accesspoint-Modus mit verbundenem Client null Treffer. Lösung: vor dem Start des eigenen Accesspoints im Client-Modus scannen und das Ergebnis zwischenspeichern.M5.Touch.getCount()bleibt wahr, solange der Finger auf dem Display liegt. Ohne Flankenerkennung rast die Anzeige durch alle vierzehn Module, sobald man den Finger nur kurz drauflässt.- Ein normaler Wisch ist bei M5Unified technisch ein „Flick“, ein „Drag“ entsteht erst nach einer halben Sekunde Halten. Scrollen musste ich also auf jede Bewegung reagieren lassen, nicht nur auf die fertig erkannte Geste.
- Roh-Bilddaten mit
pushImagewerden standardmäßig im falschen Farbformat gelesen. Alle Icons kamen erst pink raus, bis der Bildpuffer im richtigen Farbtyp lag. - JSON direkt vom Streaming-HTTP-Client zu parsen bricht bei geteilten Antworten mitten im Array ab. Erst die komplette Antwort als String holen, dann parsen.
- Ein Wetter-Stundenabruf bei Home Assistant beginnt nicht bei der aktuellen Uhrzeit, sondern immer um 4 Uhr UTC. Wer die ersten acht Werte nimmt, erwischt je nach Tageszeit vergangene statt kommender Stunden.
Ich würd das eigentlich noch handwerklicher schildern wollen, aber im Kern war’s genau das: acht kleine, unglamouröse Bugs, jeder für sich in ein paar Minuten mit Claude Code gefunden und behoben, weil die Fehlermeldung meist direkt zur Ursache führte.
Bewusst weggelassen
Auf mein eigenes Drängen hin: keine Tonausgabe, keine Terminalarme, keine Nachrichten von überall, keine Live-Anzeige meiner Claude-Code-Sessions, kein Now-Playing, keine Sprachsteuerung. Nicht weil es technisch unmöglich wäre, sondern weil ein Gerät, das alles kann, am Ende nichts davon gut macht. Das ist der Punkt, an dem die meisten Bastelprojekte kippen: von „ein gutes Infodisplay“ zu „ein überladenes Sammelsurium an Features, die keiner braucht“.
Was noch offen ist
Der Radarabruf blockiert die Anzeige für ein paar Sekunden, alle zehn Minuten, ein Kandidat für eine parallele Verarbeitung auf dem zweiten Prozessorkern. Die Weboberfläche des Geräts hat noch keine Umlaute, weil dem HTML-Header die Zeichensatz-Angabe fehlt. Zwei meiner Kalender liefern identische Termine doppelt, vermutlich derselbe Kalender zweimal in Home Assistant eingebunden. Kein Beinbruch, aber ehrlich gesagt hätte ich das früher merken sollen.
Lohnt sich das für dich?
Wenn du technisch neugierig bist und ein Wochenende übrig hast: ja, unbedingt. Nicht weil du eine Stoppuhr in ein Infodisplay verwandeln musst, sondern weil das Muster dahinter auf fast jedes Smart-Home-Setup übertragbar ist. Ich beobachte das regelmäßig in meiner Beratungsarbeit mit EPU und KMU in der DACH-Region: Die Hürde ist selten die Technik, sondern die Vorstellung, dass man dafür Informatik studiert haben muss. Musst du nicht. Du brauchst ein günstiges ESP32-Board, eine REST-API, die deine Daten hergibt, und eine KI, die dir sagt, wie die beiden zueinander finden.
Ob mit Claude Code, mit einer Stoppuhr, einer LED-Matrix oder etwas ganz anderem: Die Frage ist nicht, ob du sowas bauen kannst. Die Frage ist, was bei dir zuhause schon Daten sammelt, die auf keinem Display gelandet sind.
Konkret würd ich dir für den Einstieg raten, klein anzufangen. Nimm nicht gleich vierzehn Module, sondern eines: die Uhrzeit, den Stromverbrauch, was auch immer dir am meisten fehlt, wenn du grad nicht am Rechner sitzt. Ein ESP32-Board mit Display bekommst du für unter 50 Euro, PlatformIO ist kostenlos, und die Zeit, die du investierst, ist eher ein Abend als eine Woche, wenn die Dokumentation stimmt. Häng dich an ein Board mit aktiver Community und offizieller Doku, dann ersparst du dir das, was mich beim StackChan neun Stunden gekostet hat. Und wenn du an einem Punkt hängen bleibst, an dem die KI nicht mehr weiterkommt: Das ist meistens das Zeichen, dass die Doku des Herstellers gerade eine Lücke hat, nicht dass du etwas falsch gemacht hast.
Häufige Fragen zur M5Stack StopWatch
Was ich bei sowas oft höre: Mensch, musst du Zeit haben. Nein, hab ich nicht. Aber Claude hat sie. Ich hab die StopWatch am Abend per USB an den Rechner gehängt, Claude Code einen Auftrag gegeben und bin schlafen gegangen. In der Früh war alles fertig, nur noch kleine UI-Anpassungen, Position, Farben, Schriftgrößen. Aktiv an der Tastatur gesessen bin ich dafür keine 25 Minuten. Das ist der eigentliche Unterschied zu meinem Bastelleben vor zwei Jahren: Nicht dass ich schneller tippe, sondern dass ich nicht mehr die ganze Zeit tippen muss, während die eigentliche Arbeit passiert.




