当前位置: 首页 > news >正文

ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL基本配置和使用

ESP32 ESP-IDF TFT-LCD(ST7735 128x160) LVGL基本配置和使用


  • 📍项目地址:https://github.com/lvgl/lv_port_esp32
  • 参考文章:https://blog.csdn.net/chentuo2000/article/details/126668088
  • https://blog.csdn.net/p1279030826/article/details/120128339
  • 🔖ESP-IDF版本:v5.4
  • ESP32引脚功能图:
    在这里插入图片描述
  • 通过git命令将项目和所需的子模块全部下载到本地:(需要提前安装好git工具)
git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git

SPI接口和引脚说明

ESP32 提供了两个独立的SPI主机接口,HSPI 和 VSPI.

  • ESP32与ST7735 HSPI连接:
    在这里插入图片描述
  • ESP32与ST7735 VSPI连接图:
    在这里插入图片描述

📑配置和参数修改说明

  • 🌿在st7735s.h参数修改:
//st7735s.h
#define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 / 1 offset)
#define COLSTART            0       //默认参数:26
#define ROWSTART           0    // 默认参数:1
  • 🌿在SDK配置编辑器中(menuconfig)
  • 屏幕像素参数配置:
    在这里插入图片描述
    在这里插入图片描述
  • VSPI引脚:(可以参考前面的图进行配置)
    在这里插入图片描述

  • 字体选择:
    在这里插入图片描述

  • demo屏幕显示示例选择:在这里插入图片描述

  • 触摸组件控制功能没有开启

  • 在这里插入图片描述

🛠初次编译报错处理

  • 在没有使用触摸组件情况下,编译器会报找不到相关定义: error: 'CONFIG_LV_AXP192_PIN_SDA'

参考上面文章的做法,将启用相关宏定义 CONFIG_LV_M5STICKC_HANDLE_AXP192 的判断,来跳过对应的代码。

//st7735s.h
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192
#define AXP192_SDA   CONFIG_LV_AXP192_PIN_SDA
#define AXP192_SCL   CONFIG_LV_AXP192_PIN_SCL
#endif
//st7735s.c
static void i2c_master_init()
{
#ifdef CONFIG_LV_M5STICKC_HANDLE_AXP192i2c_config_t i2c_config = {.mode               = I2C_MODE_MASTER,.sda_io_num         = AXP192_SDA,.scl_io_num         = AXP192_SCL,.sda_pullup_en      = GPIO_PULLUP_ENABLE,.scl_pullup_en      = GPIO_PULLUP_ENABLE,.master.clk_speed   = 400000};i2c_param_config(I2C_NUM_0, &i2c_config);i2c_driver_install(I2C_NUM_0, I2C_MODE_MASTER, 0, 0, 0);
#endif
}
  • main.c中报错error: implicit declaration of function 'esp_timer_start_periodic' [-Wimplicit-function-declaration]添加对应的头文件
#include "esp_timer.h" // 添加这一行
  • 🌿编译找不到gpio_pad_select_gpio函数,使用函数替代:
esp_rom_gpio_pad_select_gpio
  • 编译成功并烧录后,如果配置的demo显示示例选择的是:Show demo widgets,屏幕可以显示一行:Hello World
    在这里插入图片描述
    所执行的是,main.c中的下面对应的函数:
static void create_demo_application(void)
{/* When using a monochrome display we only show "Hello World" centered on the* screen */
#if defined CONFIG_LV_TFT_DISPLAY_MONOCHROME || \defined CONFIG_LV_TFT_DISPLAY_CONTROLLER_ST7735S/* use a pretty small demo for monochrome displays *//* Get the current screen  */lv_obj_t * scr = lv_disp_get_scr_act(NULL);/*Create a Label on the currently active screen*/lv_obj_t * label1 =  lv_label_create(scr, NULL);/*Modify the Label's text*/lv_label_set_text(label1, "Hello\nworld");/* Align the Label to the center* NULL means align on parent (which is the screen now)* 0, 0 at the end means an x, y offset after alignment*/lv_obj_align(label1, NULL, LV_ALIGN_CENTER, 0, 0);
#else/* Otherwise we show the selected demo */#if defined CONFIG_LV_USE_DEMO_WIDGETSlv_demo_widgets();#elif defined CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODERlv_demo_keypad_encoder();#elif defined CONFIG_LV_USE_DEMO_BENCHMARKlv_demo_benchmark();#elif defined CONFIG_LV_USE_DEMO_STRESSlv_demo_stress();#else#error "No demo application selected."#endif
#endif
}

