Die Übersetzungen auf dieser Seite wurden mit DeepL.com vorgenommen und ggf. von mir korrigiert.
Es gibt verschiedene Stellen im Internet bei denen man Micropython für das Lilygo T-Device S3 finden kann. Zuerst beim „Original“ Micropython.org. Hier gibt es 3 Versionen für den S3
https://micropython.org/download/GENERIC_S3/
https://micropython.org/download/GENERIC_S3_SPIRAM_OCT/
https://micropython.org/download/GENERIC_S3_SPIRAM/
Dann gibt es noch eine Version mit integriertem ST7789 Modul:
https://github.com/russhughes/st7789s3_mpy
Zu guter Letzt noch eine Version auf die LILYGO verweist. Diese muss aber noch selbst kompiliert werden.
https://github.com/Xinyuan-LilyGO/lilygo-micropython
Zu beachten ist, dass die Startadresse beim ESP32-S3 0 ist. Beim ESP32 ist sie ansonsten 0x1000. Dieser Wert steht auch in vielen Anleitungen. Mir hat das mindestens einen Tag Probiererei gekostet, bis ich dahinter gekommen bin.
LILYGO T-Display Layout
Quelle: https://github.com/Xinyuan-LilyGO/T-Display-S3 Hier gibt es auch das Schaltbild.
Die Grafikbefehle – wird gerade bearbeitet!
Von https://github.com/russhughes/st7789s3_mpy/tree/main kopiert und mit DeepL.com übersetzt.
- st7789.ST7789(d7, d6, d5, d4, d3, d2, d1, d0, wr, rd, width, height, dc, reset, cs, backlight, rotations, rotation, color_order, inversion, options, buffer_size)
- Erforderliche positionsbezogene Argumente:
d7
: 8-bit data bus pin bit 7 (Most significant bit)d6
: 8-bit data bus pin bit 6d5
: 8-bit data bus pin bit 5d4
: 8-bit data bus pin bit 4d3
: 8-bit data bus pin bit 3d2
: 8-bit data bus pin bit 2d1
: 8-bit data bus pin bit 1d0
: 8-bit data bus pin bit 0 (Least significant bit)wr
: write strobe pinrd
: read strobe pinwidth
display widthheight
display height- Erforderliche Schlüsselwortargumente:
dc
- legt den Pin fest, der mit dem Daten-/Befehlseingang der Anzeige verbunden ist. Dieser Parameter ist immer erforderlich.
- Optionale Schlüsselwortargumente:
reset
- legt den Pin fest, der mit dem Hardware-
Reset
-Eingang des Displays verbunden ist. Wenn derReset
-Pin des Displays auf High geschaltet ist, ist derReset
-Parameter nicht erforderlich.
- legt den Pin fest, der mit dem Hardware-
cs
- legt den Pin fest, der mit dem
Chip-Select-Eingang
des Displays verbunden ist. Wenn derCS-Pin
des Displays aufLow
geschaltet ist, muss das Display das einzige Gerät sein, das mit dem SPI-Port verbunden ist. Das Display ist immer das ausgewählte Gerät, und der cs-Parameter ist nicht erforderlich.
- legt den Pin fest, der mit dem
backlight
- legt den Pin fest, der mit dem Eingang für die Hintergrundbeleuchtung des Displays verbunden ist. Der Eingang für die Hintergrundbeleuchtung des Displays kann oft potentialfrei bleiben oder nicht angeschlossen werden, da die Hintergrundbeleuchtung bei einigen Displays immer eingeschaltet ist und nicht ausgeschaltet werden kann.
rotations
- setzt die Orientierungstabelle. Die Orientierungstabelle ist eine Liste von Tupeln für jede Drehung, die verwendet wird, um das
MADCTL-Register
, die Anzeigebreite, die Anzeigehöhe, die start_x- und start_y-Werte zu setzen: - Display
- Standardausrichtungstabellen
- 240×320
- [(0x00, 240, 320, 0, 0), (0x60, 320, 240, 0, 0), (0xc0, 240, 320, 0, 0), (0xa0, 320, 240, 0, 0)]
- 170×320
- [(0x00, 170, 320, 35, 0), (0x60, 320, 170, 0, 35), (0xc0, 170, 320, 35, 0), (0xa0, 320, 170, 0, 35)]
- 240×240
- [(0x00, 240, 240, 0, 0), (0x60, 240, 240, 0, 0), (0xc0, 240, 240, 0, 80), (0xa0, 240, 240, 80, 0)]
- 135×240
- [(0x00, 135, 240, 52, 40), (0x60, 240, 135, 40, 53), (0xc0, 135, 240, 53, 40), (0xa0, 240, 135, 40, 52)]
- 128×160
- [(0x00, 128, 160, 0, 0), (0x60, 160, 128, 0, 0), (0xc0, 128, 160, 0, 0), (0xa0, 160, 128, 0, 0)]
- 128×128
- [(0x00, 128, 128, 2, 1), (0x60, 128, 128, 1, 2), (0xc0, 128, 128, 2, 3), (0xa0, 128, 128, 3, 2)]
- other
- [(0x00, width, height, 0, 0)]
- You may define as many rotations as you wish.
- setzt die Orientierungstabelle. Die Orientierungstabelle ist eine Liste von Tupeln für jede Drehung, die verwendet wird, um das
rotation
- stellt die Anzeigendrehung gemäß der Orientierungstabelle ein.
- Die Standardausrichtungstabelle definiert vier Drehungen gegen den Uhrzeigersinn für 240×320-, 240×240-, 134×240-, 128×160- und 128×128-Displays, bei denen sich das Flachbandkabel des LCDs an der Unterseite des Displays befindet. Die Standarddrehung ist Hochformat (0 Grad).
- Index — Rotation
- 0 — Hochformat (0 Grad)
- 1 — Landschaft (90 Grad)
- 2 — Umgekehrtes Hochformat (180 Grad)
- 3 — Umgekehrtes Querformat (270 Grad)
color_order
- setzt die vom Treiber verwendete Farbreihenfolge (st7789.RGB oder st7789.BGR)
inversion
- Legt den Modus für die Farbumkehrung der Anzeige fest, wenn
True
, und löscht den Modus für die Farbumkehrung der Anzeige, wennFalse
.
- Legt den Modus für die Farbumkehrung der Anzeige fest, wenn
options
- Setzt Treiberoptionsflags.
- Option
- Beschreibung
st7789.WRAP
- Pixel, Linien, Polygone und Hershey-Text werden sowohl horizontal als auch vertikal um die Anzeige herumgezogen.
st7789.WRAP_H
- Pixel, Linien, Polygone und Hershey-Text werden horizontal um die Anzeige gewickelt.
st7789.WRAP_V
- Pixel, Linien, Polygone und Hershey-Text werden vertikal um die Anzeige herumgeführt.
- Option
- Setzt Treiberoptionsflags.
buffer_size
- Wenn keine Puffergröße angegeben wird, wird ein dynamisch zugewiesener Puffer erstellt und bei Bedarf wieder freigegeben. Wenn eine
buffer_size
festgelegt wird, muss sie groß genug sein, um das größte verwendete Bitmap, Schriftzeichen und dekodierte JPG-Bild zu enthalten (Zeilen * Spalten * 2 Byte, 16-Bit-Farben in RGB565-Notation). Die dynamische Zuweisung ist langsamer und kann zu einer Fragmentierung des Heaps führen, weshalb dieGarbage Collection
(GC) aktiviert werden sollte.
- Wenn keine Puffergröße angegeben wird, wird ein dynamisch zugewiesener Puffer erstellt und bei Bedarf wieder freigegeben. Wenn eine
- Erforderliche positionsbezogene Argumente:
deinit()
- Gibt den von den Puffern verwendeten Speicher frei und löscht das dedizierte GPIO-Bündel. Diese Methode sollte vor der Reinitialisierung des Displays aufgerufen werden, ohne den Mikrocontroller hart zurückzusetzen.
inversion_mode(bool)
- Legt den Modus für die Farbumkehrung der Anzeige fest, wenn er
True
ist, und löscht den Modus für die Farbumkehrung der Anzeige, wenn erFalse
ist.
- Legt den Modus für die Farbumkehrung der Anzeige fest, wenn er
madctl(value)
- Gibt den aktuellen Wert des MADCTL-Registers zurück oder setzt das MADCTL-Register, wenn ein Wert an die Methode übergeben wird. Das MADCTL-Register wird zur Einstellung der Anzeigendrehung und der Farbreihenfolge verwendet.
init()
- Muss aufgerufen werden, um die Anzeige zu initialisieren.
on()
- Schaltet den Pin für die Hintergrundbeleuchtung ein, wenn dieser bei init definiert wurde.
off()
- Deaktiviert den Pin für die Hintergrundbeleuchtung, falls ein solcher bei init definiert wurde..
sleep_mode(wert)
- Wenn der Wert
True
ist, wird die Anzeige in den Ruhezustand versetzt, andernfalls wird sie aufgeweckt, wenn der WertFalse
ist. Während des Ruhezustands bleibt der Inhalt des Displays möglicherweise nicht erhalten.
- Wenn der Wert
fill(farbe)
- Füllen Sie die Anzeige mit der angegebenen Farbe.
pixel(x, y, farbe)
- Setzt das angegebene Pixel auf die angegebene
Farbe
.
- Setzt das angegebene Pixel auf die angegebene
line(x0, y0, x1, y1, color)
- Zeichnet eine einzelne Linie mit der angegebenen
Farbe
von (x0
,y0
) bis (x1
,y1
).
- Zeichnet eine einzelne Linie mit der angegebenen
hline(x, y, length, color)
- Zeichnet eine einzelne horizontale Linie mit der angegebenen
Farbe
undLänge
in Pixel. Zusammen mitvline
ist dies eine schnelle Version mit weniger SPI-Aufrufen.
- Zeichnet eine einzelne horizontale Linie mit der angegebenen
vline(x, y, length, color)
- Zeichnet eine einzelne horizontale Linie mit der angegebenen
Farbe
undLänge
in Pixel.
- Zeichnet eine einzelne horizontale Linie mit der angegebenen
rect(x, y, width, height, color)
- Zeichnet ein Rechteck aus (
x
,y
) mit den entsprechenden Abmessungen
- Zeichnet ein Rechteck aus (
fill_rect(x, y, width, height, color)
- Füllen eines Rechtecks ab den Koordinaten (
x
,y
)
- Füllen eines Rechtecks ab den Koordinaten (
circle(x, y, r, color)
- Zeichnet einen Kreis mit Radius
r
zentriert an den Koordinaten (x
,y
) in der angegebenenFarbe
.
- Zeichnet einen Kreis mit Radius
fill_circle(x, y, r, color)
- Zeichnet einen gefüllten Kreis mit Radius
r
zentriert an den Koordinaten (x
,y
) in der angegebenenFarbe
.
- Zeichnet einen gefüllten Kreis mit Radius
blit_buffer(buffer, x, y, width, height)
- Kopiert den Inhalt von bytes() oder bytearray() in den internen Speicher des Bildschirms. Hinweis: Jede Farbe benötigt 2 Bytes im Array
text(font, s, x, y[, fg, bg])
- Schreibt Text auf den Bildschirm unter Verwendung der angegebenen Bitmap
font
mit den Koordinaten als linke obere Ecke des Textes. Die optionalen Argumentefg
undbg
können die Vorder- und Hintergrundfarben des Textes festlegen; andernfalls ist die Vordergrundfarbe standardmäßigWHITE
und die Hintergrundfarbe standardmäßigBLACK
. SieheREADME.md
imfonts/bitmap
Verzeichnis für Beispielschriftarten.
- Schreibt Text auf den Bildschirm unter Verwendung der angegebenen Bitmap
write(bitmap_font, s, x, y[, fg, bg, background_tuple, fill_flag])
- Schreibt Text in die Anzeige unter Verwendung des angegebenen Proportional- oder Monospace-Bitmap-Fontmoduls mit den Koordinaten als linke obere Ecke des Textes. Die Vorder- und Hintergrundfarbe des Textes kann mit den optionalen Argumenten
fg
undbg
festgelegt werden, andernfalls ist die Vordergrundfarbe standardmäßigWHITE
und die Hintergrundfarbe standardmäßigBLACK
.Transparenz kann emuliert werden, indem einbackground_tuple
mit (bitmap_buffer, width, height) angegeben wird. Dies ist das gleiche Format, das von der Methode jpg_decode verwendet wird. Siehe examples/T-DISPLAY/clock/clock.py für ein Beispiel, siehe auchREADME.md
imtruetype/fonts
Verzeichnis für Beispielschriftarten. Gibt die Breite der Zeichenkette wie gedruckt in Pixel zurück. Das Hilfsprogrammfont2bitmap
erzeugt kompatible Bitmap-Module mit 1 Bit pro Pixel aus Proportional- oder Monospaced-True-Type-Schriften. Die Zeichengröße, die Vorder- und Hintergrundfarben und die Zeichen im Bitmap-Modul können als Parameter angegeben werden. Verwenden Sie die Option -h für Details. Wenn Sie bei der Initialisierung der Anzeige eine Puffergröße angeben, muss diese groß genug sein, um das breiteste Zeichen (HEIGHT * MAX_WIDTH * 2) aufzunehmen.
- Schreibt Text in die Anzeige unter Verwendung des angegebenen Proportional- oder Monospace-Bitmap-Fontmoduls mit den Koordinaten als linke obere Ecke des Textes. Die Vorder- und Hintergrundfarbe des Textes kann mit den optionalen Argumenten
write_len(bitap_font, s)
- Gibt die Breite der Zeichenkette in Pixeln zurück, wenn sie in der angegebenen Schriftart gedruckt wird.
draw(vector_font, s, x, y[, fg, scale])
- Zeichnet Text auf dem Display unter Verwendung der angegebenen Hershey-Vektorschriftart mit den Koordinaten als untere linke Ecke des Textes. Die Vordergrundfarbe des Textes kann mit dem optionalen Argument
fg
eingestellt werden. Ansonsten ist die Vordergrundfarbe standardmäßigWHITE
. Die Größe des Textes kann durch Angabe einesSkala
Wertes skaliert werden. Derskalieren
Wert muss größer als 0 sein und kann ein Fließkomma- oder ein Ganzzahlwert sein. DerSkala
-Wert ist standardmäßig 1.0. Siehe die README.md im Verzeichnisvector/fonts
für Beispielschriften und das Verzeichnis utils für ein Schriftkonvertierungsprogramm.
- Zeichnet Text auf dem Display unter Verwendung der angegebenen Hershey-Vektorschriftart mit den Koordinaten als untere linke Ecke des Textes. Die Vordergrundfarbe des Textes kann mit dem optionalen Argument
draw_len(vector_font, s[, scale])
- Gibt die Breite der Zeichenkette in Pixeln zurück, wenn sie mit der angegebenen Schriftart gezeichnet wurde.
jpg(jpg_filename, x, y [, method])
- Zeichnen Sie eine JPG-Datei auf dem Bildschirm an den angegebenen
x
undy
Koordinaten als linke obere Ecke des Bildes. Der Speicherbedarf für die Dekodierung und Anzeige eines JPG-Bildes kann beträchtlich sein, da ein bildschirmfüllendes 320×240-JPG mindestens 3100 Byte für den Arbeitsbereich + 320 * 240 * 2 Byte Speicher für die Pufferung des Bildes benötigt. JPG-Bilder, die einen Puffer benötigen, der größer ist als der verfügbare Speicher, können durch Übergabe vonSLOW
für dieMethode
gezeichnet werden. DieSLOW
Methode
zeichnet das Bild Stück für Stück unter Verwendung der Minimum Coded Unit (MCU, normalerweise ein Vielfaches von 8×8) des Bildes.
- Zeichnen Sie eine JPG-Datei auf dem Bildschirm an den angegebenen
jpg_decode(jpg_filename [, x, y, width, height])
- Dekodiert eine jpg-Datei und gibt sie oder einen Teil davon als Tupel bestehend aus (buffer, width, height) zurück. Der Puffer ist ein mit color565 blit_buffer kompatibles Byte-Array. Wenn die optionalen Parameter x, y, width und height angegeben werden, wird der Puffer nur den angegebenen Bereich des Bildes enthalten. Siehe examples/T-DISPLAY/clock/clock.py examples/T-DISPLAY/toasters_jpg/toasters_jpg.py für Beispiele.
png(png_filename, x, y [, mask])
- Zeichnet eine PNG-Datei auf dem Bildschirm mit der linken oberen Ecke des Bildes an den angegebenen Koordinaten. Das PNG wird nicht beschnitten, es muss vollständig auf den Bildschirm passen, sonst wird es nicht gezeichnet. Der Speicherbedarf für die Dekodierung und Anzeige eines PNGs kann beträchtlich sein. Daher wird das PNG entweder eine Zeile nach der anderen gezeichnet oder so viele Zeilen, wie in den
Puffer
Puffergröße
passen, wenn dieser bei der Initialisierung des Displays angegeben wurde. Da der Treiber keinen Framebuffer enthält, wird Transparenz nicht unterstützt. Die Angabe einesTrue
Wertes für denmask
Parameter verhindert, dass Pixel mit einem Alphakanalwert von Null angezeigt werden. Das Zeichnen von maskierten PNGs ist langsamer als nicht maskierte, da jedes sichtbare Liniensegment separat gezeichnet wird. Ein Beispiel für die Verwendung einer Maske finden Sie im Programm alien.py im Ordner examples/png.
- Zeichnet eine PNG-Datei auf dem Bildschirm mit der linken oberen Ecke des Bildes an den angegebenen Koordinaten. Das PNG wird nicht beschnitten, es muss vollständig auf den Bildschirm passen, sonst wird es nicht gezeichnet. Der Speicherbedarf für die Dekodierung und Anzeige eines PNGs kann beträchtlich sein. Daher wird das PNG entweder eine Zeile nach der anderen gezeichnet oder so viele Zeilen, wie in den
polygon_center(polygon)
- Gibt den Mittelpunkt des
Polygons
als (x, y) Tupel zurück. DasPolygon
sollte aus einer Liste von (x, y) Tupeln bestehen, die ein geschlossenes konvexes Polygon bilden.
- Gibt den Mittelpunkt des
fill_polygon(polygon, x, y, color[, angle, center_x, center_y])
(angle = 0 … <2*PI)- Zeichne ein gefülltes
Polygon
an denx
, undy
Koordinaten in derFarbe
angegebenen. Das Polygon kann imWinkel
Bogenmaß um dencenter_x
undcenter_y
Punkt gedreht werden. Das Polygon sollte aus einer Liste von (x, y) Tupeln bestehen, die ein geschlossenes konvexes Polygon bilden, siehe TWATCH-2020watch.py
Demo für ein Beispiel.
- Zeichne ein gefülltes
polygon(polygon, x, y, color, angle, center_x, center_y)
(angle = 0 … <2*PI)- Zeichne ein
Polygon
an denx
, undy
Koordinaten in derFarbe
gegeben. Das Polygon kann imWinkel
Bogenmaß um dencenter_x
undcenter_y
Punkt gedreht werden. Das Polygon sollte aus einer Liste von (x, y) Tupeln bestehen, die ein geschlossenes konvexes Polygon bilden, siehe T-Displayroids.py
für ein Beispiel.
- Zeichne ein
bounding({status, as_rect})
- Bounding aktiviert oder deaktiviert die Verfolgung des Anzeigebereichs, in den geschrieben wurde. Anfänglich ist die Nachverfolgung deaktiviert; übergeben Sie einen True-Wert, um die Nachverfolgung zu aktivieren, und False, um sie zu deaktivieren. Die Übergabe eines True- oder False-Parameters setzt das aktuelle Begrenzungsrechteck auf (display_width, display_height, 0, 0) zurück. Gibt ein vierstelliges Tupel zurück, das (min_x, min_y, max_x, max_y) enthält und den Bereich der Anzeige angibt, in den seit der letzten Löschung geschrieben wurde.Wenn
as_rect
Parameter True ist, enthält das zurückgegebene Tupel (min_x, min_y, width, height) Werte.Siehe die TWATCH-2020watch.py
Demo für ein Beispiel.
- Bounding aktiviert oder deaktiviert die Verfolgung des Anzeigebereichs, in den geschrieben wurde. Anfänglich ist die Nachverfolgung deaktiviert; übergeben Sie einen True-Wert, um die Nachverfolgung zu aktivieren, und False, um sie zu deaktivieren. Die Übergabe eines True- oder False-Parameters setzt das aktuelle Begrenzungsrechteck auf (display_width, display_height, 0, 0) zurück. Gibt ein vierstelliges Tupel zurück, das (min_x, min_y, max_x, max_y) enthält und den Bereich der Anzeige angibt, in den seit der letzten Löschung geschrieben wurde.Wenn
bitmap(bitmap, x , y [, index])
- Zeichnet
bitmap
unter Verwendung der angegebenenx
,y
Koordinaten als linke obere Ecke derbitmap
. Der optionale Parameterindex
bietet eine Methode zur Auswahl aus mehreren Bitmaps, die einbitmap
-Modul enthält. Derindex
wird verwendet, um den Versatz zum Anfang des gewünschten Bitmaps zu berechnen, indem die Werte HEIGHT, WIDTH und BPP des Moduls verwendet werden.Dieimgtobitmap.py
erzeugt kompatible Bitmap-Module mit 1 bis 8 Bit pro Pixel aus Bilddateien unter Verwendung der Pillow Phyton Imaging Library.Themonofont2bitmap.py
erzeugt kompatible Bitmap-Module mit 1 bis 8 Bit pro Pixel aus Monospaced True Type-Schriften. Siehe dieinconsolata_16.py
,inconsolata_32.py
undinconsolata_64.py
Dateien imexamples/lib
Ordner für Beispielmodule und diemono_font.py
Programm für ein Beispiel, das die generierten Module verwendet. Die Zeichengrößen, Bit pro Pixel, Vorder- und Hintergrundfarben und die Zeichen, die in das Bitmap-Modul aufgenommen werden sollen, können als Parameter angegeben werden. Verwenden Sie die Option -h für Details. Bits pro Pixel-Einstellungen, die größer als eins sind, können verwendet werden, um Zeichen mit Antialiasing zu erzeugen, was jedoch zu Lasten des Speichers geht. Wenn Sie bei der Initialisierung der Anzeige eine Puffergröße angeben, muss diese groß genug sein, um ein Zeichen (HEIGHT * WIDTH * 2) aufzunehmen.
- Zeichnet
width()
- Gibt die aktuelle logische Breite der Anzeige zurück. (z. B. ist eine 135×240-Anzeige um 90 Grad gedreht 240 Pixel breit)
height()
- Gibt die aktuelle logische Höhe der Anzeige zurück. (d.h. eine um 90 Grad gedrehte 135×240-Anzeige ist 135 Pixel hoch)
rotation(r)
- Mit dieser Einstellung wird die logische Anzeige gegen den Uhrzeigersinn gedreht. 0-Porträt (0 Grad), 1-Landschaft (90 Grad), 2-Umgekehrt-Porträt (180 Grad), 3-Umgekehrt-Landschaft (270 Grad)
offset(x_start, y_start)
- Der Speicher des ST7789-Controllers ist für ein 240×320-Display konfiguriert. Wenn Sie ein kleineres Display wie 240×240 oder 135×240 verwenden, muss ein Offset zu den x- und y-Parametern hinzugefügt werden, damit die Pixel in den Speicherbereich geschrieben werden, der dem sichtbaren Display entspricht. Die Offsets müssen eventuell angepasst werden, wenn die Anzeige gedreht wird. z.B. ist das TTGO-TDisplay 135×240 und verwendet die folgenden Offsets.Rotationx_starty_start05240140532534034052Wenn die Rotationsmethode aufgerufen wird, passt der Treiber die Offsets für eine 135×240 oder 240×240 Anzeige an. In diesem Fall verwenden Sie die Methode
offset
nach der Methoderotation
um die Offset-Werte einzustellen. Eine Methode besteht darin, einen Rahmen in der Größe der Anzeige zu zeichnen und dann kleine Änderungen an den Offsets vorzunehmen, bis die Anzeige korrekt aussieht. Siehe das Programmcfg_helper.py
im Ordner examples für weitere Informationen.
- Der Speicher des ST7789-Controllers ist für ein 240×320-Display konfiguriert. Wenn Sie ein kleineres Display wie 240×240 oder 135×240 verwenden, muss ein Offset zu den x- und y-Parametern hinzugefügt werden, damit die Pixel in den Speicherbereich geschrieben werden, der dem sichtbaren Display entspricht. Die Offsets müssen eventuell angepasst werden, wenn die Anzeige gedreht wird. z.B. ist das TTGO-TDisplay 135×240 und verwendet die folgenden Offsets.Rotationx_starty_start05240140532534034052Wenn die Rotationsmethode aufgerufen wird, passt der Treiber die Offsets für eine 135×240 oder 240×240 Anzeige an. In diesem Fall verwenden Sie die Methode
- Das Modul bietet vordefinierte Farben:
BLACK
,BLUE
,RED
,GREEN
,CYAN
,MAGENTA
,YELLOW
, undWHITE
Ab hier herrscht noch Baustellenchaos – nicht weiterlesen!
Microphyton auf dem T-Display S3 zum Laufen zu bekommen ist ein wahrer Hürdenlauf.
Erster Versuch
Meine erste Suche führte mich zu dieser (https://github.com/Xinyuan-LilyGO/lilygo-microphyton) Seite. Hier gibt es ein aktuelles Micropython (V.1.19) speziell für den T-Display S3. Allerdings muss dieses erst kompiliert werden. Das war für mich neu. Aber mit fachkundiger Unterstützung ging es ganz einfach:
Zuerst musste ich das Repository von Github herunterladen. Dazu muss Git auf dem Rechner installiert sein. Die Anleitung auf o.a. Seite bezieht sich nur auf Linux Rechner. Zu Glück habe ich einen. Nun muss zuerst das Verzeichnis angesteuert oder erzeugt werden in dem das Repo abgelegt werden soll:
cd repoverzeichnis
Dann kann das Verzeichnis von Github geclonet werden:
git clone https://github.com/Xinyuan-LilyGO/lilygo-microphyton.git
Im repoverzeichnis
wird beim Clonen der Ordner lilygo-micropython
angelegt. In diesen mus nun gewechselt werden:
cd lilygo-microphyton
Dann die beiden folgen Zeilen nacheinander ausführen:
$ cp config_T-DisplayS3 config $ make
Nach ca. 20 Minuten – je nach Rechner – findet man unter
bin/esp32s3/LILYGO_T-DisplayS3
eine Datei mit diesem oder einem ähnlichen Namen:
LilyGo-MicroPhyton_esp32s3_LILYGO_T-DisplayS3_MPY-d7919ea71_IDF-e8bdaf9198_B20230427_039ab10285.bin
Das ist nun die Datei, die Micropython auf dem T-Display S3 ermöglichen soll.
Micropython auf den T-Display S3 schaffen.
Mein erster Versuch wurde mit Thonny unternommen und endete mit einer Fehlermeldung:
"C:\Program Files (x86)\Thonny\python.exe" -u -m esptool --port COM23 erase_flash
esptool.py v3.1
Serial port COM23Connecting…
Detecting chip type… ESP32-S3(beta3)
Chip is ESP32-S3(beta3)Features: WiFi, BLE
Crystal is 40MHz
MAC: 00:00:00:00:00:00
Uploading stub…
Running stub…
Stub running…
Erasing flash (this may take a while)…
A fatal error occurred: Invalid head of packet (0x50)
Erase command returned with error code 2
Das hat mich also nicht weiter gebracht. Meine Suche im Internet nach error code 2
und Invalid head of packet
bliebt erfolglos.
Auf dieser (https://github.com/russhughes/st7789s3_mpy) habe ich dann Hinweise auf den Umgang mit esptools.py gefunden:
pip3 install esptool
esptool.py --port COM3 erase_flash
esptool.py --chip esp32s3 --port COM3 write_flash -z 0x1000 firmware.bin
Der Chiptype musste noch auf esp32s3
geändert werden. Die COM-Ports müssen natürlich die aktuellen sein.
C:\Users\kpsto\Lilygo>esptool.py --port COM23 erase_flash
esptool.py v4.5.1
Serial port COM23
Connecting…
Detecting chip type… ESP32-S3
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: 34:85:18:71:49:f8
Uploading stub…
Running stub…
Stub running…
Erasing flash (this may take a while)…
Chip erase completed successfully in 38.4s
Hard resetting via RTS pin…
Löschen hat schon mal geklappt.
C:\Users\kpsto>esptool.py --chip esp32s3 --port COM23 write_flash -z 0x1000 Lilygo\firmware.bin
esptool.py v4.5.1
Serial port COM23
Connecting…
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: 34:85:18:71:49:f8
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Flash will be erased from 0x00001000 to 0x0019afff…
Compressed 1678864 bytes to 1043763…
Wrote 1678864 bytes (1043763 compressed) at 0x00001000 in 15.4 seconds (effective 874.9 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting via RTS pin…
Schreiben offenbar auch. Mal sehen was Thonny jetzt sagt.
Thonny kann keine REPL-Verbindung herstellen. Nach einem Reset stellt Windows eine Verbindung her, diese wird aber gleich wieder abgebrochen und das Spiel beginnt von Neuem. Also wieder nichts. Ein erneutes Löschen funktionier, der Effekt bleibt aber erhalten.
C:\Users\kpsto>esptool.py --port COM23 erase_flash
Nun noch einen Versuch mit dem anfangs kompiliertem File:
C:\Users\kpsto>esptool.py --chip esp32s3 --port COM23 write_flash -z 0x1000 Lilygo\LilyGo-MicroPython_esp32s3_LILYGO_T-DisplayS3_MPY-d7919ea71_IDF-e8bdaf9198_B20230427_039ab10285.bin
esptool.py v4.5.1
Serial port COM23
Connecting…
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: 34:85:18:71:49:f8
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Flash will be erased from 0x00001000 to 0x00188fff…
Compressed 1601744 bytes to 1017788…
Wrote 1601744 bytes (1017788 compressed) at 0x00001000 in 14.7 seconds (effective 869.0 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting via RTS pin…
Auch hiernach wieder die nervige An-Ab-Prozedur in Windows.
Nun noch ein Versuch mit dem Originalen Micropython:
C:\Users\kpsto>esptool.py --chip esp32s3 --port COM23 write_flash -z 0 Lilygo\GENERIC_S3-20220618-v1.19.1.bin
esptool.py v4.5.1
Serial port COM23
Connecting…
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: 34:85:18:71:49:f8
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Flash will be erased from 0x00000000 to 0x00157fff…
Compressed 1406576 bytes to 928185…
Wrote 1406576 bytes (928185 compressed) at 0x00000000 in 12.4 seconds (effective 903.8 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting via RTS pin…
Nun ist Ruhe. Reset drücken. Der T-DiplayS3 hat nun einen neuen COM-Port (COM24). Und was macht Thonny?
MicroPython v1.19.1 on 2022-06-18; ESP32S3 module with ESP32S3
Type "help()" for more information.
3 + 5
8
Micropython funktioniert!!!
Ein Etappensieg
Im Programmiermode COM23 Im normalen Mode COM24!
Und es geht doch …
Das war der eine falsche Startadresse beim Hochladen -z 0x1000 ist falsch! Richtig ist -z 0 so wie es in der Mircropython.org Dokumentation angegeben ist!
MicroPython v1.19-dirty on 2023-04-27; LILYGO T-DisplayS3 with ESP32S3
Type "help()" for more information.
3 + 5
8
help('modules')
main gc uasyncio/stream urandom
_boot inisetup ubinascii ure
_onewire lcd ubluetooth uselect
_thread logo ucollections usocket
_uasyncio math ucryptolib ussl
_webrepl micropython uctypes ustruct
apa106 neopixel uerrno usys
btree network uhashlib utime
builtins ntptime uheapq utimeq
cmath onewire uio uwebsocket
dht uarray ujson uzlib
ds18x20 uasyncio/init umachine webrepl
esp uasyncio/core uos webrepl_setup
esp32 uasyncio/event upip websocket_helper
flashbdev uasyncio/funcs upip_utarfileframebuf uasyncio/lock uplatform
Plus any modules on the filesystem
Du musst eingeloggt sein um eine Antwort hinterlassen zu können.