TTGO T-Display S3 – Hello World!

Mit seinem Namen ‚T-Display‘ ist das S3 sicherlich als Nachfolger des etablierten T-Display zu verstehen und muss sich als solches dem Vergleich mit diesem stellen. Da es etwas größer ist, passt es zumindest in mein für das alte T-Display konstruierte Gehäuse nicht mehr hinein. Andererseits ist es nur wenig größer und eigentlich nur ein bisschen länger. Grundsätzlich kann es damit ähnliche Aufgaben wie das alte übernehmen. Das eingesetzte Display ist allerdings wesentlich größer als das im alten verbaute und überdeckt fast die ganze Platine. Das ist wesentlich attraktiver als beim alten T-Display! Während die Grundidee, einen ESP32 Mikrocontroller schon bei der Herstellung mit einem schicken Farbdisplay auszustatten, sehr gut war, viel in vielen Anwendungsfällen auf, dass die Platine nur vielleicht zu einem Drittel vom Display überdeckt wird und so die Elektronik zu sehen ist. Elektronik überdeckende Gehäuse hatten dafür dann einen unschönen Rand. Und natürlich war das Display einfach auch sehr klein. Diese Makel werden durch das neue T-Display S3 ausgemerzt. Dafür sind die PINs nur noch von einer Seite zugänglich und die Taster lassen sich schlechter verwenden.

Interessant ist der Einsatz eines durchsichtigen Kunststoffrahmens, der zum einen als Abstandshalter zur Platine dient als auch einen Aufnahmebereich für das Display selbst bietet. Beim alten T-Display ist das Display einfach auf einen flachen Bereich der Platine mit einem Klebepad geklebt. Dadurch steht es im Bereich des Anschluss-Flachbandkabels immer leicht ab und ist manchmal auch leicht schief. Das ist mit dem Kunststoffrahmen des neuen T-Display S3 keine Thema mehr. Das Display sitzt plan auf dem Rahmen und wird automatisch durch diesen gerade fixiert.

Das neue Display ist 2,64 mal so groß wie das alte, hat dabei aber nur 1,69 mal so viele Pixel, was zu einer etwas geringeren Pixeldichte von ca. 190 DPI führt, also im Vergleich zu ca. 244 DPI des alten T-Displays, etwas weniger.

Die eingebauten Tasten scheinen die gleichen wie beim alten zu sein, was ich negativ sehe, da mir diese bei mehreren Boards des alten T-Display kaputt gegangen sind. Und da das neue Display aufgrund seiner Größe sehr nahe an die Taster heran reicht, lassen sich diese nicht mehr so leicht verwenden.

Ein paar Fakten:

Das neue LILYGO T-Display S3

Abmessungen: 62 x 26 x 10 mm

320 x 170 = 54400 Pixel

Seitenverhältnis Pixel: 1,88

Abmessungen Display ungefähr: 43 x 23 mm

Seitenverhältnis Fläche: 1,87

DPI: 189

Das alte TTGO T-Display ESP32

Abmessungen: 51,52 x 25,04 x 8,54 mm

240 x 135 = 32400 Pixel

Seitenverhältnis Pixel: 1,78

Abmessungen Display ungefähr: 25 x 15 mm

Seitenverhältnis Fläche: 1,67

DPI: 244

Programmierung

Ich konnte Programme für das neue T-Display sowohl mit der alten Arduino IDE 1.8.19 als auch mit der neuen Arduino IDE 2.0.1 kompilieren und hochladen. Dies war aber erst einmal gar nicht so einfach. Für den Test des T-Display S3 hatte ich die Boardverwalter-URLs um nachfolgende erweitert:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

Anschließend mit ‚Werkzeuge→Board→Boardverwalter…‘ (IDE 1.8.19) oder ‚BOARDS MANAGER‘ (IDE 2.01) nach ‚ESP32‘gesucht und das Kit von Espressiv auf 2.0.5 upgedatet. Anschließend (Eventuell erst nach einem Neustart) ist es möglich das Board ‚ESP32S3 Dev Module‘ und einen passenden Port auszuwählen und mit der Entwicklung loszulegen.

