Мінімальний приклад LVGL графіка для ST7735R для PlatformIO

Важливо: У новіших версіях PlatformIO більшість плат ESP32 буде аварійно завершувати роботу з цим прикладом, якщо ви не створите власний файл конфігурації lv_conf.h, у якому вказано використання внутрішньої пам’яті замість PSRAM. Дивіться Як виправити збій / перезавантаження ESP32 LVGL у lv_tlsf_create() / lv_mem_init() для інструкцій щодо вирішення цієї проблеми.

Цей приклад базується на нашій попередній публікації Мінімальний приклад LVGL для дисплея Adafruit ST7735R для PlatformIO

Дивіться Мінімальний приклад TFT-дисплея ESP32 PlatformIO за допомогою Adafruit ST7735 для рекомендованої конфігурації обладнання.

Зверніть увагу, що цей приклад можна легко модифікувати для роботи з іншими LCD-контролерами або дисплеями.

TFT-дисплей ST7735R показує LVGL графік з червоною та зеленою серіями даних та міткою Температура

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