dvosully/esp_lcd_touch_res4w

0.1.0

uploaded 1 week ago
esp_lcd_touch driver for resistive screens without touch controller.

readme

# esp_lcd_touch driver for bare 4 wire resistive touchscreen devices

Implementation of the bare 4 wire resistive touchscreen driver with esp_lcd_touch component.

## Adding this component in your project

This package can be added to your project in two ways:

1. Using [Espressif's component service](https://components.espressif.com/) as:
```
dependencies:
  dvosully/esp_lcd_touch_res4w: "~0.1.0"
```

2. Using the git repository directly:

```
dependencies:
  esp_lcd_touch_res4w:
    git: https://github.com/dvosully/esp_lcd_touch_res4w.git
```

For more information on the usage of the `idf_component.yml` file please refer to [Espressif's documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-component-manager.html).

## Supported platforms

At this time testing is limited to ESP32, other ESP32 variants should work but are not tested.

## Configuration options

`Kconfig.projbuild` contains a handful of options to allow customization of the RES4W interface:

* XPT2046_Z_THRESHOLD - This is the minimum ADC threshold to use for detecting touch points.
* XPT2046_CONVERT_ADC_TO_COORDS - This option enables / disables the conversion of raw ADC values into screen coordinates. When disabled it will be necessary to define the `process_coordinates` method in `esp_lcd_touch_config_t`. This can be useful for applying calibration or other offsets to adjust the screen coordinates.
* XPT2046_ENABLE_LOCKING - This option enables / disables the usage of critical sections to protect internal data structures. This has been seen to cause conflicts with other components at times.

## Example usage

### Initialization

```
    esp_lcd_touch_handle_t tp = NULL;

    esp_lcd_touch_config_t tp_cfg = {
        .x_max = CONFIG_LCD_HRES,
        .y_max = CONFIG_LCD_VRES,
        .rst_gpio_num = -1,
        .int_gpio_num = -1,
        .flags = {
            .swap_xy = 0,
            .mirror_x = 0,
            .mirror_y = 0,
        },
    };
    res4w_cfg_data_t res_cfg = {
        .io_YP = TOUCH_YP_PIN,
        .io_YM = TOUCH_YM_PIN,
        .io_XP = TOUCH_XP_PIN,
        .io_XM = TOUCH_XM_PIN,
    };

    ESP_LOGI(TAG, "Initialize touch controller RES4W");
    ESP_ERROR_CHECK(esp_lcd_touch_new_spi_res4w(&tp_cfg, &res_cfg, &tp));
```

### Updating touch point data

This will read new data from the touch controller and store it in SRAM. This method
should be called on a regular basis.

```
    ESP_ERROR_CHECK(esp_lcd_touch_read_data(tp));
```

### Retrieving touch point(s)

This will retrieve the latest averaged touch point data from SRAM.

```
    uint16_t x[1];
    uint16_t y[1];
    uint16_t  strength[1];
    uint8_t count = 0;

    bool touchpad_pressed = esp_lcd_touch_get_coordinates(tp, x, y, strength, &count, 1);
```

### Integrating with LVGL

This driver can be integrated with LVGL using code similar to below:

```
void touch_driver_read(lv_indev_drv_t *drv, lv_indev_data_t *data)
{
    uint16_t x[1];
    uint16_t y[1];
    uint16_t strength[1];
    uint8_t count = 0;

    // Update touch point data.
    ESP_ERROR_CHECK(esp_lcd_touch_read_data(tp));

    data->state = LV_INDEV_STATE_REL;

    if (esp_lcd_touch_get_coordinates(tp, x, y, strength, &count, 1))
    {
        data->point.x = x[0];
        data->point.y = y[0];
        data->state = LV_INDEV_STATE_PR;
    }

    data->continue_reading = false;
}

void initialize_input()
{
    lv_indev_drv_t indev_drv;
    lv_indev_drv_init( &indev_drv );
    indev_drv.type = LV_INDEV_TYPE_POINTER;
    indev_drv.read_cb = touch_driver_read;
    lv_indev_drv_register( &indev_drv );
}

```

Links

Supports all targets

License: MIT

To add this component to your project, run:

idf.py add-dependency "dvosully/esp_lcd_touch_res4w^0.1.0"

or download archive

Stats

  • Archive size
    Archive size: 6.21 KB
  • Downloaded in total
    Downloaded in total 1 time
  • Downloaded this version
    This version: 1 time

Badge

dvosully/esp_lcd_touch_res4w version: 0.1.0
|