ESP32 使用lvgl库让1.69显示屏运行

内容分享21小时前发布
0 0 0

一、Vscode库文件加载lvgl,版本选8.3

ESP32 使用lvgl库让1.69显示屏运行

二、根目录下加lv_conf.h

#ifndef LV_CONF_H
#define LV_CONF_H

#define LV_CONF_SKIP 0

/* Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888) */
#define LV_COLOR_DEPTH 16

/* Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB) */
#define LV_MEM_SIZE (32 * 1024U)

/* Use a custom tick source */
#define LV_TICK_CUSTOM 1
#if LV_TICK_CUSTOM
    #define LV_TICK_CUSTOM_INCLUDE "Arduino.h"
    #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis())
#endif

/* Log settings */
#define LV_USE_LOG 1
#if LV_USE_LOG
    #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
    #define LV_LOG_PRINTF 1
#endif

/* Font usage */
#define LV_FONT_MONTSERRAT_8  0
#define LV_FONT_MONTSERRAT_10 0
#define LV_FONT_MONTSERRAT_12 1
#define LV_FONT_MONTSERRAT_14 1
#define LV_FONT_MONTSERRAT_16 1
#define LV_FONT_MONTSERRAT_18 1
#define LV_FONT_MONTSERRAT_20 1
#define LV_FONT_MONTSERRAT_22 0
#define LV_FONT_MONTSERRAT_24 0

/* Enable the built-in themes */
#define LV_USE_THEME_DEFAULT 1

#endif

三、主程序

#include <Arduino.h>
#include <lvgl.h>
#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();

// 显示缓冲区
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf1[240 * 20];  // 增大缓冲区

// 屏幕尺寸 - 根据你的实际屏幕修改
#define TFT_HOR_RES 240
#define TFT_VER_RES 280

void create_test_ui();
void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);

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, w * h, true);
  
  tft.endWrite();
  lv_disp_flush_ready(disp);
}

void setup() {
  Serial.begin(115200);
  delay(1000);  // 给串口时间初始化
  Serial.println("LVGL初始化开始...");

  // 初始化TFT
  tft.init();
  tft.setRotation(2);  // 重大:尝试不同的旋转值
  tft.fillScreen(TFT_BLACK);
  
  // 开启背光
  pinMode(26, OUTPUT);
  digitalWrite(26, LOW);  // 根据你的屏幕调整

  Serial.println("TFT初始化完成");

  // 初始化LVGL
  lv_init();
  Serial.println("LVGL库初始化完成");

  // 初始化显示缓冲区
  lv_disp_draw_buf_init(&draw_buf, buf1, NULL, 240 * 20);
  Serial.println("显示缓冲区初始化完成");

  // 配置显示驱动
  static lv_disp_drv_t disp_drv;
  lv_disp_drv_init(&disp_drv);
  
  // 重大:设置正确的屏幕分辨率
  disp_drv.hor_res = TFT_HOR_RES;
  disp_drv.ver_res = TFT_VER_RES;
  disp_drv.flush_cb = my_disp_flush;
  disp_drv.draw_buf = &draw_buf;
  lv_disp_drv_register(&disp_drv);

  Serial.println("显示驱动注册完成");

  // 创建测试界面
  create_test_ui();
  Serial.println("界面创建完成");
}

void loop() {
  lv_timer_handler();
  delay(5);
}

void create_test_ui() {
  // 设置背景颜色
  lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x000000), LV_PART_MAIN);
  
  // 创建第一个标签 - 使用更明显的样式
  lv_obj_t *label1 = lv_label_create(lv_scr_act());
  lv_label_set_text(label1, "标签1: Hello LVGL!");
  lv_obj_set_style_text_color(label1, lv_color_hex(0xFF0000), 0);
  lv_obj_set_style_text_font(label1, &lv_font_montserrat_20, 0);
  lv_obj_set_style_bg_color(label1, lv_color_hex(0x333333), 0);
  lv_obj_set_style_bg_opa(label1, LV_OPA_COVER, 0);
  lv_obj_set_style_pad_all(label1, 10, 0);
  lv_obj_align(label1, LV_ALIGN_TOP_MID, 0, 20);

  // 创建第二个标签
  lv_obj_t *label2 = lv_label_create(lv_scr_act());
  lv_label_set_text(label2, "标签2: ESP32 + TFT");
  lv_obj_set_style_text_color(label2, lv_color_hex(0x00FF00), 0);
  lv_obj_set_style_text_font(label2, &lv_font_montserrat_16, 0);
  lv_obj_set_style_bg_color(label2, lv_color_hex(0x444444), 0);
  lv_obj_set_style_bg_opa(label2, LV_OPA_COVER, 0);
  lv_obj_set_style_pad_all(label2, 10, 0);
  lv_obj_align(label2, LV_ALIGN_CENTER, 0, 0);

  // 创建第三个标签显示状态
  lv_obj_t *label3 = lv_label_create(lv_scr_act());
  lv_label_set_text(label3, "running");
  lv_obj_set_style_text_color(label3, lv_color_hex(0x0000FF), 0);
  lv_obj_set_style_text_font(label3, &lv_font_montserrat_14, 0);
  lv_obj_align(label3, LV_ALIGN_BOTTOM_MID, 0, -20);

  Serial.println("三个标签创建完成");
}

四、实际效果

ESP32 使用lvgl库让1.69显示屏运行

© 版权声明

相关文章

暂无评论

none
暂无评论...