In der letzten Zeit habe ich vor allem mit dem alten TTGO T-Display gearbeitet und dort ist es so, dass ich beim Entwickeln einfach den ‚Upload‘-Button der Arduino IDE anklicken kann, um die Kompilierung und das anschließende Hochladen auf das T-Display zu starten. Dazu muss ich das T-Display nicht mehr anfassen. Beim Hochladen stoppt das aktuell laufende Programm, das kompilierte Programm wird auf den ESP32 geflasht und anschließend startet das neu hochgeladene Programm automatisch. Das habe ich seit meinen Anfängen mit dem Adafruit Trinket sehr geschätzt, da ich beim Trinket immer in einem bestimmten, ca. 10 Sekunden dauernden Zeitfenster, einen Taster drücken musste, was auf Dauer schon nervig ist.

Aber hier passierte nichts, es kam nur jedes mal nach dem Kompilieren eine Fehlermeldung von ‚esptool‘, dem Werkzeug zum Hochladen. Das hat mich einiges an Zeit gekostet, da ich mir einfach nicht mehr vorstellen konnte, dass ich das T-Display S3 erst in einen Boot Modus schalten muss! Dazu drückt und hält man am besten den ‚Bot‘-Taster, drückt dazu den Reset-Taster, lässt diesen wieder los und anschließend den ‚Bot‘-Taster. Jetzt noch den Port einstellen und dann den ‚Upload‘ Button der IDE noch einmal drücken. Dann klappt es!

Nachdem ich mein eigenes Programm das erste Mal auf das T-Display S3 geladen hatte und anschließend noch einmal versuchte ein Programm hochzuladen, bekam ich dieses Fehlermeldung:

A fatal error occurred: Failed to connect to ESP32-S3: Wrong boot mode detected (0x8)! The chip needs to be in download mode.

Aber auch da hilft die eben beschriebene Tastenkombination.

Als erstes habe ich versucht mein Mandelbrot Programm, welches ich ursprünglich für das alte T-Display entwickelt habe, auf dem neuen zum Laufen zu bringen. Das führte zu folgender Fehlermeldung:

error: 'VSPIQ_IN_IDX' was not declared in this scope

Daraufhin habe ich mir das von LilyGo zum T-Display S3 angebotene Archiv von GitHub herunter geladen und ein bisschen darin gestöbert. Dort wird darauf hingewiesen, dass die TFT_eSPI Bibliothek, die ich für alle Anwendungen die eine grafische Ausgabe benötigen, verwende, angepasst werden muss. Dort liegt auch gleich eine passend angepasste Bibliothek dabei und nachdem ich diese in mein ‚libraries‘-Verzeichnis kopiert hatte, konnte ich das Mandelbrot Programm mit ein paar kleineren Anpassungen, die die geänderte Auflösung und geänderte PINs betreffen, kompilieren und mit dem oben beschriebenen Kniff auf das T-Display S3 hochladen.

Es gibt allerdings ein großes Problem mit der mitgelieferten Bibliothek: Sobald Ihr diese einsetzt, könnt Ihr nicht mehr auf die automatischen Updates von der Arduino IDE ab 2.0 zugreifen. Denn diese würde einfach die neueste Bibliothek aus dem Internet holen und die von LilyGo mitgelieferte ersetzen! Hier hoffe ich darauf, dass die für das neue T-Display S3 notwendigen Änderungen bald in der TFT_eSPI Bibliothek integriert werden, so dass dies wieder funktioniert. Ich habe mir mittlerweile mit meinen Projekten funktionierende Bibliotheken zu meinen Mikrocontroller spezifischen Projektordnern kopiert, so dass ich im Notfall (versehentlich aktualisiert) schnell wieder zu lauffähigen Programmen komme.