📗SPI默认参数配置查看

  • 项目默认配置的SPI时钟频率:40MHz,CS设备片选信号采用软件方式。(如果该SPI总线上只有一个屏幕显示设备,屏幕CS引脚可以直接接地),SPI模式0,显示缓冲区:(LV_HOR_RES_MAX * 40)。此信息可以通过复位ESP32设备,通过默认调试输出的串口查看到。
    在这里插入图片描述
  • 个人没有搞明白,添加的设备时钟频率能设定到40MHz.( SPI_TFT_CLOCK_SPEED_HZ (40*1000*1000))
在这里插入代码片

void disp_spi_add_device_with_speed(spi_host_device_t host, int clock_speed_hz)
{ESP_LOGI(TAG, "Adding SPI device");ESP_LOGI(TAG, "Clock speed: %dHz, mode: %d, CS pin: %d",clock_speed_hz, SPI_TFT_SPI_MODE, DISP_SPI_CS);//DISP_SPI_CSspi_device_interface_config_t devcfg={.clock_speed_hz = clock_speed_hz,.mode = SPI_TFT_SPI_MODE,.spics_io_num= DISP_SPI_CS,//DISP_SPI_CS=-1, // 片选线CS pin,软件控制填写引脚号,硬件.input_delay_ns=DISP_SPI_INPUT_DELAY_NS,.queue_size=SPI_TRANSACTION_POOL_SIZE,////   .cs_ena_pretrans = 2,//采用硬件CS需要添加的参数//	.cs_ena_posttrans = 2,//采用硬件CS需要添加的参数.pre_cb=NULL,.post_cb=NULL,//NULL
#if defined(DISP_SPI_HALF_DUPLEX).flags = SPI_DEVICE_NO_DUMMY | SPI_DEVICE_HALFDUPLEX,	/* dummy bits should be explicitly handled via DISP_SPI_VARIABLE_DUMMY as needed */
#else#if defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_FT81X).flags = 0,#elif defined (CONFIG_LV_TFT_DISPLAY_CONTROLLER_RA8875).flags = SPI_DEVICE_NO_DUMMY,#endif
#endif};disp_spi_add_device_config(host, &devcfg);/* create the transaction pool and fill it with ptrs to spi_transaction_ext_t to reuse */if(TransactionPool == NULL) {TransactionPool = xQueueCreate(SPI_TRANSACTION_POOL_SIZE, sizeof(spi_transaction_ext_t*));assert(TransactionPool != NULL);for (size_t i = 0; i < SPI_TRANSACTION_POOL_SIZE; i++){spi_transaction_ext_t* pTransaction = (spi_transaction_ext_t*)heap_caps_malloc(sizeof(spi_transaction_ext_t), MALLOC_CAP_DMA);assert(pTransaction != NULL);memset(pTransaction, 0, sizeof(spi_transaction_ext_t));xQueueSend(TransactionPool, &pTransaction, portMAX_DELAY);}}
}

http://www.mrgr.cn/news/91327.html

相关文章:

  • Blackbox.AI:高效智能的生产力工具新选择
  • Linux中线程创建,线程退出,线程接合
  • 微信小程序image组件mode属性详解
  • Unity Shader学习6:多盏平行光+点光源 ( 逐像素 ) 前向渲染 (Built-In)
  • AABB(Axis-Aligned Bounding Box)包围盒和OBB(Oriented Bounding Box)有向包围盒
  • 【医学影像AI】50个眼科影像数据集--1.分类任务
  • 钱从哪来系列:TW某独立游戏团队
  • 【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调
  • 毕业设计—基于Spring Boot的社区居民健康管理平台的设计与实现
  • 金融交易算法单介绍
  • vscode ESP32配置
  • 宝塔docker 安装oracle11G
  • 赶AI大潮:在VSCode中使用DeepSeek及近百种模型的极简方法
  • 【Linux AnolisOS】关于Docker的一系列问题。尤其是拉取东西时的网络问题,镜像源问题。
  • iOS事件传递和响应
  • WebGPU顶点插槽(Vertex Buffer Slot)使用指南
  • VScode内接入deepseek包过程(本地部署版包会)
  • c/c++蓝桥杯经典编程题100道(19)汉诺塔问题
  • Android车机DIY开发之软件篇(十七) Android模拟器移植Automotive
  • Blazor-父子组件传递任意参数