Obrócenie obrazu do pionu na równoległych wyświetlaczach RGB, które obsługują płytki z ESP32-S3 i ESP32-P4, zajmie w ESPHome mniej pamięci i czasu. W nocy z 16 na 17 października 2026 (o 1:39 czasu polskiego) clydebarrow scalił do gałęzi rozwojowej zgłoszenie zmian #20905 od Hasana Khalila (gongloo). Zmienia ono sposób, w jaki sterownik wyświetlacza mipi_rgb obraca obraz. Trafi do ESPHome 2026.11, a istniejących plików YAML nie trzeba poprawiać.

Gdzie znikała pamięć

Panele RGB podłączone do tych układów odświeżają obraz poziomo, wzdłuż taśmy, a ich kontrolery nie mają rejestru MADCTL, którym dałoby się sprzętowo zamienić osie. Dlatego mipi_rgb zgłaszał bibliotece LVGL, że nie umie obracać obrazu sprzętowo. Przy rotation: 90 albo 270 LVGL zakładał więc w PSRAM pośredni bufor do obracania (zwykle od 96 KB do 768 KB), przepisywał do niego piksele z zamianą osi, a potem kopiował je jeszcze raz do bufora ramki, z którego panel pobiera obraz. Przy każdym przerysowaniu dane trzy razy przechodziły przez magistralę PSRAM.

W ESPHome bufor rysowania LVGL domyślnie mieści całą klatkę. Na panelu 800x480 w formacie RGB565 to 768 KB, a obracanie dokładało kolejne 768 KB obok bufora rysowania i bufora ramki. Razem wychodziło około 2,3 MB PSRAM.

Jedno przejście zamiast trzech

Teraz sterownik pobiera z ESP-IDF adres bufora ramki, z którego korzysta DMA, i od razu zapisuje do niego obrócone piksele, w jednym przejściu, dla 0°, 90°, 180° i 270°. Przy 90° i 270° zapisuje dane po kolei, żeby linie pamięci podręcznej PSRAM zapełniały się jedna za drugą. Sterownik zgłasza też LVGL, że obraca obraz sprzętowo, więc biblioteka przekazuje mu obrót i w ogóle nie zakłada własnego bufora.

W domyślnej konfiguracji odzyskujesz 768 KB PSRAM. Autor zmierzył też wariant z mniejszym buforem (buffer_size: 12.5%) na płytce ESP32-S3 CrowPanel z 5-calowym panelem RGB 800x480 i pamięcią PSRAM z interfejsem ośmiobitowym:

  • najdłuższy czas rysowania spadł ze 193,4 ms do 125,1 ms, a średni z 24,3 ms do 17,8 ms;
  • zniknął bufor obracania o rozmiarze 96 KB, a wolnej pamięci PSRAM przybyło z 5575 KB do 5669 KB.

Konfiguracje, które rysują przez lambda: albo pages: wyświetlacza zamiast przez LVGL, zachowują dodatkowy bufor, w którym obraz powstaje przed wyświetleniem. Sterownik zakłada go przy pierwszym rysowaniu, więc obraz nadal nie migocze. Przy samym LVGL ten bufor w ogóle nie powstaje.

Zmiana uzupełnia wcześniejsze #20752 i #20757. Tamte poprawki sprawiły, że ESPHome przestał używać na tych panelach przekształceń osi, których one nie mają, ale obraz nadal obracał się programowo, wolniejszą drogą. Sterownik wyświetlaczy e-papierowych it8951 już wcześniej działał w ten sam bezpośredni sposób.

Kto to odczuje

Przede wszystkim ci, którzy używają panelu RGB w pionie razem z LVGL. Odzyskaną pamięć PSRAM można przeznaczyć na obrazy, czcionki albo bufory dźwięku na tej samej płytce, a na panelu autora najwolniejsze przerysowania przyspieszyły mniej więcej o jedną trzecią.