[LVGL]GUI gui génère un code d'interface graphique porté sur esp32

Un : utilisation environnementale

  1. Carte de développement Nodemcu-esp32s
  2. Écran d'affichage 128*160 tft
  3. Logiciel de développement d'interface graphique
  4. environnement de développement de framework platformio + arduino

Cette greffe nécessite de configurer l'environnement LVGL à l'avance. Si vous ne savez pas comment le configurer, vous pouvez lire mon article précédent Configuration LVGL

GUI gui génère du code de portage

  1. J'ai simplement généré un fichier de projet GUI gui

insérez la description de l'image ici

  1. Le personnalisé et généré dans le dossier de code généré sont ce dont nous avons besoin.

insérez la description de l'image ici
Placez ces deux dossiers sous notre dossier de projet platformio et cette étape est terminée.

Modification de fichier pertinente

  1. Changez tout dans ces deux dossiers
    #include "lvgl/lvgl.h"
    pour
    #include "lvgl.h"

Remplacez #include "lv_font.h" dans les fichiers .c de ces deux dossiers
insérez la description de l'image ici
par "lvgl.h"
3. À ce stade, compilez et exécutez, une erreur peut être signalée et le fichier d'en-tête est introuvable. temps, nous devons utiliser C++ Ajouter le chemin correspondant au fichier json de la configuration de l'environnement.

insérez la description de l'image ici
Cliquez sur C/C++ Compiler les paramètres de configuration
insérez la description de l'image ici
pour effectuer des opérations similaires et ajoutez le dossier du fichier d'en-tête introuvable.

modification du fichier principal

Eh bien, après la configuration ci-dessus, nous y avons ajouté le contenu requis, mais comment l'appeler, nous le modifions dans le fichier principal d'un lvgl déjà configuré.

  1. ajouter un fichier d'en-tête
#include<gui_guider.h>
#include<custom.h>
#include<events_init.h>
  1. Ajouter la configuration d'initialisation de la page
    ps : doit être après l'initialisation de l'écran lvgl et tft

    setup_ui(&guider_ui);
    events_init(&guider_ui);
    custom_init(&guider_ui);

Notez que nous devons déclarer les éléments guider_ui devant, sinon une erreur sera signalée.
Ensuite, vous avez terminé, regardez les résultats.Veuillez ajouter une description de l'image

L'ensemble du code est le suivant

#include<Arduino.h>
#include <lvgl.h>
#include <TFT_eSPI.h>
#include<gui_guider.h>
#include<custom.h>
#include<events_init.h>
/*If you want to use the LVGL examples,
  make sure to install the lv_examples Arduino library
  and uncomment the following line.
#include <lv_examples.h>
*/

lv_ui guider_ui;

/*Change to your screen resolution*/
static const uint16_t screenWidth  = 128;
static const uint16_t screenHeight = 160;

static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * 10 ];

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

/* Display flushing */
void my_disp_flush( lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p )
{
    
    
    uint32_t w = ( area->x2 - area->x1 + 1 );
    uint32_t h = ( area->y2 - area->y1 + 1 );

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

    lv_disp_flush_ready( disp );
}

/*
void my_touchpad_read( lv_indev_drv_t * indev_driver, lv_indev_data_t * data )
{
    uint16_t touchX, touchY;

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

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


        data->point.x = touchX;
        data->point.y = touchY;

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

        Serial.print( "Data y " );
        Serial.println( touchY );
    }
}
*/
void setup()
{
    
    
    Serial.begin( 115200 ); /* prepare for possible serial debug */

    String LVGL_Arduino = "Hello LVGL! ";
    //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( 0 ); /* Landscape orientation, flipped */
    /*Set the touchscreen calibration data,
     the actual data for your display can be acquired using
     the Generic -> Touch_calibrate example from the TFT_eSPI library*/
   // uint16_t calData[5] = { 275, 3620, 264, 3532, 1 };
   // tft.setTouch( calData );

    lv_disp_draw_buf_init( &draw_buf, buf, NULL, screenWidth * 10 );

    /*Initialize the display*/
    static lv_disp_drv_t disp_drv;
    lv_disp_drv_init( &disp_drv );
    /*Change the following line to your display resolution*/
    disp_drv.hor_res = screenWidth;
    disp_drv.ver_res = screenHeight;
    disp_drv.flush_cb = my_disp_flush;
    disp_drv.draw_buf = &draw_buf;
    lv_disp_drv_register( &disp_drv );

    /*Initialize the (dummy) input device driver*/
    //static lv_indev_drv_t indev_drv;
    //lv_indev_drv_init( &indev_drv );
    //indev_drv.type = LV_INDEV_TYPE_POINTER;
    //indev_drv.read_cb = my_touchpad_read;
    //lv_indev_drv_register( &indev_drv );

#if 1

    setup_ui(&guider_ui);
    events_init(&guider_ui);
    custom_init(&guider_ui);
    /* Create simple label */
   /* lv_obj_t *label = lv_label_create( lv_scr_act() );
    lv_label_set_text( label, LVGL_Arduino.c_str() );
    lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 );*/
#else
    /* Try an example from the lv_examples Arduino library
       make sure to include it as written above.
    lv_example_btn_1();
   */

    // uncomment one of these demos
    lv_demo_widgets();            // OK
    // lv_demo_benchmark();          // OK
    // lv_demo_keypad_encoder();     // works, but I haven't an encoder
    // lv_demo_music();              // NOK
    // lv_demo_printer();
    // lv_demo_stress();             // seems to be OK
#endif
    Serial.println( "Setup done" );
}

void loop()
{
    
    
    lv_timer_handler(); /* let the GUI do its work */
    delay( 5 );
}

Guess you like

Origin blog.csdn.net/amimax/article/details/127332381
GUI