Важливо: У новіших версіях PlatformIO більшість плат ESP32 буде аварійно завершувати роботу з цим прикладом, якщо ви не створите власний файл конфігурації lv_conf.h, у якому вказано використання внутрішньої пам’яті замість PSRAM. Дивіться Як виправити збій / перезавантаження ESP32 LVGL у lv_tlsf_create() / lv_mem_init() для інструкцій щодо вирішення цієї проблеми.
Цей приклад базується на нашій попередній публікації Мінімальний приклад LVGL для дисплея Adafruit ST7735R для PlatformIO
Дивіться Мінімальний приклад TFT-дисплея ESP32 PlatformIO за допомогою Adafruit ST7735 для рекомендованої конфігурації обладнання.
Зверніть увагу, що цей приклад можна легко модифікувати для роботи з іншими LCD-контролерами або дисплеями.
st7735r_lvgl_chart_example.cpp
#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;
void lvgl_chart_setup() {
/*Створити графік*/
lv_obj_t * 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); /*Показувати також лінії та точки*/
/*Додати два ряди даних*/
lv_chart_series_t * ser1 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
lv_chart_series_t * ser2 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_GREEN), LV_CHART_AXIS_SECONDARY_Y);
/*Встановити наступні точки на '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);
/*Безпосередньо встановити точки на 'ser2'*/
ser2->y_points[0] = 90;
ser2->y_points[1] = 70;
ser2->y_points[2] = 65;
ser2->y_points[3] = 65;
ser2->y_points[4] = 65;
ser2->y_points[5] = 65;
ser2->y_points[6] = 65;
ser2->y_points[7] = 65;
ser2->y_points[8] = 65;
ser2->y_points[9] = 65;
lv_chart_refresh(chart); /*Обов'язково після прямого встановлення*/
}
void lvgl_setup(void) {
// Створити простий мітка, відцентрований на екрані
lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Температура");
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 2);
lvgl_chart_setup();
}
void setup() {
lcd.initR(INITR_BLACKTAB); // Ініціалізувати чіп ST7735S, чорна вкладка
lcd.setRotation(1);
LvGLStatus status = glue.begin(&lcd);
if(status != LVGL_OK) {
Serial.printf("Помилка Glue %d\r\n", (int)status);
ESP.restart();
}
lvgl_setup(); // Викликати функцію побудови інтерфейсу вище
}
void loop() {
lv_task_handler(); // Періодично викликати обробник завдань LittleVGL
delay(5);
}platformio.ini
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
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
Дивіться схожі статті за категоріями:
Arduino LVGL PlatformIO
Якщо ця стаття допомогла вам, будь ласка, подумайте про те, щоб купити мені каву або зробити пожертву через PayPal на підтримку досліджень та публікації нових статей на TechOverflow
