FABGL Library und CH9120F-Treiber für TTGO ESP32 VGA32 Board installieren
Oder auch: Wie installiere ich eine andere Firmware?
Im letzten Artikel Vorstellung TTGO ESP32 VGA32 Board mit PS/2 Mouse/Keyboard und mehr hatten wir uns in der Anwendung ja nur auf die bereits vorinstallierte Firmware mit der Sound-Demo beschränkt.Die ist allerdings jetzt nicht so sonderlich spannend. Okay, sie testet alle Hardware Ein- und Ausgänge, aber so richtig prickelnd ist das ja nun auch wieder nicht.
Was wir als nächstes wollen, ist eine andere Firmware auf das TTGO ESP32 VGA32 Board bringen, damit ein andere Programm läuft, das uns vielleicht ein wenig mehr Spaß bringt.
Prinzipiell gibt es da zwei Wege: Entweder wir finden im Internet eine fertige Firmware, downloaden sie und flashen das Binär-File direkt auf das Board. Das passende Flash Tool gibt es bei Espressif, dem Hersteller des ESP32-Chips. Allerdings dürfte es gar nicht so einfach sein, fertige Flash-Images (*.bin oder *.img-Files), zum Beispiel das Space Invaders, für das VGA32-Board zu finden.
Außerdem wollen wir doch etwas lernen und so gehen wir den üblichen Programmierer-Weg über die Arduino IDE. Space Invaders zum Beispiel, das wir im Intro-Video auf der AliExpress-Seite gesehen haben, gibt es nämlich komplett mit Source-Code. Es ist Bestandteil der FABGL-Library von Fabrizio Di Vittorio. Mit ein bisschen Internet-Recherche ist das schnell herausgefunden. Wie ich dabei vorgegangen bin, zeige ich ganz unten im Video.
Fabrizio ist Entwickler/Maker und teilt den OpenSource-Gedanken, der in der Microcontroller-Hobby-Gemeinde international vorherrscht. Das heißt, es gibt eigentlich alles komplett als Source-Code und das eher als ein fertiges *.bin-Image.
Flashen können wir dann über unsere Arduino-IDE und bringen so die neue Firmware auf das VGA-Board. Aber noch viel besser: Wir können uns den Source-Code anschauen und etwas daraus lernen. Und am besten: wir können den Quellcode auch anpassen und so ganz auf unsere persönlichen Verhältnisse zuschneidern: drei Leben in Space Invaders sind dir zuwenig? MAch doch fünf draus!
Auch können wir durch die vorliegenden Programme so viel lernen, dass wir komplett eigene Programme kreieren können. Die wir dann fairerweise wieder der Open-Source-Community zur Verfügung stellen. So profitiert jeder von jedem. So lernt jeder von jedem und das Gesamtwissen wächst.
Diesen Abschnitt können ESP32-Profis überspringen
Falls ihr neu seid in der Microcontroller-Programmierung, hier die Schritte, die ihr zuerst ausführen müsst, um eine funktionierende Arduino-IDE zu erhalten. Habt ihr schon einmal was mit der Arduino-IDE auf den ESP32 hochgeladen, könnt ihr diesen Abschnitt überspringen.Was müssen wir tun?
- Arduino IDE downloaden und installieren.
Es gibt zwar auch Alternativen wie Visual Studio Code mit Platform IO, am beginnerfreundlichsten und am meisten verbreitet ist aber die Arduino-IDE. Hier habe ich bereits eine Anleitung dazu verfasst, die die Einrichtung erklärt.
Nicht wundern, dass die Anleitung für den Arduino Uno ist. Mit der Arduino IDE kann man nicht nur den ESP32 programmieren, sondern eben auch den Arduino Uno, Nano, den STM32 und viele mehr. Die IDE ist ziemlich universell. Und mit dem Arduino Uno habe halt ich damals angefangen. Seitdem begleitet mich die Ardino IDE über alle weiteren Boards, die ich so getestet und benutzt habe.
- Dem Boardverwalter der Arduino IDE das ESP32-Board bekanntmachen.
Wie gesagt, kommt die Arduino-IDE eigentlich aus der Arduino-Ecke. Darum funktioniert sie im Auslieferungszustand nur damit. Aber man kann der IDE einfach weitere Board bekanntmachen. Auch dazu habe ich bereits einen Artikel geschrieben, der erklärt, wie man das ESP32 in die Arduino-IDE einbindet.
Die FABGL-Library für ESP32 VGA installieren
Durch Recherche im Internet (siehe oben oder Video) findet man heraus, dass wohl die FABGL-Library von Fabrizio Di Vittorio (hier auf GitHub) im Moment das Maß aller Dinge für dieses Board ist. Die wollen wir uns im nächsten Schritt in der IDE installieren.Wir müssen dafür nicht über das GitHub-Verzeichnis gehen und das manuell in unser Library-Verzeichnis kopieren, was immer geht und evtl. eine Alternative ist, wenn was nicht richtig funktioniert, sondern es gibt einen viel einfacheren Weg über den Bibliotheksverwalter in der Arduino-IDE.
Dazu rufen wir in der IDE unter Werkzeuge den Eintrag Bibliotheken verwalten auf, was - ihr werden es erraten - den Bibliotheksverwalter öffnet.
Dort können wir im Suchfeld jetzt einfach "fabgl" eingeben, den Namen unserer VGA32-Bibliothek. Die wird auch bald gefunden und wir müssen nur noch auf "installieren" klicken und ein wenig warten und schon ist die Library bei uns in der IDE und wir können darauf zugreifen.
Zugreifen heißt, wir können die erweiterten Befehle, die diese Library mitbringt, in unseren eigenen Progammen benutzen.
Beispielprogramme anschauen
Der erste Anlaufpunkt bei einer neuen Library sind immer die Beispielprogramme, die automatisch mit installiert werden und über Datei / Beispiele abrufbar sind. Und zwar in diesem Fall in dem Unterverzeichnis "FABGL". Da die Einträge in der Liste zahlreich werden können und nicht alphabetisch sortiert sind, kann es etwas dauern, sie zu finden. Manchmal wünsche ich mir hier eine Suchfunktion. Aber vielleicht sollte ich auch einfach mal die neue 2.0 Version der IDE ausprobieren, vielleicht ist das ja mittlerweile schon drin..
In den FABGL-Beispielen interessiert uns das Unterverzeichnis VGA und siehe da: es poppen eine Vielzahl von Beispielprogrammen auf:
- Altair8800
- AnsiTerminal
- Audio
- ClassicRacer
- CollisionDetection
- DirectVGA
- DirectVGA_EIMuro
- DoubleBuffer
- FileBrowser
- GraphicalUserlnterface
- HardwareTest
- InputBox
- LoopbackTerminal
- ModelineStudio
- MouseOnScreen
- MultitaskingCPM
- NetworkTerminal
- PCEmulator
- SimpleTerminalOut
- SimpleTextTerminalOut
- Songs
- SoundChipSimulator
- Spacelnvaders
- Sprites
- TerminalCharSet
- VIC20
Das verspricht jede Menge Spaß beim Ausprobieren. Greifen wir uns gleich mal das ersten Beispiel und bringen wir es auf unser VGA32-Board.
Also einfach das Beispiel auswählen und damit laden. Das zeigt uns gleich mal den Source-Code an, aus dem wir schon mal grob (bzw. die Expreten ganz genau) ablesen können, was das Programm macht.
Das Programm läuft aber nicht bei uns auf dem PC sondern eben auf dem ESP32 VGA32-Board. Also müssen wir es dafür komplilieren und per USB-Port / serieller Schnittstelle rüber transferieren.
Also erst einmal das richtige Board unter Werkzeuge auswählen: ESP32 Dev Module, damit die Arduino IDE weiß, wie sie kompilieren, also den Spource-Code in MAschinensprache übersetzen muss. Dann noch den richtigen seriellen Port für die Übertragung...
Den seriellen Treiber für den 9102F-Chip auf dem Board installieren
...Moment! Obwohl das VGA32-Board angesteckt ist, erscheint hier kein neuer serieller Port. Als ich das Board angesteckt hatte, erschien auch eine kurze Meldung von Windows, dass kein Treiber gefunden werden konnte. Werfen wir doch einmal einen Blick in den Geräte-Manager von Windows:Aha. Da ist ein neuer Eintrag USB Single Serial, aber leider mit einem kleinen Ausrufezeichen, was bedeutet, dass das Gerät nicht funktioniert. Das USB2.0 Hub-Gerät ignorieren, das gehört nicht dazu.
Seltsam, denn eigentlich erkennt mein bereits installierter Treiber-Zoo die üblichen Kandidaten: FTDI, CH340 und so weiter. Doch dann erinnerte ich mich daran, dass ich als "Geschmacksrichtung" "CH9201F" bei AliExpress ausgewählt habe, weil das die einzige Option war.
Kurz nach dem CH9201F-Chip gegoogelt zeigt sich, dass das noch ein anderer seriellen Chip ist. Für den Windows 7 keine Treiber hat. Ein bisschen weiteres Suchen bringt zu Tage, dass unser alter bekannte Zadig bei der Lösung helfen kann. Doch wie ging das nochmal? In meinem Artikel Raspberry Pi Pico: Erste Schritte hatte ich das zwar letztens schon erklärt, aber inzwischen gibt es eine neue Version von Zadig.
Zadig kann man kostenlos von zadig.akeo.ie derzeit in Version 2.7 herunterladen und damit serielle und andere USB-Treiber für Windows installieren.
Dazu müssen wir das VGA32 Board in einen USB-Port am Windows-PC einstecken und Zadig starten und folgende Einstellungen vornehmen:
Also den Eintrag USB Single Serial (Name wie im Geräte-Manager) und USB Serial (CDC) auswählen. Entweder klickt man dann auf Install Driver oder wenn man vorher den falschen Treiber/Betriebsmodus, so wie ich, installiert hatte auf Replace Driver. Dann dauert es einen kleinen Moment, aber dann hat das VGA32-Board wie von Zauberhand einen Serial-Port zugewiesen, in meinem Fall Port 42.
Firmware / Beispielprogramm flashen
Nun könnten wir in der Arduino IDE endlich den richtigen Serial Port auswählen (ich also 42) und dann das flashen erneut versuchen.Die IDE kompiliert und linkt erstmal alles für das ESP32 Dev Module, also unser VGA32-Board zusammen. Das kann eine Weile dauern, aber dann kommt die Übertragungsphase:
Die sieht diesmal gut aus. Das Hochladen wurde erfolgreich abgeschlossen.
Funktionstest der neuen Firmware
Auf unserem VGA-Board ist nun der Altair 8800-Emulator in der Firmware installiert. Die bleibt auch drauf, wenn wir das Board vom PC trennen und wieder an unsere VGA-Installation mit VGA-Monitor und PS/2 Peripherie anschließen.Wenn alles gut gegangen ist, sollten wir jetzt nicht mehr die Sound-Demo sehen, sondern einen emulierter Altair 8800.
Erfolg! Der Altair 8800-Emulator läuft, der Cursor blinkt und es werden Tastatur-Eingaben angenommen.
Ich würde euch den Emulator ja liebend gerne gleich vorführen, aber das Abfilmen von einem Bildschirm ist nicht ganz so einfach und die Qualität ist auch nicht so toll. Ich habe mir einen VGA zu HDMI-Adapter bestellt und hoffe damit, das Bild dann direkt in guter Qualität aufzeichnen zu können.
Darum bitte noch ein wenig Geduld für die Live-Demo des Emulators.