Importante: En versiones más recientes de PlatformIO, la mayoría de las placas ESP32 fallarán con este ejemplo a menos que crees un archivo de configuración lv_conf.h personalizado especificando usar memoria interna en lugar de PSRAM. Consulta Cómo solucionar el crash / reinicio de ESP32 LVGL en lv_tlsf_create() / lv_mem_init() para instrucciones de cómo solucionarlo.
En nuestro ejemplo anterior Ejemplo mínimo de gráfico LVGL para ST7735R con PlatformIO
Consulta Ejemplo mínimo de pantalla TFT para ESP32 con PlatformIO usando Adafruit ST7735 para la configuración de hardware recomendada.
Usando un ESP32 con una pantalla ST7735R de 128x160px, este código alcanza una tasa de actualización de ~3Hz. Ten en cuenta que este ejemplo puede modificarse fácilmente para funcionar con otros controladores LCD o pantallas.
#include <Arduino.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <Adafruit_LvGL_Glue.h>
#include <lvgl.h>
#include <string>
constexpr int Pin_LCD_CS = 27;
constexpr int Pin_LCD_DC = 23;
constexpr int Pin_LCD_RST = 22;
constexpr int Pin_LCD_SCLK = 14;
constexpr int Pin_LCD_MISO = 12;
constexpr int Pin_LCD_MOSI = 13;
Adafruit_ST7735 lcd(Pin_LCD_CS, Pin_LCD_DC, Pin_LCD_MOSI, Pin_LCD_SCLK,
Pin_LCD_RST);
Adafruit_LvGL_Glue glue;
lv_obj_t* chart;
lv_chart_series_t * ser1;
void lvgl_chart_setup() {
/*Create a chart*/
chart = lv_chart_create(lv_scr_act());
lv_obj_set_size(chart, 160, 100);
lv_obj_align(chart, LV_ALIGN_BOTTOM_MID, 0, -3);
lv_chart_set_type(chart, LV_CHART_TYPE_LINE); /*Show lines and points too*/
/*Add two data series*/
ser1 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
/*Establecer los siguientes puntos en 'ser1'*/
lv_chart_set_next_value(chart, ser1, 10);
lv_chart_set_next_value(chart, ser1, 10);
lv_chart_set_next_value(chart, ser1, 10);
lv_chart_set_next_value(chart, ser1, 10);
lv_chart_set_next_value(chart, ser1, 10);
lv_chart_set_next_value(chart, ser1, 10);
lv_chart_set_next_value(chart, ser1, 10);
lv_chart_set_next_value(chart, ser1, 30);
lv_chart_set_next_value(chart, ser1, 70);
lv_chart_set_next_value(chart, ser1, 90);
lv_chart_refresh(chart);
}
void lvgl_setup(void) {
// Crear etiqueta simple centrada en la pantalla
lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Temperature");
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 2);
lvgl_chart_setup();
}
void setup() {
Serial.begin(115200);
lcd.initR(INITR_BLACKTAB); // Inicializar chip ST7735S, pestaña negra
lcd.setRotation(1);
LvGLStatus status = glue.begin(&lcd);
if(status != LVGL_OK) {
Serial.printf("Glue error %d\r\n", (int)status);
ESP.restart();
}
lvgl_setup(); // Llamar a la función de construcción de UI de arriba
}
void UpdateChart() {
// Rellenar datos del gráfico con datos de onda senoidal
float sineOffset = millis() / 1000.0;
int16_t maxValue = 50;
size_t count = lv_chart_get_point_count(chart);
for (size_t i = 0; i < count; i++) {
lv_chart_set_value_by_id(chart, ser1, i, maxValue * (1 + sin((sineOffset + i) * 0.7)));
}
lv_chart_refresh(chart);
}
void loop() {
// Actualizar pantalla
UpdateChart();
lv_task_handler();
delay(5);
}[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
adafruit/Adafruit GFX Library@^1.11.5
adafruit/Adafruit ST7735 and ST7789 Library@^1.10.0
adafruit/Adafruit LittlevGL Glue Library@^2.1.4
adafruit/SdFat - Adafruit Fork@^2.2.1
lvgl/lvgl@^8.3.7