TTGO T-Display RP2040 – Hello World!

Gestern ist mein TTGO T-Display RP2040 angekommen! Wie immer bei neuen Boards gilt es für mich mit der Arduino IDE eine Art ‘Hello World’ zu programmieren. Denn dann weiß ich, das ich mit meiner Entwicklungsumgebung damit arbeiten kann.

Durch meine Experimente mit dem Raspberry Pi Pico hatte ich schon die passende Board Unterstützung installiert:

‘Arduino Mbed OS RP2040 Boards’.

Nach Anstecken des Boards musste ich noch den richtigen COM Port auswählen!

Für einen ersten Test beliebiger Boards ist es das einfachste, aus der IDE heraus das Programm ‘Beispiele->01.Basics->Blink’ aufzurufen und mit dem kleinen nach rechts zeigenden Pfeil links oben in der Arduino IDE zu kompilieren und zu starten. Das hat sofort funktioniert. Das TTGO T-Display zeigt keine schönen Bilder mehr auf der Anzeige und blinkte dafür mit der eingebauten LED!

Jetzt wird es schwieriger. Ich will das gerade überschriebene Programm von Lilygo wieder zurück auf den Microkontroller bringen.

Direkt auf der Angebotsseite auf Banggood findet sich ein zu meiner selbst gestellten Aufgabe passender Link:

https://github.com/Xinyuan-LilyGO/LILYGO-T-display-RP2040

Klicke ich auf die grüne Schaltfläche wird ein ‘Download ZIP’ angeboten. Das ist die von Lilygo bereitgestellte Unterstützung für das Board. Die ZIP Datei habe ich herunter geladen.

Den Code für das schon auf dem Board befindliche Programm und für die Arduino IDE findet sich im Verzeichnis ‘C:\Work\LILYGO-T-display-RP2040-main\firmware’ des ZIP Archivs. Ich habe das ganze Archiv in einen Ordner auf meiner Festplatte kopiert und dann auf ‘firmware.ino’ doppelt geklickt. Bei mir startet dann die Arduino IDE und lädt die ‘ino’-Datei. Dann einfach einmal auf den kleinen nach rechts zeigenden Pfeil links oben in der Arduino IDE geklickt. Denn damit kann ich den Kompiliervorgang starten und falls alles geklappt hat wird der erzeugte Code direkt auf den Microkontroller geflasht.

Woraufhin mich die IDE mit:

Nicht benutzt: C:\Users\Thomas\Documents\Arduino\libraries\arduino_418133
#include "pico/stdio.h"

begrüßte. Einer Eingebung folgend habe ich die Zeilen:

#include <stdio.h>
#include "pico/stdlib.h"

entfernt und es noch einmal probiert. Die nächste Fehlermeldung war:

C:\Work\LILYGO-T-display-RP2040-main\firmware\firmware.ino: In function 'void loop()':
firmware:80:9: error: 'class TFT_eSPI' has no member named 'printf'; did you mean 'print'?
tft.printf("Bat Voltage :%3.2fV", 2 * adc_read() * conversion_factor);

Ok, die TFT_eSPI Bibliothek scheint keine Funktion ‘printf’. Ich ersetzte die Funktion durch ‘println’:

C:\Work\LILYGO-T-display-RP2040-main\firmware\firmware.ino: In function 'void loop()':
firmware:80:74: error: no matching function for call to 'println(const char [20], float)'
tft.println("Bat Voltage :%3.2fV", 2 * adc_read() * conversion_factor);

Ok, ‘println’ kennt die Bibliothek, aber mit den Parametern kommt sie nicht zurecht. Ich wandelte die Zeile in Folgendes um:

tft.println("Bat Voltage :%3.2fV" + String (2 * adc_read() * conversion_factor));

Worauf die IDE fertig kompilierte und das Kompilat auf den TTGO T-Display RP2040 flashte! Aber das Display blieb schwarz!

Ist aber auch klar warum, denn ich muss für die TFT_eSPI Bibliothek noch das passende Display konfigurieren. Falls ihr nicht wisst um was es geht: Damit das Ansprechen des auf dem TTGO T-Display verwendeten Displays nicht in unglaublich viel Arbeit ausartet, ist es sinnvoll eine für das Display geeignete Bibliothek zu verwenden. In den letzten Jahren hat sich die von Martin Bodmer entwickelte Bibliothek ‘TFT_eSPI’ für die kleinen Displays durchgesetzt. Die könnt Ihr über ‘Bibliotheken verwalten’ installlieren. Bodmer hat den Umgang mit verschiedenen Displays geschickt gelöst, indem er alle für ein Display relevanten Daten in einer eigenen Datei zusammen fasst und in der zentralen ‘User_Setup_Select.h’ darauf verweist. Bzw., Ihr müsst dort die Zeile auskommentieren, die für Euer Display passt!

Wie gut, dass im Code von ‘firmware.ino’ oben drin steht, welche Zeile der ‘User setups’ ich verwenden soll:

//Select #include <User_Setups/Setup135_ST7789.h

Ihr findet die Datei ‘User_Setup_Select.h’ im Verzeichnis ‘C:\Users\NAME\Documents\Arduino\libraries\TFT_eSPI\’. Wieder kompilieren führt zu folgender Meldung:

In file included from C:\Users\Thomas\Documents\Arduino\libraries\TFT_eSPI\TFT_eSPI.cpp:26:0:
C:\Users\Thomas\Documents\Arduino\libraries\TFT_eSPI\Processors/TFT_eSPI_RP2040.c:14:37: error: 'TFT_MOSI' was not declared in this scope
MbedSPI spi = MbedSPI(TFT_MISO, TFT_MOSI, TFT_SCLK);

Und tatsächlich, das von TFT_eSPI verwendete ‘TFT_MOSI’ ist in der Datei ‘Setup135_ST7789.h’ auskommentiert. Auch die meisten anderen Konstanten sind auskommentiert und mir ist es ein Rätsel, warum Lilygo diese Datei empfiehlt. Jetzt entschließe ich mich mir eine eigene Setup Datei zu bauen. Dazu verwende ich die schon existierende Datei ‘Setup25_TTGO_T_Display.h‘ als Basis und ändere dort folgende Zeilen:

#define TFT_MOSI 19
#define TFT_SCLK 18
#define TFT_CS 5
#define TFT_DC 16
#define TFT_RST 23

#define TFT_BL 4 // Display backlight control pin

in

#define TFT_MOSI 3
#define TFT_SCLK 2
#define TFT_CS 5
#define TFT_DC 1
#define TFT_RST 0

#define TFT_BL 4 // Display backlight control pin

ab. Das sind offensichtlich die richtigen Pins für das Display, denn sie stehen als ‘defines’ im Quellcode!

Die so geänderte Datei speichere ich mit dem Namen ‘Setup_TTGO_T-Display_RP2040.h‘ ab. In der Auswahldatei ‘User_Setup_Select.h‘ füge ich folgende Zeile und damit einen Verweis auf meine neu kreierte Datei ein:

#include <User_Setups/Setup_TTGO_T-Display_RP2040.h> // Lilygo TTGO_T-Display RP2040

Vor dem Abspeichern müsst ihr noch sicherstellen, dass jetzt keine andere Zeile mehr auskommentiert ist! Nach dem erneuten Kompilieren und Hochladen erscheint wieder die Lilygo Applikation auf dem TTGO T-Display! Einen Schönheitsfehler gibt es aber noch. Der ‘println’-Befehl kommt mit den Formatierungsanweisungen nicht zurecht: %3.2f

Darum habe ich sie entfernt.

 

Kommentar hinterlassen

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