Das Elecrow ESP32 Terminal ist ein ESP32-3 betriebenes mobiles Gerät mit einem 3,5 Zoll 480 × 320 TFT kapazitiven Touchdisplay und einer Vielzahl von Anwendungsmöglichkeiten. Das Gerät kann eine nette Ergänzung zu Projekten sein, wenn man ein touchfähiges Display mit Schnittstellen benötigt. Das auf einem ILI9488-Displaytreiber basierende Display hat eine Farbtiefe von 16 Bit; seine Touchfähigkeiten werden von einem FT6236 übernommen. Beide Bausteine werden von der Arduino-Community gut unterstützt.

ESP32 Terminal Gehäuse

Das ESP32-Terminal ist in einem schwarzen Acrylgehäuse untergebracht, wodurch es sich robust und nicht wie ein fummeliges Plastikgehäuse anfühlt. Ein Batterieanschluss mit LiPo-Ladeschaltung ist vorhanden, aber es wäre portabler, wenn es im Gerät eine Batterie gäbe. Wenn man ein Projekt portabel gestalten will, muss man auf der Rückseite einen Akku ergänzen. Auf der Rückseite befinden sich zwei M3-Befestigungslöcher mit denen man ein Zusatzgehäuse befestigen oder das Gerät an einer Wand anbringen kann.
 
ESP32 Terminal zeigt Wetterdaten an
Das ESP32-Terminal in seinem schwarzen Gehäuse zeigt Wetterdaten an.

ESP32-S3 MCU

Wenn ich mir anschaue, was das Gerät antreibt bin ich immer wieder erstaunt über die unglaubliche Menge an Rechenleistung, die in modernen MCUs steckt. Das ESP Terminal wird von einem Espressif ESP32-S3 betrieben, in dem eine 32-Bit-Dual-Core-MCU XTensa LX7 mit 240 MHz läuft. Man vergleiche das einmal mit dem ursprünglichen Arduino UNO mit seinem 8-Bit Microchip ATMega328, der mit 16 MHz läuft!

Die MCU hat 512 KB SRAM integriert, zusammen mit 8 MB PSRAM. PSRAM steht für Pseudo-Static-RAM, eine Art externes statisches RAM, das im Falle des ESP32-S3 über eine SPI-Schnittstelle mit der MCU verbunden ist.
 
Für die drahtlose Verbindung stehen 2,4 GHz Wi-Fi (2,4 GHz 802.11 b/g/n) und Bluetooth 5 LE zur Verfügung. Ich war mir dessen nicht bewusst, aber Bluetooth 5 hat Long-Range-Fähigkeiten und dieses Modul gibt vor, es zu unterstützen. Der Long-Range-Modus erweitert die Reichweite von 10-30 Metern auf mehr als einen Kilometer.

Verbindung mit der physischen Welt

Das ESP32 Terminal hat einen Batterieanschluss und ein integriertes LiPo-Ladegerät. Man kann den USB-C-Anschluss verwenden, um das Gerät mit Strom zu versorgen, aber auch um den LiPo- Akku zu laden.
 
Es gibt auch einen Micro-SD-Kartensteckplatz, der praktisch ist, wenn man ein paar Bilder oder andere (grafische) Inhalte wie Webseiten für eine Anwendung speichern möchte.
 
An den Seiten des Moduls befinden sich insgesamt vier ‘Crowtail’-Schnittstellen. Diese sind alle 4-Draht Schnittstellen, die mit Grove von Seeed Studio kompatibel sind. Es gibt einen digitalen, einen analogen, einen seriellen (UART) und einen I²C-Anschluss, ausreichend für einfache Projekte. Wenn man mehr benötigt, kann man den I²C-Anschluss zur Anbindung von Erweiterungen verwenden.
 
esp32 terminal rückseite
Die vier ‚Crowtail‘-Anschlüsse sind auf der Rückseite sichtbar.

Programmierung des ESP32 Terminals

Das Hochladen der Firmware erfolgt über das USB-C-Kabel, über eine serielle Verbindung also, die durch einen CH340 USB-Seriell-Wandler herausgeführt wird. Ich hatte kein Glück bei dem Versuch, dies mit meinem MacBook zum Laufen zu bringen für das ich versucht habe, den offiziellen Treiber zu installieren. Zum Glück habe ich noch meinen alten Linux-Laptop auf dem Ubuntu läuft und damit funktioniert es perfekt!
 
Als erstes wollte ich eine Variante von Python auf dem Gerät ausprobieren. Das erwies sich als schwierig. Obwohl in der Dokumentation steht, dass das Gerät mit Python und MicroPython programmiert werden kann, konnte ich keine fertige Firmware zum Herunterladen finden.
 
Auf ihrer Website finden sich zahlreiche Beispiele und ein Tutorial für Arduino und so habe ich begonnen, diese für meine Demo-Anwendungen zu verwenden.

UI-Design

Laut der Webseite des ESP32 Terminals ist das Gerät LVGL-zertifiziert; LVGL steht für Light and Versatile Graphics Library, eine quelloffene Embedded-Grafikbibliothek zur Erstellung von Benutzeroberflächen für verschiedene MCUs und Displaytypen. Obwohl die Bibliothek selbst quelloffen ist, ist auch ein quelloffener Drag-and-Drop-Layout-Editor (Squareline Studio) verfügbar.
 
