Ab und an packt es mich ja und ich schreibe mal Software abseits der ausgetretenen Pfade. Fuer mich war es mal wieder soweit, dass ich mal wieder ein wenig JavaScript, HTML, CSS, C und Bash script geschrieben habe. Alles mehr oder weniger gleichzeitig.
LED Name Tag
Ich bin seit 2019 stolzer Besitzer eines LED Name Tag den zwei Leute (Delphino und Kristian) vom Hackerspace Bremen e.V. designed und gebaut haben. Kuerzlich war ich mal wieder dort im Space und habe eines der Tags an der Wand entdeckt mit ein paar coolen Animationen. Da fiel mir auf, dass mein Tag offenbar sehr alte Firmware hat.
Mein Interesse war geweckt! Ich kontaktierte Delphino, und der verwies mich auf die Webseite zum beschicken des Tag mit Text und Animationen. Ich probierte es aber nix passierte. Also musste ich wohl eine neue Firmware compilen und draufspielen. Also besuchte ich als naechstes das Repository mit der Firmware.
„Neue“ Animationen
Mit Hilfe von Visual Studio Code (mittlerweile meine Lieblings Allrounder-IDE) hatte ich wenige Minuten spaeter einen neuen Build auf dem Tag. Und heissa ich konnte ueber die Konfigurator Webseite mit dem Tag kommunizieren und neue Animationen und Texte festlegen. Nun gab es die – nicht mehr ganz so neuen – Animationen auch fuer mein Tag.
Wirklich neue Animationen
In der Firmware selbst habe ich dann drei neue Animationen im Release v1.1.0 hinzugefuegt, nachdem ich mich ein wenig eingearbeitet hatte in die Art und Weise wie die Animationen genau funktionieren. Spannend war, dass das Koordinatensystem fuer den Logobereich zwar eine 15 x 19 Matrix ist, die ca 100 LED’s jedoch in einem Array von hintereinanderliegenden Adressen angesprochen werden. Und was auch schwierig war, Zufall ist auf dem kleinen ATmega32 nicht so einfach zu berechnen. Ich hab nur eine relativ schlechte Zufallsfunktion mit dem Loop-Counter hinbekommen, diese aber bei dem STARS und STRIPES Effekt eingesetzt.
Der Webconfigurator
Der Konfigurator ist letztlich eine Javascript App in einer Webseite (die lokal im Browser laufen kann), die ueber das Webserial API des Browsers mit dem USB-Anschluss des Computers eine serielle Verbindung aufbauen kann. Das machte die Webseite von Delphino prima. Allerdings war mir die Webseite auch ein wenig sparsam zusammengehackt (was Delphino auch so sah). Also machte ich mich dran den Webconfigurator ordentlich aufzubohren… einige Tage spaeter gab es neue Funktionen.
NEUE FEATURES:
- Erklaerung der einzelnen Parameter
- Exportieren einer Konfiguration aller Slots als JSON-Datei
- Importieren einer Konfiguration
- Feedback bei der Texteingabe, wieviele Zeichen man noch hat
- Connect und Disconnect Funktion fuer die USB-Schnittstelle
- Kommunikation von Ereignissen (z.B. Erfolgreicher Datentransfer zum Tag)
- Besseres Fehlerhandling bei Problemen
- Ein wenig mehr Design & Farbe
- 3 neue Animationen
Durch den neuen Konfigurator, der immer noch lokal funktioniert, aber auch gehostet verfuegbar ist, kann man nun ganze Setups mit anderen tauschen oder als Sicherungskopie ablegen. Das ist schoen und praktisch.
Das Flashing der Firmware
Wer sich nicht mit Platform IO (Modul fuer VSCode) auskennt, der hat wenig Moeglichkeiten die Firmware selbst auf das Tag zu bringen. Das ist natuerlich nicht so schoen. Und nicht jeder will sich eine komplette IDE installieren nur fuer ein wenig Tag Spass.
Also habe ich ein kleine Bash-Script tagflashr erstellt, mit dem man das Tag mit Hilfe der Software avrdude die auch von Platform IO hinter den Kulissen verwendet wird, direkt auf das Tag bringen kann, ohne Umweg ueber eine IDE. Dafuer laedt man sich einfach sein Firmware binary (.hex Datei) und startet das Script.
Fazit
Der kleine Exkurs hat mir mal wieder gezeigt wie nuetzlich es ist, sich mit vielen Programmiersprachen auszukennen. Da letztlich auch noch Python zum Einsatz kam, war es ein kleiner 10-Kampf. Ich bin happy drei weitere Animationen beigesteuert zu haben.
Nebenbei habe ich den Code an diversen Stellen ordentlich refactored und dokumentiert. Auch die Kombination aus Javascript und HTML/CSS war mal wieder erfrischend. Es ist beachtlich, was man wirklich mit Bordmitteln eines Webbrowsers so alles tun kann mittlerweile.
Why do I blog this? Ich hatte Spass und habe festgestellt, Microcontroller die Licht erzeugen machen halt einfach Spass. Ich denke ich werde mein Projekt Fire Fairy demnaechst nochmal angehen und die Firmware dafuer umschreiben, so dass deutlich schoenere farbeffekte moeglich sind.