Beim Testen ist mir aufgefallen, dass die Helligkeitssteuerung nicht richtig funktioniert. Generell scheint mir das neue T-Display etwas dunkler zu leuchten als das alte. In den meisten meiner Programme habe ich eine Funktion für die Helligkeitssteuerung eingebaut, die mit dem alten T-Display sehr gut funktioniert. Ich kann damit durch einen Tastendruck die Helligkeit in 5 Stufen anpassen. Doch beim neuen T-Display S3 ist es manchmal vorgekommen, dass das Display beim Erreichen der höchsten Stufe leicht dunkler geworden ist.

Im LilyGo Archiv gibt es ein ‚factory‘ Projekt, welches den gleichen Code zur Helligkeitssteuerung verwendet. Beim neuen T-Display S3 ist allerdings die PWM-Frequenz auf 10000, anstatt auf 1000 eingestellt. Das habe ich bei mir angepasst und scheinbar funktioniert es jetzt besser. Aber ganz sicher bin ich mir noch nicht und erklären kann ich es mir auch nicht.

Auf Reddit hat jemand geschrieben, dass das Display Subsystem mit Blick auf die LVGL Bibliothek entwickelt wurde und damit TFT_eSPI nicht ganz so gut geeignet ist, da sie etwas langsamer sein soll.

Zum Programm

Ausnahmsweise habe ich ein ‚Hello World‘ für Euch geschrieben, welches nicht nur einfach ‚Hello World‘ irgendwo hin schreibt, sondern Euch auch zeigt wie man grundsätzlich die Grafik programmiert. Denn ein Produkt wie das T-Display ist mit seinem integrierten wunderschönen Display ohne Grafikfunktionen eigentlich unterfordert bzw. nicht sinnvoll einsetzbar. Ich setze seit einigen Jahren die TFT_eSPI Bibliothek ein und bin sehr zufrieden damit. Darum zeige ich Euch in diesem Programm minimalistisch den Einsatz der Bibliothek. Wenn das Programm bei Euch funktioniert, könnt Ihr weiter in die Dokumentation einsteigen und weitere Funktionen einsetzen.

Hier die wichtigsten PINs:

#define BUTTON_1  0
#define BUTTON_2 14
#define TFT_BL 38
#define PWR_ON 15
#define BatVol 4

Das Programm:

#include <TFT_eSPI.h>

#define TFT_BL 38
#define PWR_ON 15

#define SCREENWIDTH 170
#define SCREENHEIGHT 320

TFT_eSPI tft = TFT_eSPI();

void setup() {
  tft.init();
  tft.setRotation(3);
  pinMode(PWR_ON, OUTPUT);
  digitalWrite(PWR_ON, HIGH);
  setBacklight(255);
  tft.setTextSize(2);
  tft.setTextColor(TFT_WHITE);
  tft.fillScreen(TFT_BLACK);
  tft.drawString("Hello World!", 100, 75);
  delay(2000);
}

void loop() {
  uint32_t color;
  switch (random(6)) {
    case 0:
      color = TFT_RED;
      break;
    case 1:
      color = TFT_GREEN;
      break;
    case 2:
      color = TFT_BLUE;
      break;
    case 3:
      color = TFT_YELLOW;
      break;
    case 4:
      color = TFT_NAVY;
      break;
    case 5:
      color = TFT_ORANGE;
      break;
  }
  tft.fillRoundRect(random(SCREENHEIGHT), random(SCREENWIDTH), 50, 50, 4, color);
  delay(100);
}

void setBacklight(int brightness) {
  ledcSetup(0, 10000, 8);    // PWM channel 1, 1000Hz, 8 bit
  ledcAttachPin(TFT_BL, 0);  // attach to TFT backlight
  ledcWrite(0, brightness);  // set backlight
}

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert