ubergeek.de: Artikel mit Stichwortenhttps://ubergeek.de/weblog/feed/tags/Software2023-09-05T01:16:03+02:00André Gewertagewert@ubergeek.dewww.ubergeek.dehttps://ubergeek.de/weblog/article/23/Neue+Software+Image-Converter+fuer+MikrocontrollerNeue Software: Image-Converter (für Mikrocontroller)2021-10-03T23:55:00+02:002023-09-05T01:15:21+02:00<p>Wer für Mikrocontroller programmiert, und seien es auch nur Kleinigkeiten, wird schnell in die Verlegenheit kommen, Bilddaten in C-Quelltext kodieren zu müssen. Zu den zahlreichen Werkzeugen, die es dafür bereits gibt, kommt jetzt ein neues dazu, das vermutlich (oder hoffentlich?) ein paar besondere Eigenschaften besitzt.</p>
Gewert, Andréagewert@ubergeek.de<p>Wer für Mikrocontroller programmiert, und seien es auch nur Kleinigkeiten, wird schnell in die Verlegenheit kommen, Bilddaten in C-Quelltext kodieren zu müssen. Zu den zahlreichen Werkzeugen, die es dafür bereits gibt, kommt jetzt ein neues dazu, das vermutlich (oder hoffentlich?) ein paar besondere Eigenschaften besitzt.</p>
<p>In meinem Sommerurlaub, also bereits vor ein paar Wochen habe ich aus verschiedenen Gründen <em>auf die Schnelle</em> einen Image-Converter geschrieben, der für die Verwendung mit unterschiedlichen Mikrocontroller-Entwicklungsumgebungen gedacht ist.</p>
<p>Hauptbeweggrund dafür war die Tatsache, dass die Farbgrafiken für die Circuitmess-Systeme (CircuitOS in <em>Ringo</em> und <em>Nibble</em>) im RGB-565-Format kodiert werden, ich mit <a href="https://github.com/cirquit/UTFTConverter" target="_blank">UTFTConverter</a> aber eigentlich nur ein einziges brauchbares Tool finden konnte, das überhaupt unter Linux lauffähig ist. (Nebenbemerkung für alle, die an etwas ausgefallenen Programmiersprachen interessiert sind: Der UTFTConverter ist in <em>Haskell</em> geschrieben. <em>Hüst</em>.) Für die schnelle Konvertierung ist das Tool etwas unhandlich, weil es kein grafisches User Interface gibt, sondern ausschließlich über die Shell genutzt werden kann.</p>
<p>Andererseits ist das die Voraussetzung dafür, in Batch- und Makefiles genutzt werden zu können, was mit den ganzen Web-basierten Tools, die es für andere Ausgabeformate gibt, grundsätzlich nicht funktioniert.</p>
<p>Also habe ich eine kleine Java-basierte Anwendung (das bedeutet die Einsatzmöglichkeit auf allen »großen« Betriebssystem) entwickelt, die sowohl ein grafisches User Interface und ein CLI-Interface anbietet, eine »Stapelverarbeitung« beliebig vieler Dateien anbietet und mehrere Ausgabeformate unterstützt. Aktuell sind das vertikal in Bytes gruppierte Monochromgrafiken für den <em>Arduboy</em> (und andere), horizontal in Bytes gruppierte Monochromgrafiken für CircuitOS sowie das ursprünglich angestrebte RGB-565-Format für Farbgrafiken auf CircuitOS. Das User Interface unterstützt außerdem <em>Drag and Drop</em> und zeigt eine Vorschau der farbreduzierten Grafik.</p>
<p>Interessant bei der Entwicklung war, jedenfalls für mich, dass die Java-Plattform mir im Grunde genommen die eigentliche Arbeit, also das Laden von Bilddaten aus unterschiedlichsten Dateiformaten, die Farbreduktion sowie die Kodierung in ein anderes Speichermodell komplett abnimmt. Das Interface drumherum war ja ein Klacks 😉</p>
<p>Verfügbar ist die Software auf meinem <a href="https://github.com/andregewert/ImageConverter" target="_blank">Github-Profil</a> als fertiges plattformübergreifendes Binary oder im Quellcode. Zum Bauen ist ein Ant-Buildfile enthalten.</p>
<p>Das Ganze ist noch relativ wenig getestet; natürlich freue ich mich über Feedback.</p>
<figure>
<div class="figurecontainer" style="max-width: 600px">
<div class="imgcontainer">
<a href="/media/47ededf02c632130d40a4e8a417d3f5b/image/original/1" data-lightbox="preview" data-title="ImageConverter">
<img loading="lazy" src="/media/47ededf02c632130d40a4e8a417d3f5b/image/preview/1"
srcset="/media/47ededf02c632130d40a4e8a417d3f5b/image/preview/2 2x" alt="">
</a>
</div>
<div class="caption shadow">
<figcaption>ImageConverter unter Linux</figcaption>
</div>
</div>
</figure>
https://ubergeek.de/weblog/article/22/Arduino+in+der+Ausbildung+AnwendungsentwicklungArduino in der Ausbildung (Anwendungsentwicklung)2021-10-03T23:16:00+02:002023-09-03T00:47:44+02:00<p>Vor einiger Zeit (ja, diesen Text wollte ich eigentlich früher schreiben), erlebten Einplatinenrechner auf Basis einfacher Mikrocontroller, also <a href="https://calliope.cc/" target="_blank"><em>Calliope</em></a>, <a href="https://microbit.org/" target="_blank"><em>Micro:bit</em></a>, <a href="https://www.arduino.cc/" target="_blank"><em>Arduino</em></a> und andere einen Boom. Überschaubare Hardware und simple Entwicklungswerkzeuge versprachen den einfachen und schnellen Einstieg in die Welt der Programmierung. Grund genug für mich, das auch in der Ausbildung einzusetzen. Nach einigem Hin und Her habe ich mich am Ende für den Arduino-basierten <em>Arduboy</em> entschieden. Ein kurzer Überblick.</p>
Gewert, Andréagewert@ubergeek.de<p>Vor einiger Zeit (ja, diesen Text wollte ich eigentlich früher schreiben), erlebten Einplatinenrechner auf Basis einfacher Mikrocontroller, also <a href="https://calliope.cc/" target="_blank"><em>Calliope</em></a>, <a href="https://microbit.org/" target="_blank"><em>Micro:bit</em></a>, <a href="https://www.arduino.cc/" target="_blank"><em>Arduino</em></a> und andere einen Boom. Überschaubare Hardware und simple Entwicklungswerkzeuge versprachen den einfachen und schnellen Einstieg in die Welt der Programmierung. Grund genug für mich, das auch in der Ausbildung einzusetzen. Nach einigem Hin und Her habe ich mich am Ende für den Arduino-basierten <em>Arduboy</em> entschieden. Ein kurzer Überblick.</p>
<p>Die erste Frage, die sich beim Einsatz von Mikrocontrollern stellt: Was konkret kann und will man damit umsetzen?</p>
<p>In vielen Tutorials verdrahtet man ein paar einfache Sensoren, LEDs und Displays, bastelt sich eine »Wetterstation« oder eine Ampelschaltung – und dann war’s das auch schon wieder. Abgesehen davon, dass man Ähnliches in der Regel auch in der Berufsschule macht (zu meiner Zeit noch auf relativ großen Steckbrettern und mit einfachen Logikgattern, heute eher mit dem Raspberry Pi), ist das nur mäßig spannend, während sich das Gelernte hauptsächlich auf die Auffrischung einiger Lektionen aus dem Physik-Unterricht beschränkt. Jedenfalls ist mir das für Anwendungsentwickler zu wenig Programmierung.</p>
<p>Interessanter fand ich die Idee, ein überschaubares Spiel zu entwickeln bzw. entwickeln zu lassen. Um kleine LCD-Displays anzusteuern, haben auch die einfacheren ATmega-Controller ausreichend Leistung und Speicher. Bleiben noch drei Probleme. Als erstes ist es nicht einfach, einen »fertigen« Controller zu finden, den man ohne großen Aufwand verkabeln und nutzen kann [am ehesten kommt man vermutlich zum Ziel, wenn man mit Hilfe einer kleinen Zusatzplatine einen Controller für den Wii-Extension-Port verwendet] und Schaltknöpfe auf das Breadboard zu stecken, ist keine sonderlich gut zu bedienende Variante. Zweitens ist die Verkabelung mit Jumper-Kabeln und einem Breadboard wenig haltbar, neigt zu Wackelkontakten und ist schlecht zu transportieren. Zuletzt bleibt ein vergleichsweise hoher Aufwand für das Zusammenstecken der Schaltung, und bei Anwendungsentwicklern möchte ich die Priorität eigentlich auf das Programmieren legen.</p>
<p>Zum Glück leben wir in einer Welt, in der viele Probleme bereits von anderen Menschen gelöst worden sind, und so bin ich über den <a href="https://arduboy.com/" target="_blank"><em>Arduboy</em></a> gestolpert, der alles bietet, was ich haben wollte: einen ATmega-Controller mit einfarbigem Display und gut zu verwendenden Bedienelementen in einem ansprechenden Gehäuse bei voller Kompatibilität zu vorhandenen Arduinos. Zudem ist das System vernünftig dokumentiert und bietet eine einfach zu verwendende API. Mit grob 50 EUR ist auch der Preis noch vertretbar.</p>
<div class="shadow slideshow">
<div class="frame">
<div class="images">
<div class="image">
<a href="/media/27a605649644c13e650bdbd6b4625858/image/original/1" data-lightbox="preview-album_39" data-title="Arduboy">
<img loading="lazy" src="/media/27a605649644c13e650bdbd6b4625858/image/preview/1"
width="600" height="600"
srcset="/media/27a605649644c13e650bdbd6b4625858/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Der Arduboy </div>
</div>
<div class="image">
<a href="/media/529f7ca1cf694c978babb0643f12ee78/image/original/1" data-lightbox="preview-album_39" data-title="Circuitmess Nibble">
<img loading="lazy" src="/media/529f7ca1cf694c978babb0643f12ee78/image/preview/1"
width="600" height="600"
srcset="/media/529f7ca1cf694c978babb0643f12ee78/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Circuitmess Nibble </div>
</div>
<div class="image">
<a href="/media/7846b0370dde68195c12ee9fd396e5f2/image/original/1" data-lightbox="preview-album_39" data-title="Nibble und Arduboy">
<img loading="lazy" src="/media/7846b0370dde68195c12ee9fd396e5f2/image/preview/1"
width="600" height="600"
srcset="/media/7846b0370dde68195c12ee9fd396e5f2/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Nibble und Arduboy im Vergleich </div>
</div>
<div class="image">
<a href="/media/770e766fdf0a8e91ef14e3aec826aacc/image/original/1" data-lightbox="preview-album_39" data-title="Arduino Leonardo">
<img loading="lazy" src="/media/770e766fdf0a8e91ef14e3aec826aacc/image/preview/1"
width="600" height="600"
srcset="/media/770e766fdf0a8e91ef14e3aec826aacc/image/preview/2 2x" alt="" title="">
</a>
<div class="caption">
Eine Arduboy-kompatible Schaltung auf Basis des Arduino Leonardo </div>
</div>
</div>
</div>
</div>
<p>Wenn beim <em>Arduboy</em> das Basteln von Hardware wegfällt und eine fertige API für die Spiele-Entwicklung sowie gute Dokumentation vorhanden sind, dann befreit einen das als Ausbilder ein wenig vom Vorbereiten von Material, so dass man eine einfache Aufgabe stellen kann:</p>
<p>»Überlegen Sie sich ein Spiel, das Sie gerne programmieren möchten! (Ich helfe Ihnen bei der Umsetzung.)«</p>
<p>Zu meinem Glück (soviel muss ich zugeben) hat sich meine Auszubildende für ein Spiel entschieden, bei dem es kein Problem ist, <a href="https://de.wikipedia.org/wiki/Stegreif" target="_blank">aus dem Stegreif</a> eine Lösung zu entwickeln: Snake. Am Ende eines ca. vierwöchigen Projektes, das auch das Ende ihrer Probezeit markierte, konnte meine Auszubildende dann einen eigenen <em>Arduboy</em> (natürlich durfte sie die Hardware für sich behalten) mit einem ersten selbst programmierten Spiel nicht nur in den Händen halten, sondern auch in die Tasche stecken und hoffentlich mit etwas Stolz Familie und Freunden zeigen. Perfekt 😊</p>
<p>Auf Grundlage der gemeinsamen Ideen habe ich auf <a href="https://github.com/andregewert/Arduboy" target="_blank">Github</a> zwei »glattgestrichene« Clean-Room-Implementierungen inkl. neu gestalteter Grafiken <a href="https://github.com/andregewert/Arduboy" target="_blank">veröffentlicht</a>. Die erste Variante ist vielleicht etwas leichter nachzuvollziehen, dafür etwas ineffizienter, was sich im schlimmsten Fall in einem langsameren Gameplay äußern könnte. Die zweite Variante ist etwas effizienter, erfordert dafür aber auch ein kleines bisschen mehr Mathematik, was ich meiner Auszubildenden vorerst nicht abverlangen wollte.</p>
<p>Leider ist der <em>Arduboy</em> nicht (mehr) leicht zu bekommen. Der Hersteller produziert in <em>Batches</em> nach Vorbestellung. Meine Vorbestellung im Herbst 2020 hat, sofern ich das richtig in Erinnerung habe, etwa ein halbes Jahr bis zu ihrer Auslieferung benötigt; damals habe ich noch über <a href="https://www.reichelt.de/" target="_blank">Reichelt</a> zwei Exemplare zügig erhalten können, über Reseller scheint der <em>Arduboy</em> aktuell aber auch nicht mehr verfügbar zu sein. Die Situation ändert sich hoffentlich demnächst.</p>
<p>Alternativ kann man mit einfachen Mitteln eine <em>Arduboy</em>-kompatible Schaltung selbst zusammenstecken und dann wenigstens die gute API nutzen. Als weitere Alternative gibt es beispielsweise auch den <a href="https://circuitmess.com/nibble/" target="_blank"><em>Nibble</em> von <em>CircuitMess</em></a>, der mit der <a href="https://www.arduino.cc/" target="_blank">Arduino-IDE</a> programmiert werden kann, ein Farbdisplay und etwas mehr Leistung bietet, dafür aber selbst zusammengelötet werden muss und etwas teurer ist. Außerdem ist die schlechte bzw. kaum vorhandene Dokumentation ein Ärgernis.</p>
<p>Frage an die Leser: Hat jemand andere Beispiele für den Einsatz von Mikrocontrollern in der beruflichen oder schulischen Ausbildung? Oder vielleicht eine Idee für ein anderes Spiel, das in einem ähnlichen Rahmen umgesetzt werden könnte?</p>
https://ubergeek.de/weblog/article/21/Neue+Software+AmigaGuideViewerNeue Software: AmigaGuideViewer2021-08-07T20:49:00+02:002023-09-05T01:16:03+02:00<p>Vor einigen Jahren – oder wahrscheinlich schon vor etwa anderthalb Jahrzehnten(!) – hatte ich bereits einmal eine kleine Perl-Anwendung geschrieben, die <a href="https://de.wikipedia.org/wiki/AmigaGuide" target="_blank">AmigaGuide-Dateien</a> nach HTML konvertiert. Natürlich habe ich die Quelltexte heute nicht mehr (und auf einem externen VCS-Server habe ich meinen »Klöterkram« damals auch noch nicht abgelegt), aber es hat sich bei mir jüngst wieder einmal die Anforderung ergeben, AmigaGuide-Dateien nicht nur auf einem Amiga oder einem Emulator anzuschauen. Also habe ich dafür etwas gebastelt.</p>
Gewert, Andréagewert@ubergeek.de<p>Vor einigen Jahren – oder wahrscheinlich schon vor etwa anderthalb Jahrzehnten(!) – hatte ich bereits einmal eine kleine Perl-Anwendung geschrieben, die <a href="https://de.wikipedia.org/wiki/AmigaGuide" target="_blank">AmigaGuide-Dateien</a> nach HTML konvertiert. Natürlich habe ich die Quelltexte heute nicht mehr (und auf einem externen VCS-Server habe ich meinen »Klöterkram« damals auch noch nicht abgelegt), aber es hat sich bei mir jüngst wieder einmal die Anforderung ergeben, AmigaGuide-Dateien nicht nur auf einem Amiga oder einem Emulator anzuschauen. Also habe ich dafür etwas gebastelt.</p>
<p>Ein Konverter, der HTML-Dateien generiert ist natürlich schon nicht schlecht, aber wenn man diese Konvertierung ohnehin schon macht, dann kann man das innerhalb einer kleinen Anwendung doch auch <em>in-memory</em> machen und das Ergebnis selbst rendern und somit das direkte Öffnen von AmigaGuide-Dateien erlauben?</p>
<p>Mit diesem Gedanken habe ich mich neulich mal hingesetzt und meine Java-Kenntnisse etwas aufgefrischt. Zwei, drei reguläre Ausdrücke, ein schlichter Tokenizer und zack, fertig ist der AmigaGuide-Viewer 🙂 Es werden zwar noch nicht alle Kommandos unterstützt, aber die meisten AmigaGuide-Dateien sollten vernünftig dargestellt werden.</p>
<p>Die Java-Anwendung lässt sich von <a href="https://github.com/andregewert/AmigaGuideViewer" target="_blank">meiner GitHub-Seite herunterladen</a> und sollte problemlos unter Linux (darunter fällt auch der Rasberry Pi), MacOS und Windows ausführbar sein, wenn eine passende Java-Runtime installiert ist. Unter Fedora 34 mit Gnome-Desktop ist mir aufgefallen, dass offensichtlich die Desktop-Integration nicht oder nicht mehr vorhanden ist und somit ein Starten der Anwendung per Doppelklick oder »Mit anderer Anwendung öffnen« nicht möglich ist. Dann bleibt immer noch ein Start per Kommandozeile: <code>java -jar AmigaGuideViewer.jar</code>.</p>
<p>Zum Bauen der Anwendung aus den Quellen ist ein Build-File für Ant enthalten.</p>
<figure>
<div class="figurecontainer" style="max-width: 600px">
<div class="imgcontainer">
<a href="/media/3ed8edcffeceb42e182372e768669a68/image/original/1" data-lightbox="preview" data-title="AmigaGuideViewer">
<img loading="lazy" src="/media/3ed8edcffeceb42e182372e768669a68/image/preview/1"
srcset="/media/3ed8edcffeceb42e182372e768669a68/image/preview/2 2x" alt="">
</a>
</div>
<div class="caption shadow">
<figcaption>AmigaGuideViewer unter Linux</figcaption>
</div>
</div>
</figure>
<p>(Nachbemerkung: Weshalb und <em>wie</em> ich mich überhaupt wieder einmal <em>ausgerechnet</em> mit dem Amiga beschäftige, dazu kann ich bei anderer Gelegenheit etwas erzählen.)</p>