Forum: Mikrocontroller und Digitale Elektronik Esp32 TFT Display (GC9A01 SPI) animierte Roboteraugen.


von Edwin N. (quaeke)


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?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

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.

von J. S. (jojos)


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.

: Bearbeitet durch User
von Edwin N. (quaeke)


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.

von Edwin N. (quaeke)


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.

von J. S. (jojos)


Lesenswert?

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

von Edwin N. (quaeke)


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.

von J. S. (jojos)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

Edwin N. schrieb:
> Heißt das ich müsste jedes Frame
> code basiert "malen"? Klingt nach sehr viel Arbeit.

Ja, aber die CPU ist doch leistungsstark.

von J. S. (jojos)


Lesenswert?

und dieses Issue ist schon alt, da sieht man auch schöne Beispiele, 
scheint also doch zu gehen:
https://github.com/lvgl/lv_lib_rlottie/issues/3

von Stefan F. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
>> Heißt das ich müsste jedes Frame
>> code basiert "malen"? Klingt nach sehr viel Arbeit.

> Ja, aber die CPU ist doch leistungsstark.

Das packt die CPU locker, siehe: 
https://www.reddit.com/r/esp32/comments/myc3zr/some_real_time_3d_rendering_on_the_esp32/

von Edwin N. (quaeke)


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😊

von J. S. (jojos)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Edwin N. (quaeke)


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?

von J. S. (jojos)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.