一、环境介绍
操作系统:linux
esp-idf 版本5.1.4
二、开始配置
1、找到idf安装目录下的sample_project
将这个文件夹复制到自己的工程目录中,如下,并粘贴一份副本。然后通过vscode打开
2、添加组件
主要使用到了三个组件:lvgl 、esp_lcd_touch_ft5x06、esp_lcd_touch (esp_lcd_touch_ft5x06依赖于esp_lcd_touch )
打开idf组件管理工具进行搜索,将以下两句放入终端执行
idf.py add-dependency "lvgl/lvgl^8.3.11"
idf.py add-dependency "espressif/esp_lcd_touch_ft5x06^1.0.6"
选择好芯片串口,点击menuconfig后会下载组件
将managed_components重命名为components(一会要进行修改),然后将idf_component.yml
中内容注释。结果如下
3、找到下图目录下的两个文件,复制到工程main文件夹下
将原有工程main.c删除,然后将spi_lcd......main.c重命名main.c
将main文件夹下的cmakelist中添加lvgl_demo_ui.c,如下
4、修改lvgl配置文件
找到该文件
复制该文件粘贴至如下位置,重命名为lv_conf.h
(1)启用该文件,将0该为1。如下图
(2)修改LV_COLOR_16_SWAP 将0改为1
5、修改main.c文件
添加触摸头文件
#include "esp_lcd_touch_ft5x06.h"
修改屏幕相关引脚
#define EXAMPLE_LCD_PIXEL_CLOCK_HZ (20 * 1000 * 1000)
#define EXAMPLE_LCD_BK_LIGHT_ON_LEVEL 0
#define EXAMPLE_LCD_BK_LIGHT_OFF_LEVEL !EXAMPLE_LCD_BK_LIGHT_ON_LEVEL
#define EXAMPLE_PIN_NUM_SCLK 3
#define EXAMPLE_PIN_NUM_MOSI 5
#define EXAMPLE_PIN_NUM_MISO -1
#define EXAMPLE_PIN_NUM_LCD_DC 6
#define EXAMPLE_PIN_NUM_LCD_RST -1
#define EXAMPLE_PIN_NUM_LCD_CS 4
#define EXAMPLE_PIN_NUM_BK_LIGHT 2
#define EXAMPLE_PIN_NUM_TOUCH_CS -1
#define EXAMPLE_LCD_H_RES 240
#define EXAMPLE_LCD_V_RES 320
打开触摸宏定义,添加下面这句
#define CONFIG_EXAMPLE_LCD_TOUCH_ENABLED 1
修改按键回调函数内容
初始化i2c
cmakelist中添加文件
myi2c.c
#include "myi2c.h"
#include "driver/i2c.h"
/**
* @brief i2c master initialization
*/
esp_err_t i2c_master_init(void)
{
int i2c_master_port = I2C_MASTER_NUM;
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = I2C_MASTER_SDA_IO,
.scl_io_num = I2C_MASTER_SCL_IO,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = I2C_MASTER_FREQ_HZ,
};
i2c_param_config(i2c_master_port, &conf);
return i2c_driver_install(i2c_master_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
}
myi2c.h
#pragma once
#include "esp_err.h"
#define I2C_MASTER_SCL_IO GPIO_NUM_1 /*!< GPIO number used for I2C master clock */
#define I2C_MASTER_SDA_IO GPIO_NUM_0 /*!< GPIO number used for I2C master data */
#define I2C_MASTER_NUM 0 /*!< I2C 0,c3只有一路 */
#define I2C_MASTER_FREQ_HZ 400000 /*!< I2C 通信速率*/
#define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
#define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
#define I2C_MASTER_TIMEOUT_MS 1000 /*!< I2C 最大超时时间*/
esp_err_t i2c_master_init(void);
更改LCD_RGB_ELEMENT_ORDER_BGR为LCD_RGB_ELEMENT_ORDER_RGB
修改屏幕相关参数
ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(io_handle, &panel_config, &panel_handle));
ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle));
ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle));
ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel_handle, true));
ESP_ERROR_CHECK(esp_lcd_panel_mirror(panel_handle, false, false));
ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_handle, true));
修改触摸相关
ESP_ERROR_CHECK(esp_lcd_touch_new_i2c_ft5x06(tp_io_handle, &tp_cfg, &tp));
修改menuconfig,使用自定义lv_conf.h
编译下载
三、结果
点击rotate屏幕会旋转90°
-------------------------------------------------------------end---------------------------------------------------------------
有什么问题评论区或者私信。