#include #include #include #include #ifndef SCREEN_WIDTH #define SCREEN_WIDTH 320 #endif #ifndef SCREEN_HEIGHT #define SCREEN_HEIGHT 240 #endif #define DRAW_BUF_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT / 10 * (LV_COLOR_DEPTH / 8)) uint32_t draw_buf[DRAW_BUF_SIZE / 4]; uint32_t get_time(); void handle_lvgl_logs(lv_log_level_t level, const char *buf); void handle_update_values(lv_timer_t *timer); String label_text; lv_obj_t *label; lv_timer_t *update_values_timer; namespace Display { void init() { lv_init(); lv_log_register_print_cb(handle_lvgl_logs); lv_tick_set_cb(get_time); update_values_timer = lv_timer_create(handle_update_values, 5, NULL); lv_timer_ready(update_values_timer); lv_display_t *display; display = lv_tft_espi_create(SCREEN_HEIGHT, SCREEN_WIDTH, draw_buf, sizeof(draw_buf)); lv_display_set_rotation(display, LV_DISPLAY_ROTATION_90); label = lv_label_create(lv_screen_active()); lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); } void update() { lv_timer_handler(); } void set_label_text(String text) { label_text = text; } } void handle_lvgl_logs(lv_log_level_t level, const char *buf) { Serial.printf("LVGL: %s\r\n", buf); } uint32_t get_time() { return esp_timer_get_time() / 1000; } void handle_update_values(lv_timer_t *timer) { if (label != NULL && lv_label_get_text(label) != label_text.c_str()) { lv_label_set_text(label, label_text.c_str()); } }