ESP32-S3 RLCD Display ansteuern: So klappt die Programmierung mit Arduino IDE (Teil 2)
Im ersten Teil habe ich mir das Board im Detail angeschaut und einen ersten Eindruck gesammelt. Jetzt wird es praktisch.
In diesem Beitrag zeige ich dir, wie du das ESP32-S3 RLCD Display von Waveshare ganz bequem mit der Arduino IDE programmierst und erste Inhalte auf dem Display darstellst.
Dank der UnterstĂŒtzung von LVGL (Light and Versatile Graphics Library) ist der Einstieg ĂŒberraschend einfach. Wenn du bereits Erfahrungen mit dem bekannten CYD (Cheap Yellow Display) gesammelt hast, wirst du dich hier sehr schnell zurechtfinden.
đ Ziel ist es, nicht nur das Demo-Programm zu nutzen, sondern eigene Inhalte wie Text, Werte oder spĂ€ter sogar kleine Dashboards auf dem RLCD darzustellen.
https://youtu.be/-ohhYlIscEo
Transparenzhinweis: Das GerĂ€t wurde mir von Waveshare fĂŒr dieses Review kostenfrei zur VerfĂŒgung gestellt. Ich freue mich immer, wenn ich in dieser Form unterstĂŒtzt werde und neue Hardware frĂŒhzeitig testen kann.
SelbstverstĂ€ndlich hat dies keinen Einfluss auf meine Bewertung â ich teile wie gewohnt meine ehrliche Meinung und praktische Erfahrungen mit dem Board.
Arduino IDE fĂŒr das ESP32-S3 RLCD einrichten
Damit wir das Display programmieren können, mĂŒssen wir zunĂ€chst die Arduino IDE vorbereiten.
1. ESP32 Boardpaket installieren - Arduino IDE öffnen - Datei â Einstellungen - folgende URL hinzufĂŒgen: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json 2. Board installieren - Werkzeuge â Board â Boardverwalter - nach ESP32 suchen - âesp32 by Espressif Systemsâ installieren
Arduino IDE - einrichten der Boardtreiber fĂŒr ESP32 von Espressif - Step1
Arduino IDE - einrichten der Boardtreiber fĂŒr ESP32 von Espressif - Step2
Arduino IDE - einrichten der Boardtreiber fĂŒr ESP32 von Espressif - Step3
Arduino IDE - einrichten der Boardtreiber fĂŒr ESP32 von Espressif - Step4 3. Richtiges Board auswĂ€hlen
Auf dem Board ist ein ESP32-S3 verbaut, somit wÀhlen wir unter Werkzeuge > Boards > esp32 das Modul ESP32S3 Dev Module aus.
Arduino IDE - Auswahl des ESP32-S3
Arduino IDE - Konfiguration des ESP32-S3
FĂŒr serielle Ausgaben muss zusĂ€tzlich noch die Auswahl bei der Konfiguration "USB CDC On Boot" auf Enabled gesetzt werden.
4. Boardkonfiguration
Damit das Board korrekt angesteuert werden kann, mĂŒssen zunĂ€chst die richtigen Einstellungen in der Boardkonfiguration vorgenommen werden.
- USB CDC On Boot > Enabled - Flash Mode > "QIO 80 MHz" - Flash Size > "16MB (128Mb)" - Partition Scheme > "16M Falsh (3MB APP/9.9 FATS)" - PSRAM >"OPI PSRAM"
Wird diese Konfiguration nicht korrekt gesetzt, kommt es zu einem Assertion Error. Im seriellen Monitor der Arduino IDE erscheint dann folgende Fehlermeldung:
E (285) esp_core_dump_flash: Core dump flash config is corrupted! CRC=0x7bd5c66f instead of 0x0 E (294) esp_core_dump_elf: Elf write init failed! E (298) esp_core_dump_common: Core dump write failed with error=-1 Rebooting... ESP-ROM:esp32s3-20210327 Build:Mar 27 2021 rst:0xc (RTC_SW_CPU_RST),boot:0x8 (SPI_FAST_FLASH_BOOT) Saved PC:0x4037f489 SPIWP:0xee mode:DIO, clock div:1 load:0x3fce2820,len:0x10cc load:0x403c8700,len:0xc2c load:0x403cb700,len:0x30c0 entry 0x403c88b8 assert failed: DisplayPort::DisplayPort(int, int, int, int, int, int, int, spi_host_device_t) C:UsersstefaDownloadsESP32-S3-RLCD-4.2-mainESP32-S3-RLCD-4.2-mainïżœ2_ExampleArduinoïżœ9_LVGL_V9_Test
Erstes Beispiel: âHello World!â auf dem RLCD anzeigen
Nachdem die Arduino IDE korrekt eingerichtet ist und das Board erkannt wird, starten wir mit einem einfachen ersten Beispiel.
đ Ziel: Eine erste Ausgabe auf dem Display â unser klassisches âHello World!â.
Als Grundlage nutze ich das von Waveshare bereitgestellte Beispielprojekt: đ 09_LVGL_V9_Test
Dieses findest du im offiziellen Repository unter: ESP32-S3-RLCD-4.2/02_Example/Arduino/09_LVGL_V9_Test/
#include "display_bsp.h" #include "src/app_bsp/lvgl_bsp.h" #include "src/ui_src/generated/gui_guider.h" static lv_ui init_ui; DisplayPort RlcdPort(12, 11, 5, 40, 41, 400, 300); static void Lvgl_FlushCallback(lv_display_t *drv, const lv_area_t *area, uint8_t *color_map) { uint16_t *buffer = (uint16_t *)color_map; for (int y = area->y1; y y2; y++) { for (int x = area->x1; x x2; x++) { uint8_t color = (*buffer < 0x7fff) ? ColorBlack : ColorWhite; RlcdPort.RLCD_SetPixel(x, y, color); buffer++; } } RlcdPort.RLCD_Display(); lv_disp_flush_ready(drv); } void setup() { RlcdPort.RLCD_Init(); Lvgl_PortInit(400, 300, Lvgl_FlushCallback); if (Lvgl_lock(-1)) { create_hello_world_pyramid(); Lvgl_unlock(); } } void loop() { vTaskDelay(pdMS_TO_TICKS(1000)); } void create_hello_world_pyramid() { lv_obj_t *screen = lv_scr_act(); lv_obj_set_style_bg_color(screen, lv_color_white(), LV_PART_MAIN); lv_obj_set_style_bg_opa(screen, LV_OPA_COVER, LV_PART_MAIN); const lv_font_t *fonts = { &lv_font_montserrat_48, &lv_font_montserrat_40, &lv_font_montserrat_32, &lv_font_montserrat_24, &lv_font_montserrat_18, &lv_font_montserrat_12, }; int yPositions = { 25, 85, 135, 180, 220, 250 }; for (int i = 0; i < 6; i++) { lv_obj_t *label = lv_label_create(screen); lv_label_set_text(label, "Hello World!"); lv_obj_set_style_text_font(label, fonts, LV_PART_MAIN); lv_obj_set_style_text_color(label, lv_color_black(), LV_PART_MAIN); lv_obj_align(label, LV_ALIGN_TOP_MID, 0, yPositions); } } ZusĂ€tzliche SchriftgröĂen in LVGL aktivieren
FĂŒr unser Beispiel möchten wir verschiedene SchriftgröĂen verwenden. StandardmĂ€Ăig sind in LVGL jedoch nicht alle Fonts aktiviert, um Speicher zu sparen.
đ Deshalb mĂŒssen wir einige SchriftgröĂen manuell freischalten.
Datei anpassen
Ăffne die Datei:
C:UsersDocumentsArduinolibrarieslvgllv_conf.h
đ Scrolle dort zum Abschnitt âFONT USAGEâ.
SchriftgröĂen aktivieren
Setze die folgenden EintrÀge von 0 auf 1:
#define LV_FONT_MONTSERRAT_12 1 #define LV_FONT_MONTSERRAT_14 1 #define LV_FONT_MONTSERRAT_16 1 #define LV_FONT_MONTSERRAT_18 1 #define LV_FONT_MONTSERRAT_24 1 #define LV_FONT_MONTSERRAT_32 1 #define LV_FONT_MONTSERRAT_40 1 #define LV_FONT_MONTSERRAT_48 1
đ Dadurch werden die jeweiligen SchriftgröĂen im Projekt verfĂŒgbar.
Hintergrund
LVGL ist so aufgebaut, dass nur die tatsĂ€chlich benötigten Ressourcen eingebunden werden. đ Das spart Speicher â ist aber am Anfang etwas ungewohnt.
Fazit: Einstieg geschafft â jetzt wird es spannend
Mit der richtigen Konfiguration in der Arduino IDE und der Einrichtung von LVGL ist der Einstieg in das Waveshare ESP32-S3 RLCD Display deutlich einfacher, als man zunĂ€chst vermuten wĂŒrde.
đ Bereits mit wenigen Zeilen Code lĂ€sst sich eine eigene Ausgabe auf dem Display realisieren.
Besonders positiv fÀllt dabei auf:
- LVGL ermöglicht eine sehr flexible Darstellung von Inhalten - das RLCD-Display reagiert schnell und ohne störendes Flackern - die Kombination aus ESP32-S3 und Display bietet eine starke Basis fĂŒr eigene Projekte
NatĂŒrlich gibt es auch ein paar Stolpersteine â insbesondere bei der Boardkonfiguration und den benötigten Fonts. Hat man diese HĂŒrden jedoch einmal genommen, steht eigenen Projekten nichts mehr im Weg.
đ Genau hier wird es jetzt interessant.
Ausblick: Vom âHello Worldâ zum echten Projekt
Im nĂ€chsten Schritt reicht ein statischer Text natĂŒrlich nicht mehr aus.
đ Deshalb zeige ich dir im nĂ€chsten Beitrag ein konkretes Praxisprojekt:
- Daten aus einer öffentlichen API abrufen - Darstellung als Newsticker - Kombination aus Text und Bildern mit LVGL - Dynamische Aktualisierung der Inhalte
đ Ziel: Ein echtes, praxisnahes Dashboard auf dem RLCD-Display.
Quellen & weiterfĂŒhrende Links
FĂŒr diesen Beitrag habe ich auf die offiziellen Dokumentationen und Beispiele von Waveshare zurĂŒckgegriffen. Wenn du tiefer in das Thema einsteigen möchtest, findest du hier die wichtigsten Ressourcen:
- Offizielle Dokumentation & Ressourcen https://docs.waveshare.com/ESP32-S3-RLCD-4.2/Resources-And-Documents - Produktseite mit technischen Details https://www.waveshare.com/esp32-s3-rlcd-4.2.htm - Weitere Beispielprojekte & Tutorials (Arduino) https://docs.waveshare.com/ESP32-Arduino-Tutorials/Fun-Project - GitHub Repository mit allen Beispielen https://github.com/waveshareteam/ESP32-S3-RLCD-4.2/tree/main
















