GUI auf Esp32-S3 Display laden

Hallo Zusammen

Kürzlich habe ich das Waveshare 7 Inch ESP32S3 Touch Display gekauft. Hier der Link zum Shop.
Mithilfe von Squarline Studio erstellte ich ein GUI.
Das GUI benötige ich für eine Wassertemperaturregelung anhand von 9 Lüftern und einem Radiator.
Auf dem GUI sollen die Variable Wassertemperatur und die Variable Aussentemperatur angezeigt werden. Diese Variablen möchte ich von einem Arduino Uno an das Display senden.

Anhand von 4 Input Felder soll man einstellen können, ab welcher Temperatur die einzelnen Gruppen sich dazuschalten können. Insgesamt sind es 4 Gruppen an den Output Pins 3-6. Diese Variablen möchte ich an den Arduino Uno senden.

Nun versuchte ich das ganze Wochenende mein GUI mithilfe der Arduino IDE auf das Display zu laden, leider ohne Erfolg.
Daher wollte ich euch um Unterstützung bitten. Ich weis nicht wie ich das GUI exportieren muss, damit ich es mithilfe der Arduino IDE auf das Display laden kann.
Zudem wollte ich fragen, wie ihr die Kommunikation zwischen den beiden Boards realisieren würdet. Oder ob ihr euch einen IO Expansion Modul kaufen würdet. Hier der Link zum Shop.

Ich freue mich über eure Anregungen und euren Support. :grinning_face:
Im Anhang findet Ihr das Squarline Studio Projekt.
Nachtrag:
Ich habe mich für Squarline Studio entschieden da diese Anwendung für Privatpersonen kostenlos ist.
GUI.zip (2,4 MB)

Und Du meinst, wir kaufen/installieren uns jetzt Squareline Studio, arbeiten uns da ein, um uns dann Dein Problem anzuschauen?

Gruß Tommy

Wieviel von den 2,4 MBi Daten/Programm (noch dazu gezippt) willst Du auf den Arduino UNO wohl noch R3 laden?

Grüße Uwe

In der Überschrift und #1 steht ESP32S3, aber auch da könnte es zu viel sein.
Das können wir aber nicht einschätzen, da wohl kaum einer von und mit diesem Tool arbeitet.
Evtl. hat ja das GUI-Tool ein Forum, was die Frage beantworten kann.

Gruß Tommy

Vielen Dank für deine Antwort.
Im ZIP Ordner befindet sich das gesamte Squarline Studio Projekt.
Mithilfe von Squarline kann man das GUI exportieren und danach mit der Arduino IDE auf das Display laden. Daran scheitere ich aber seit Tagen kläglich. Der Arduino Uno (ein R4 Wifi) dient nur zum steuern der Ausgänge und zum Auslesen der Temperatur. Das Display ist nur für das GUI und das ändern der Variablen gedacht.

Hi,

kennst Du diese Seite:

Gruß André

Dir zu helfen braucht man das Display und wer hat das??

Hallo, vor dem exportieren erst mal das setting wie im Bild aber mit deiner Displaygröße

Export UI musst du nehmen

Raus kommt wie im Bild...

Und damit arbeitest du in der Arduino IDE
(Beispiel von mir)

Vielen Dank für die Anleitung.
Was muss ich machen nachdem ich die UI Files Exportiert und im Arduino Sketch die Files Inkludiert habe?
Und muss der Arduino Sketch im gleichen Ordner wie die UI Files gespeichert werden?

Bist du dir sicher? Du hast sicherlich einen 30 Tage Testzeitraum.

Ohne Anmeldung Ja. Mit Anmeldung ist es unlimitiert. Hier der Link zu der Squarline Seite.

Ja, alles in einem Order.
Eine .ino brauchst du noch damit dein Display läuft und du alles programmieren kannst.

Ich gucke morgen mal nach was bei dir passen sollte.

Super Vielen Vielen Dank :blush:

Danke, könnte ggf. noch nützlich für mich sein.

Nein geht länger.

Gucke dir das mal an.

Hallo Zusammen
Mithilfe der Anleitungen von @finn912 habe ich einen Sketch erstellt.

#define USE_UI
#ifdef USE_UI

#include <lvgl.h>
#include "ui.h"
#include "ui_helpers.h"

#endif
#include <lvgl.h>
#include <TFT_eSPI.h>

#include "SPI.h"

static const uint16_t screenWidth  = 800;
static const uint16_t screenHeight = 480;

enum { SCREENBUFFER_SIZE_PIXELS = screenWidth * screenHeight / 10 };
static lv_color_t buf [SCREENBUFFER_SIZE_PIXELS];

TFT_eSPI tft = TFT_eSPI( screenWidth, screenHeight ); /* TFT instance */

#if LV_USE_LOG != 0
/* Serial debugging */
void my_print(const char * buf)
{
    Serial.printf(buf);
    Serial.flush();
}
#endif