Ich habe die Testversion installiert und obwohl es auf den ersten Blick ein wenig überwältigend erscheint, ist es mir schnell gelungen, eine einfache Benutzeroberfläche für das untenstehende Servo-Projekt zu erstellen. Wenn es das Ziel ist, Benutzeroberflächen für Embedded Devices zu erstellen, dann lohnt es sich etwas Zeit zu investieren, um dieses Produkt kennenzulernen.

Zwei kleine Projekte

Ich habe beschlossen, zwei Beispielprojekte zu erstellen. Das erste Projekt ist eine kleine Wetterstation, bei der wir unsere eigene Benutzeroberfläche mit einfachen Linien und Kreisen zeichnen. Das zweite Projekt ist ein Beispiel, bei dem wir einen Servo über eine mit Squareline Studio entworfene Benutzeroberfläche steuern.

Wetterstation

Für die Wetterstation verwenden wir einen DHT-11-Sensor, der Temperatur und Feuchtigkeit messen kann. Er hat eine digitale One-Wire Schnittstelle und wird von Arduino gut unterstützt. Für dieses Projekt habe ich die Adafruit DHT-Bibliothek gewählt. Sie ist Teil einer Reihe von Sensorbibliotheken, die sich gemeinsamen Code teilen und deshalb müssen wir zusätzlich die Adafruit Unified Sensor Driver Bibliothek installieren.
 
ESP32 Terminal Wetterstation
Man Fügt einen DHT-11-Sensor und etwas Code hinzu und man erhält eine einfache Wetterstation.

In diesem Projekt beschloss ich, meine eigene Benutzeroberfläche von Grund auf neu zu erstellen und einfache Grafikelemente zu verwenden, um Text zu drucken und einige Liniengrafiken zu erstellen. Dazu verwendete ich die LovyanGFX LCD und e-Ink Grafikbibliothek, eine weitere Open-Source-Grafikbibliothek.
 
Nach der Initialisierung des Bildschirms, für die ich einfach eines der Beispiele von der ESP32 Terminal-Website kopiert habe, lesen wir den DHT-11-Sensor aus. Dieser liefert uns drei Werte: Temperatur, Luftfeuchtigkeit und den Hitzeindex. Der Hitzeindex ist eine um die aktuelle Luftfeuchtigkeit bereinigte Temperatur. Diese drei Werte werden auf einer einfachen Skala angezeigt, die aus zwei Kreisen und einer Linie als Zeiger besteht. Wir aktualisieren den Bildschirm alle zwei Sekunden mit einem neuen Messwert.

Servoansteuerung

Für die Servoansteuerung wollte ich das Tool Squareline Studio ausprobieren, um die Benutzeroberfläche zu erstellen. Ein Schieberegler in Form eines Bogens ist das einzige verwendete Widget. Der Bereich des Schiebereglers wird von 0 bis 180 eingestellt, was dem Winkel des Servos entspricht.
 
Wenn man mit diesem Tool eine Benutzeroberfläche für den ESP32 entwirft, muss man mit der Vorlage "Arduino mit TFT_eSPI" beginnen und die Farbtiefe auf 16 Bit und die Auflösung auf 480 × 320 einstellen. Nachdem man den generierten Code exportiert hat, muss man ihn in ein Verzeichnis namens "ui" im Arduino-"libraries"-Ordner entpacken. Normalerweise befindet sich dieses "libraries"-Verzeichnis im gleichen Verzeichnis wie die Arduino Programme... Ich habe einige Zeit gebraucht, um dies herauszufinden.
 
Der Servo wird von der ESP32Servo-Bibliothek gesteuert. Die Standard Arduino Servo-Bibliothek funktioniert nicht mit dem ESP32.
 
Der Code ist einfach: In der Funktion "loop" lesen wir den Winkel des Bogenschiebers, der eine Zahl zwischen 0 und 180 zurückgibt und senden diesen Wert an die Funktion "servo.write".
 
ESP32 Terminal servo test
Der runde Schieberegler steuert die Position des Servos.

Der Quellcode beider Projekte befindet sich im Downloadbereich dieses Artikels. Ich habe den Ordner "libraries" nicht in den Download aufgenommen, da er (viel) zu groß ist. Es ist nicht kompliziert, die Abhängigkeiten selbst einzutragen.

Fazit

Das ESP32 Terminal von Elecrow ist nicht so einfach zu bändigen wie ich gehofft hatte, aber es hat eine Menge Potenzial. Wenn man die Zeit investieren will, um die LVGL-Bibliothek oder eine andere UI-Bibliothek zu erlernen und mit Arduino vertraut ist, dann kann man mit dem ESP32 Terminal eine Benutzeroberfläche mit Touchsteuerung zu seinem nächsten Projekt hinzufügen.
 
Es wäre einfacher gewesen, wenn MicroPython die Firmware auf der Produktseite zum Download zur Verfügung gestanden hätte. Ich habe ein wenig im Internet gesucht, konnte aber nichts finden. Es ist sicherlich machbar, eine eigene zu kompilieren und vielleicht ist das eine nette Idee für das nächste Projekt?

Quellen