esp32 lvgl 配置文件系统

一般来讲下载了 https://github.com/lvgl/lvgl.git 就能够使用文件系统了,不需要额外下载lv_fs_if那个代码。

参考lvgl/examples/porting目录下的lv_port_fs_template.c文件实现各种方法即可。


static lv_fs_res_t open_cb(struct _lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode)
{
    (void) drv;
    //ESP_LOGI(TAG, "lvgl open file: path=%s mode=%d", path, mode);
    FILE *fp = NULL;
    if (mode == LV_FS_MODE_RD) {
        fp = fopen(path, "rb"); // only reading is supported
    } else if (mode == LV_FS_MODE_WR) {
        fp = fopen(path, "wb");
    } else {
        ESP_LOGE(TAG, "lvfs open mode error!");
        return LV_FS_RES_UNKNOWN;
    }   
    *((FILE **)file_p) = fp; 
    return NULL == fp ? LV_FS_RES_UNKNOWN : LV_FS_RES_OK;
}

static lv_fs_res_t close_cb(struct _lv_fs

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32作为一款强大的微控制器,在物联网领域有着广阔的应用前景,而LVGL作为嵌入式图形库则具有强大的图形渲染和事件驱动能力。本文将讲解如何在ESP32配置LVGL的触摸屏驱动。 首先,我们需要在LVGL配置文件中开启触摸屏驱动,一般可以通过修改`lv_conf.h`文件中的宏定义来实现: ```c #define LV_TOUCH_DRIVER LV_TOUCH_DRIVER_FT6X36 /* 选择触摸屏驱动类型,这里以FT6X36为例 */ ``` 接下来,我们需要在ESP32配置触摸屏芯片的驱动程序。假设我们使用的是FT6226触摸屏芯片,在配置驱动程序之前,我们需要基于ESP-IDF(ESP32官方开发框架)编写一个I2C总线驱动程序。在这里,我们以i2c_master_example这个驱动程序为例: ```c /* 初始化I2C总线 */ void i2c_master_init(void) { i2c_config_t conf; conf.mode = I2C_MODE_MASTER; conf.sda_io_num = I2C_MASTER_SDA_IO; conf.sda_pullup_en = GPIO_PULLUP_ENABLE; conf.scl_io_num = I2C_MASTER_SCL_IO; conf.scl_pullup_en = GPIO_PULLUP_ENABLE; conf.master.clk_speed = I2C_MASTER_FREQ_HZ; i2c_param_config(I2C_NUM_0, &conf); i2c_driver_install(I2C_NUM_0, conf.mode, 0, 0, 0); } /* 读取FT6X36寄存器的值 */ static esp_err_t ft6x36_read_register(uint8_t reg_addr, uint8_t* buff, uint8_t len) { i2c_cmd_handle_t cmd = i2c_cmd_link_create(); i2c_master_start(cmd); i2c_master_write_byte(cmd, FT6X36_ADDR << 1 | I2C_MASTER_WRITE, I2C_MASTER_ACK); i2c_master_write_byte(cmd, reg_addr, I2C_MASTER_ACK); i2c_master_start(cmd); i2c_master_write_byte(cmd, FT6X36_ADDR << 1 | I2C_MASTER_READ, I2C_MASTER_ACK); i2c_master_read(cmd, buff, len, I2C_MASTER_LAST_NACK); i2c_master_stop(cmd); esp_err_t ret = i2c_master_cmd_begin(I2C_NUM_0, cmd, 1000 / portTICK_PERIOD_MS); i2c_cmd_link_delete(cmd); return ret; } /* 向FT6X36写寄存器的值 */ static esp_err_t ft6x36_write_register(uint8_t reg_addr, uint8_t value) { i2c_cmd_handle_t cmd = i2c_cmd_link_create(); i2c_master_start(cmd); i2c_master_write_byte(cmd, FT6X36_ADDR << 1 | I2C_MASTER_WRITE, I2C_MASTER_ACK); i2c_master_write_byte(cmd, reg_addr, I2C_MASTER_ACK); i2c_master_write_byte(cmd, value, I2C_MASTER_ACK); i2c_master_stop(cmd); esp_err_t ret = i2c_master_cmd_begin(I2C_NUM_0, cmd, 1000 / portTICK_PERIOD_MS); i2c_cmd_link_delete(cmd); return ret; } /* 配置FT6X36触摸屏芯片 */ void ft6x36_init(void) { i2c_master_init(); ft6x36_write_register(FT6X36_ID_G_THGROUP, 0x16); ft6x36_write_register(FT6X36_ID_G_PACKED_DIFF, 0x82); ft6x36_write_register(FT6X36_ID_G_G_REG, 0x07); ft6x36_write_register(FT6X36_ID_G_THDIFF, 0x09); ft6x36_write_register(FT6X36_ID_G_CTRL, 0x8000); } ``` 在ft6x36_init函数中,我们通过调用I2C总线驱动程序来配置FT6X36触摸屏芯片的寄存器值。 最后,在应用程序中我们需要定义触摸驱动回调函数来处理电容屏的触摸事件: ```c /* 触摸驱动回调函数 */ bool lvgl_touch_xpt2046_driver(lv_indev_drv_t* drv, lv_indev_data_t* data) { /* 读取电容屏坐标 */ uint16_t x, y; int16_t tmp_x = 0, tmp_y = 0; bool touch_detected = xpt2046_read(&tmp_x, &tmp_y); /* 调整坐标值 */ if (touch_detected) { x = (tmp_x - TS_MINX) * LV_HOR_RES / (TS_MAXX - TS_MINX); y = (tmp_y - TS_MINY) * LV_VER_RES / (TS_MAXY - TS_MINY); data->state = LV_INDEV_STATE_PR; data->point.x = x; data->point.y = y; } else { data->state = LV_INDEV_STATE_REL; } return false; } ``` 以上就是在ESP32配置LVGL的触摸屏驱动的详细过程,需要注意的是不同的触摸屏芯片可能需要不同的驱动程序,需要根据具体情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值