void my_disp_flush (lv_display_t *disp, const lv_area_t *area, uint8_t *pixelmap)
{
    uint32_t w = ( area->x2 - area->x1 + 1 );
    uint32_t h = ( area->y2 - area->y1 + 1 );

    if (LV_COLOR_16_SWAP) {
        size_t len = lv_area_get_size( area );
        lv_draw_sw_rgb565_swap( pixelmap, len );
    }

    tft.startWrite();
    tft.setAddrWindow( area->x1, area->y1, w, h );
    tft.pushColors( (uint16_t*) pixelmap, w * h, true );
    tft.endWrite();

    lv_disp_flush_ready( disp );
}

void my_touchpad_read (lv_indev_t * indev_driver, lv_indev_data_t * data)
{
    uint16_t touchX = 0, touchY = 0;

    bool touched = false;//tft.getTouch( &touchX, &touchY, 600 );

    if (!touched)
    {
        data->state = LV_INDEV_STATE_REL;
    }
    else
    {
        data->state = LV_INDEV_STATE_PR;

        /*Set the coordinates*/
        data->point.x = touchX;
        data->point.y = touchY;

        Serial.print( "Data x " );
        Serial.println( touchX );

        Serial.print( "Data y " );
        Serial.println( touchY );
    }
}

/*Set tick routine needed for LVGL internal timings*/
static uint32_t my_tick_get_cb (void) { return millis(); }






void setup() {


    Serial.begin( 115200 ); /* prepare for possible serial debug */

    String LVGL_Arduino = "Hello Arduino! ";
    LVGL_Arduino += String('V') + lv_version_major() + "." + lv_version_minor() + "." + lv_version_patch();

    Serial.println( LVGL_Arduino );
    Serial.println( "I am LVGL_Arduino" );

    lv_init();

#if LV_USE_LOG != 0
    lv_log_register_print_cb( my_print ); /* register print function for debugging */
#endif

  tft.begin();          /* TFT init */
    tft.setRotation( 3 ); /* Landscape orientation, flipped */

    static lv_disp_t* disp;
    disp = lv_display_create( screenWidth, screenHeight );
    lv_display_set_buffers( disp, buf, NULL, SCREENBUFFER_SIZE_PIXELS * sizeof(lv_color_t), LV_DISPLAY_RENDER_MODE_PARTIAL );
    lv_display_set_flush_cb( disp, my_disp_flush );

    static lv_indev_t* indev;
    indev = lv_indev_create();
    lv_indev_set_type( indev, LV_INDEV_TYPE_POINTER );
    lv_indev_set_read_cb( indev, my_touchpad_read );

    lv_tick_set_cb( my_tick_get_cb );

    ui_init();

    Serial.println( "Setup done" );


}

void loop() {
  // put your main code here, to run repeatedly:

}

Beim Überprüfen erhalte ich immer die Fehlermeldungen:

sketch_mar25a/ui_Admin_Screen.c:27:(.text.ui_Admin_Screen_screen_init+0xa6): undefined reference to `ui_object_set_themeable_style_property`
sketch_mar25a/ui_Admin_Screen.c:28:(.text.ui_Admin_Screen_screen_init+0xb7): undefined reference to `ui_object_set_themeable_style_property`
sketch_mar25a/ui_Admin_Screen.c:41:(.text.ui_Admin_Screen_screen_init+0x131): undefined reference to `ui_object_set_themeable_style_property`
sketch_mar25a/ui_Admin_Screen.c:43:(.text.ui_Admin_Screen_screen_init+0x142): undefined reference to `ui_object_set_themeable_style_property`
sketch_mar25a/ui_Temperture_Setting_Screen.c:14:(.text.ui_Temperture_Setting_Screen_screen_init+0x2d): undefined reference to `ui_object_set_themeable_style_property`
sketch_mar25a/ui_Temperture_Setting_Screen.c:16:(.text.ui_Temperture_Setting_Screen_screen_init+0x3f): undefined reference to `ui_object_set_themeable_style_property`
sketch_mar25a/ui_Temperture_Setting_Screen.c:19:(.text.ui_Temperture_Setting_Screen_screen_init+0x56): undefined reference to `ui_object_set_themeable_style_property`
sketch_mar25a/ui_Temperture_Setting_Screen.c:19:(.text.ui_Temperture_Setting_Screen_screen_init+0x68): undefined reference to `ui_object_set_themeable_style_property`
sketch_mar25a/ui_Temperture_Setting_Screen.c:33:(.text.ui_Temperture_Setting_Screen_screen_init+0x109): undefined reference to `ui_object_set_themeable_style_property`
collect2.exe: error: ld returned 1 exit status
exit status 1
Compilation error: exit status 1

Wen ich die Funktion ui_init(); auskommentiere erhalte ich keine Fehlermeldung
Was muss ich im Code ändern das keine Fehler mehr auftreten?

Nichts, der Fehler tritt erst beim Linken auf.
Libraries richtig installieren.

Vielen Dank der Code funktioniert jetz. :grin: