Esp32 TFT Display (GC9A01 SPI) animierte Roboteraugen.

OP #7108460
Lesenswert?

Hallo alles zusammen,

ich stehe vor folgender Herausforderung:

Auf einem TFT Display mit SPI Interface (GC9A01) angesteuert durch ESP32 
sollen Roboteraugen wie beim Vector Robot bzw. Emo Robot animiert 
werden. Bisher habe ich das mit Frames versucht, was auch erfolgreich 
geklappt hat. Das Ergebnis war nicht so schön wie bei den oben genannten 
Robotern, aber immerhin ein Erfolg. Doch wenn es um mehrere Animationen 
geht, stößt der Esp32 natürlich an seine Grenzen, was den Speicher 
angeht. Nun frage ich mich, wie man so komplexe Animationen auf dem 
Display darstellen kann, sodass auch die Bildrate nicht darunter leidet. 
Ich dachte da an eine SD Karte, doch das wird die Bildfrequenz eher 
beeinträchtigen.

Wie würdet ihr das angehen?
#7108482
Lesenswert?

Sind die Augen schon in Hinter- und Vordergrund getrennt? Die Augen 
selber sind ja kleiner und da könnte schon das gleiche Image an 
verschiedenen Positionen mit verschiedenen Rotationen gemalt werden.

Edit: habe das Vector Video erst jetzt gesehen: das ist von der 
Rechenpower und Sensorik her ja ein fahrendes Smartphone.

Kennst du die lvgl Grafik Lib? Die bietet einiges was man dafür brauchen 
kann.
OP #7108591
Lesenswert?

Stefan ⛄ F. schrieb:
> Edwin N. schrieb:
>> Wie würdet ihr das angehen?
>
> Vektor Grafiken (z.B. svg) brauchen nur wenig Speicher, sind dafür
> Rechen-Intensiver. Du könntest die Bilder durch Code generieren, indem
> du sie aus gefüllten geometrischen Figuren zusammen setzt.

An sowas habe ich auch schon gedacht. Heißt das ich müsste jedes Frame 
code basiert "malen"? Klingt nach sehr viel Arbeit. Danke, ich werde das 
auf jeden Fall in Betracht ziehen.
OP #7108597
Lesenswert?

J. S. schrieb:
> Sind die Augen schon in Hinter- und Vordergrund getrennt? Die Augen
> selber sind ja kleiner und da könnte schon das gleiche Image an
> verschiedenen Positionen mit verschiedenen Rotationen gemalt werden.
>
> Edit: habe das Vector Video erst jetzt gesehen: das ist von der
> Rechenpower und Sensorik her ja ein fahrendes Smartphone.
>
> Kennst du die lvgl Grafik Lib? Die bietet einiges was man dafür brauchen
> kann.

Was ich bis jetzt gemacht habe ist, dass ich aus einem Gif Frames im 
jpeg Format generiegt und diese dann in C-Code Array unmewandelt habe. 
Da der Hintergrund schwarz ist, stehen da lauter 0x00. Also habe ich den 
Hintergrund vom Vordergrund nicht getrennt. Wüßte auch nicht wie das mit 
dieser Methode gehen sollte.

Danke für den Rat mit der lvgl bib. Werde ich mit näher angucken.
OP #7108667
Lesenswert?

J. S. schrieb:
> Lvgl hat jetzt auch Rlottie integriert:
> https://docs.lvgl.io/master/libs/rlottie.html
> Das lässt sich vermutlich auch ohne lvgl nutzen wenn man die lvgl
> Features nicht braucht. Aber da es für lvgl auch viele ESP Beispiele
> gibt ist es evtl doch einfacher mit.
>
> https://github.com/Samsung/rlottie

Wow! Das ist super. Danke für diese Info. Ich werde mich in die Doku 
einlesen.
OP #7108727
Lesenswert?

J. S. schrieb:
> ich habe auch noch etwas nach Rlottie gesucht, sieht gut aus, aber ganz
> einfach zu erstellen sieht das nicht aus.
> Deutlich einfacher ist es mit Images zu arbeiten:
> https://docs.lvgl.io/master/widgets/core/img.html

Das heißt in meinem Fall komme ich bei dieser Lösung ohne SD Karte nicht 
weiter!?

Gut. Jeder Ansatz ist grade wichtig und richtig finde ich. Danke😊
#7108735
Lesenswert?

Die Images kann man auch aus dem Flash holen, lvgl hat einen Generator 
um die Grafik in ein Bytearray zu packen.
Die ESP gibt es ja mit PSRAM und mehr oder weniger Flash, mehr ist für 
solche Anwendungen sicher immer gut... Aber SD über SDIO angebunden 
liefert auch schnell die Daten, in Verbindung mit dem PSRAM kann man da 
sicher auch schöne Animationen machen.

Auf dem runden Display läuft bei mir eine Uhr, habe ich aus einem lvgl 
code auf den F407 umgebaut. Die Zeiger sind Images die im Winkel rotiert 
gezeichnet werden. Das wird so von lvgl unterstützt und ist damit recht 
einfach.
Angehängte Dateien:
OP #7108770
Lesenswert?

J. S. schrieb:
> Die Images kann man auch aus dem Flash holen, lvgl hat einen Generator
> um die Grafik in ein Bytearray zu packen.
> Die ESP gibt es ja mit PSRAM und mehr oder weniger Flash, mehr ist für
> solche Anwendungen sicher immer gut... Aber SD über SDIO angebunden
> liefert auch schnell die Daten, in Verbindung mit dem PSRAM kann man da
> sicher auch schöne Animationen machen.
>
> Auf dem runden Display läuft bei mir eine Uhr, habe ich aus einem lvgl
> code auf den F407 umgebaut. Die Zeiger sind Images die im Winkel rotiert
> gezeichnet werden. Das wird so von lvgl unterstützt und ist damit recht
> einfach.

Verwendest du dafür Arduino IDE oder die IDE von Esspresif?
#7108820
Lesenswert?

Edwin N. schrieb:
> Verwendest du dafür Arduino IDE oder die IDE von Esspresif?

weder noch, das war für den STM32F407 mit Mbed und lvgl.

Die Images für die Uhr habe ich hierher
https://github.com/pr200sd/demo_lvgl/tree/master
und das ist ein ESP Projekt, sieht nach IDF aus. Der Code für die 
laufende Uhr war da nicht vollständig, aber man sieht wie die Zeiger 
gezeichnet werden sollten.
Mit ESP habe ich noch nicht soviel gemacht, aber schon Projekte mit 
PlatformIO oder IDF in VisualStudio Code kompiliert.

Für den Einstieg mit ESP32 und lvgl würde ich aber hier starten:
https://github.com/lvgl/lv_port_esp32
Und die lvgl Beispiele in der Doku mit dem micropython Simulator sind 
gut für Tests am Anfang. Da kann man die Controls und Positionierung mit 
testen, das API für C ist nahezu identisch und dann nur Schreibarbeit 
das umzubauen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren