前言

基于ESP32 IDF框架移植的LVGL,IDF版本为4.3.1,LVGL版本为8.1.1。屏幕为中景园的1.47寸172x320分辨率的圆角IPS,驱动芯片为st7789v3。

B站视频效果:

https://www.bilibili.com/video/BV1VP4y137K1?spm_id_from=333.999.0.0https://www.bilibili.com/video/BV1VP4y137K1?spm_id_from=333.999.0.0

在lvgl_esp32_drivers文件夹下,有个lvgl_tft文件夹,其中找到st7789.c、st7789.h驱动文件。修改屏幕起始像素偏移量offsety1、offsety2,即加上34。

void st7789_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_map)
{uint8_t data[4] = {0};uint16_t offsetx1 = area->x1;uint16_t offsetx2 = area->x2;uint16_t offsety1 = area->y1;uint16_t offsety2 = area->y2;offsety1 += 34;offsety2 += 34;#if (CONFIG_LV_TFT_DISPLAY_OFFSETS)offsetx1 += CONFIG_LV_TFT_DISPLAY_X_OFFSET;offsetx2 += CONFIG_LV_TFT_DISPLAY_X_OFFSET;offsety1 += CONFIG_LV_TFT_DISPLAY_Y_OFFSET;offsety2 += CONFIG_LV_TFT_DISPLAY_Y_OFFSET;#elif (LV_HOR_RES_MAX == 240) && (LV_VER_RES_MAX == 240)
#if (CONFIG_LV_DISPLAY_ORIENTATION_PORTRAIT)offsetx1 += 80;offsetx2 += 80;
#elif (CONFIG_LV_DISPLAY_ORIENTATION_LANDSCAPE_INVERTED)offsety1 += 80;offsety2 += 80;
#endif
#endif/*Column addresses*/st7789_send_cmd(ST7789_CASET);data[0] = (offsetx1 >> 8) & 0xFF;data[1] = offsetx1 & 0xFF;data[2] = (offsetx2 >> 8) & 0xFF;data[3] = offsetx2 & 0xFF;st7789_send_data(data, 4);/*Page addresses*/st7789_send_cmd(ST7789_RASET);data[0] = (offsety1 >> 8) & 0xFF;data[1] = offsety1 & 0xFF;data[2] = (offsety2 >> 8) & 0xFF;data[3] = offsety2 & 0xFF;st7789_send_data(data, 4);/*Memory write*/st7789_send_cmd(ST7789_RAMWR);size_t size = (size_t)lv_area_get_width(area) * (size_t)lv_area_get_height(area);st7789_send_color((void*)color_map, size * 2);
}

同样在lvgl_esp32_drivers文件夹下找到lvgl_helpers.h文件,增加两个屏幕横向和纵向最大值宏定义。

#define LV_HOR_RES_MAX  320
#define LV_VER_RES_MAX  172

同时在下面的条件编译选项中修改一下DISP_BUF_SIZE。

#if defined (CONFIG_CUSTOM_DISPLAY_BUFFER_SIZE)
#define DISP_BUF_SIZE   CONFIG_CUSTOM_DISPLAY_BUFFER_BYTES
#else
#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789)
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * LV_VER_RES_MAX)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7796S
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_HX8357
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SH1107
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * LV_VER_RES_MAX)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9481
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9486
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9488
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9341
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_SSD1306
#if defined (CONFIG_LV_THEME_MONO)
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * (LV_VER_RES_MAX / 8))
#else
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * LV_VER_RES_MAX)
#endif
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X)
#define DISP_BUF_LINES  40
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * DISP_BUF_LINES)
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_IL3820)
#define DISP_BUF_SIZE (LV_VER_RES_MAX * IL3820_COLUMNS)
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_GC9A01)
#define DISP_BUF_SIZE  (LV_HOR_RES_MAX * 40)
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_JD79653A)
#define DISP_BUF_SIZE ((LV_VER_RES_MAX * LV_VER_RES_MAX) / 8) // 5KB
#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_UC8151D)
#define DISP_BUF_SIZE ((LV_VER_RES_MAX * LV_VER_RES_MAX) / 8) // 2888 bytes
#elif defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ILI9163C
#define DISP_BUF_SIZE (LV_HOR_RES_MAX * 40)
#else
#error "No display controller selected"
#endif
#endif

