esp32-c3 立创实战派ESP-IDF 驱动屏幕和触摸

一、环境介绍

操作系统: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---------------------------------------------------------------

有什么问题评论区或者私信。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值