同样在lvgl_esp32_drivers文件夹下找到lvgl_spi_conf.h文件,修改一下SPI模式。

#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7789)
#define SPI_TFT_SPI_MODE    (3)
#else
#define SPI_TFT_SPI_MODE    (0)
#endif

接下来配置LVGL。

在主函数中添加lv_demo_music()例程。

#include <stdio.h>#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "freertos/semphr.h"
#include "esp_system.h"
#include "esp_freertos_hooks.h"
#include "lvgl.h"
#include "lvgl_helpers.h"#include "arc.h"
#include "bar.h"
#include "lv_examples/src/lv_demo_music/lv_demo_music.h"void lv_tick_task(void *arg);
static void guiTask(void *pvParameter);SemaphoreHandle_t xGuiSemaphore;static void guiTask(void *pvParameter)
{(void) pvParameter;xGuiSemaphore = xSemaphoreCreateMutex();lv_init();lvgl_driver_init();lv_color_t* buf1 = heap_caps_malloc(DISP_BUF_SIZE * sizeof(lv_color_t), MALLOC_CAP_DMA);assert(buf1 != NULL);lv_color_t *buf2 = heap_caps_malloc(DISP_BUF_SIZE * sizeof(lv_color_t), MALLOC_CAP_DMA);assert(buf2 != NULL);static lv_disp_draw_buf_t disp_buf;uint32_t size_in_px = DISP_BUF_SIZE;lv_disp_draw_buf_init(&disp_buf, buf1, buf2, size_in_px);static lv_disp_drv_t disp_drv;lv_disp_drv_init(&disp_drv);disp_drv.flush_cb = disp_driver_flush;disp_drv.hor_res = 320;disp_drv.ver_res = 172;disp_drv.draw_buf = &disp_buf;lv_disp_drv_register(&disp_drv);esp_register_freertos_tick_hook((void *)lv_tick_task);/* Create the demo application *///arc_demo_test();//bar_demo_test();lv_demo_music();while (1){/* Delay 1 tick (assumes FreeRTOS tick is 10ms */vTaskDelay(pdMS_TO_TICKS(10));/* Try to take the semaphore, call lvgl related function on success */if (pdTRUE == xSemaphoreTake(xGuiSemaphore, portMAX_DELAY)){lv_task_handler();xSemaphoreGive(xGuiSemaphore);}}/* A task should NEVER return */free(buf1);free(buf2);vTaskDelete(NULL);
}void app_main(void)
{xTaskCreatePinnedToCore(guiTask, "gui", 4096 * 4, NULL, 0, NULL, 1);
}void lv_tick_task(void *arg)
{(void)arg;lv_tick_inc(portTICK_PERIOD_MS);
}

详细的移植教程请移步B站专栏!

ESP32 IDF LVGL 1.47寸圆角屏幕测试相关推荐

  1. esp32系列(11):ESP32 IDF平台 mpu6050 DMP 驱动移植及测试上位机开发

    目录 1 DMP 官方库介绍 1.1 DMP与MPL(Motion Processing Libraries)功能 1.2 运行MPL的硬件要求 1.3 Motion Driver 6.12 的架构 ...

  2. [GUI] ESP32(idf)驱动3.5寸SPI-TFT屏移植LittleVGL

    一.展示成果 博客上传图片限制在5M内,视频转 GIF 帧率压缩太严重了,还得再次压缩才小于5M,效果完全失真了 小伙伴们有什么好的工具或方法解决吗 gif 图上应该看不出什么区别.但是ESP32 用 ...

  3. arduino tft 方向_ESP32在Arduino环境下玩转 LVGL,ESP32移植LVGL详细教程

    微信关注 "DLGG创客DIY"设为"星标",重磅干货,第一时间送达. ❝ 转载自慕容流年 https://me.csdn.net/qq_41868901 ❞ ...

  4. ESP32 IDF LVGL8.0 flash 外部字库显示 中文显示

    我从stm32一路学到esp32,发现这款芯片挺好玩的,主要是还是stm32太贵了,stm32主要是很多坑有人遇到了,并给出了解决方法,esp32这方面就少点,有时候找不到的,只能靠自己了. 本文使用 ...

  5. 物联网开发笔记(48)- 使用Micropython开发ESP32开发板之控制OLED ssd1306屏幕

    一.目的 这一节我们学习如何使用我们的ESP32开发板来控制OLED ssd1306屏幕,此处使用的是I2C协议,大家可自行百度学习一下I2C. 二.环境 ESP32 + OLED ssd1306屏幕 ...

  6. STM32(基于HAL库)驱动0.96寸OLED屏幕(四脚且中英文皆可显示)

    STM32驱动0.96寸OLED屏幕(四脚) 1 注意事项 2 如何利用STM32单片机驱动12864液晶屏 2.1*基本配置* 2.2 *0.96寸OLED端口含义* 2.3 *0.96寸OLED液 ...

  7. 使用micropython(ESP8266、ESP32)驱动SES 2.66寸墨水屏显示中文

    由于需要做一些低功耗的东西,所以最近在尝试玩墨水屏.出于成本考虑(没钱的另一种委婉说法)从咸鱼淘到2块便宜的二手SES 2.66寸三色墨水屏,并使用micropython将其驱动起来,并用字库的方法显 ...

  8. LVGL学习之初始化和屏幕旋转

    背景 手里有一块ESP32-S2-HMI-DevKit-1开发板,是乐鑫基于ESP32-S2模组开发的HMI人机交互方案开发板: 一边学习ESP32开发的过程中,也顺带学习一下LVGL图形库: 遇到的 ...

  9. 小米电视3 android,小米3代/小米电视今日发布!-小米3代,5寸,1080p,Tegra 4,骁龙800,小米电视,47寸, ——快科技(驱动之家旗下媒体)--科技改变未来...

    传了许久的小米3代将会在今天下午两点正式跟大家见面. 从目前曝光的情况来看,小米3代的外形十分方正,并且机身有多个色彩版本,外观设计与诺基亚Lumia系列风格很相似,其会有两个版本,而它们配备的都是5 ...

最新文章

  1. LTE PUCCH Format1
  2. PrestaShop 网站后台配置(三)
  3. 论文|记忆网络之Memory Networks
  4. 微服务架构(一):什么是微服务
  5. Maven-学习笔记04【基础-Maven生命周期和概念模型图】
  6. MySQL分区:range(范围)list(in)columns(多字段)hash(散列)key(非数值型的hash)复合(hash key)
  7. c++中union的使用,看高手们如何解释的
  8. Bellman-Ford算法和SPFA算法
  9. Java 总结equals()方法
  10. 【点阵液晶编程连载五】液晶驱动代码的移植
  11. C++11 多线程线程共享数据
  12. 【树形dp 题解】 洛谷P3174 毛毛虫
  13. 【学习】FaceForensics++: Learning to Detect Manipulated Facial Images
  14. Full CAN与Basic CAN主要区别
  15. php踩过的那些坑(2) strpos引发的血案
  16. python中,获取设备网卡接口(ethx, mgmt)
  17. 《Microduino实战》——1.1 什么是开源
  18. Centos安装python3并设为默认
  19. ViSual Studio美化插件设置背景图片
  20. 尼康单反AF自动对焦模式与AF区域对焦模式详解

热门文章

  1. 今天突然发现,微信小程序手机访问正常,PC端访问小程序图片无法加载?
  2. java获取视频详细信息并截图做封面的两种实现方式
  3. 团队管理的一篇文章:海底捞是如何做员工管理和激励的
  4. 9.1 电商B2C商铺新用户复购预测
  5. css3动画 会动的背景图片
  6. 新世纪大学英语(第二版)综合教程第一册 Unit 1 重点单词
  7. [4-JavaWeb] 16-Json-Ajax-i18n国际化
  8. Java并发六十问,图文详解
  9. 81款国学游戏开发教程第一篇(诗词拼图)
  10. car包recode函数多分类变量的重新编码