Skip to content

Commit

Permalink
Merge pull request #37 from rzeldent/feature/flipped_display
Browse files Browse the repository at this point in the history
Feature/flipped display
  • Loading branch information
rzeldent authored Oct 29, 2023
2 parents b9afbba + ce8d169 commit 97619ef
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 29 deletions.
9 changes: 5 additions & 4 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
smartboard: ["ESP32_2432S024N", "ESP32_2432S024R", "ESP32_2432S024C", "ESP32_2432S028R", "ESP32_3248S035R", "ESP32_3248S035C", "ESP32_8048S070N", "ESP32_8048S070C"]
orientation: ["TFT_ORIENTATION_PORTRAIT", "TFT_ORIENTATION_LANDSCAPE", "TFT_ORIENTATION_PORTRAIT_INV", "TFT_ORIENTATION_LANDSCAPE_INV"]
rgborder: ["TFT_PANEL_ORDER_RGB", "TFT_PANEL_ORDER_BGR"]
smartboard: ["-DESP32_2432S024N", "-DESP32_2432S024R", "-DESP32_2432S024C", "-DESP32_2432S028R", "-DESP32_3248S035R", "-DESP32_3248S035C", "-DESP32_8048S070N", "-DESP32_8048S070C"]
orientation: ["-DTFT_ORIENTATION_PORTRAIT", "-DTFT_ORIENTATION_LANDSCAPE", "-DTFT_ORIENTATION_PORTRAIT_INV", "-DTFT_ORIENTATION_LANDSCAPE_INV"]
rgborder: ["-DTFT_PANEL_ORDER_RGB", "-DTFT_PANEL_ORDER_BGR"]
flippedmirrored: ["", "-DTFT_FLIPPEDMIRRORED"]
steps:
- uses: actions/checkout@v3
- name: Set up python
Expand All @@ -21,7 +22,7 @@ jobs:
- name: Build firmware
run: pio ci --lib="." --board esp32dev "examples/lvgl_pushbutton/main.cpp"
env:
PLATFORMIO_BUILD_FLAGS: -Ofast -D LV_CONF_PATH="${{github.workspace}}/examples/lvgl_pushbutton/lv_conf.h" -D ${{matrix.orientation}} -D ${{matrix.smartboard}} -D ${{matrix.rgborder}}
PLATFORMIO_BUILD_FLAGS: -Ofast -DLV_CONF_PATH="${{github.workspace}}/examples/lvgl_pushbutton/lv_conf.h" ${{matrix.smartboard}} ${{matrix.orientation}} ${{matrix.rgborder}} ${{matrix.flippedmirrored}}
- name: Archive
uses: actions/upload-artifact@v3
with:
Expand Down
25 changes: 17 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ To have all the constants and prototypes from LVGL, the LVGL library is already

- LVGL (version ^8.3.2)

To use the LVGL library, a ```lv_conf.h``` file is required to define the settings for LVGL.
To use the LVGL library, a `lv_conf.h` file is required to define the settings for LVGL.
This file needs to be provided by the application.
As this file is referenced from the build of LVGL, the path must be known.
Normally this file is included in the include directory of your project so the define must be
Expand All @@ -62,13 +62,14 @@ Normally this file is included in the include directory of your project so the d
-D LV_CONF_PATH=${PROJECT_INCLUDE_DIR}/lv_conf.h
```

The template for the ```lv_conf.h``` file can be found in the LVGL library at ```.pio/libdeps/esp32dev/lvgl/lv_conf_template.h```.
The template for the `lv_conf.h` file can be found in the LVGL library at `.pio/libdeps/esp32dev/lvgl/lv_conf_template.h`.

## How to use

Basically there is only **ONE** define that need to be defined: The type of board assuming everything is default.

- Type of board (required)

- ESP32_2432S024R
- ESP32_2432S024C
- ESP32_2432S024N
Expand All @@ -79,16 +80,21 @@ Basically there is only **ONE** define that need to be defined: The type of boar
- ESP32_8048S070C

- Orientation of the board (optional)

- TFT_ORIENTATION_PORTRAIT (default)
- TFT_ORIENTATION_LANDSCAPE (rotated 90 degrees)
- TFT_ORIENTATION_PORTRAIT_INV (rotated 180 degrees)
- TFT_ORIENTATION_LANDSCAPE_INV (rotated 270/-90 degrees)

- Flipped/Mirrored (optional)
Some TFT batches seem to have the contents mirrored and flipped.
The flag TFT_FLIPPEDMIRRORED compensates for this (production?) anomaly.

- LCD Panel RGB order (if red and blue are swapped on the display, optional)
- TFT_PANEL_ORDER_RGB
- TFT_PANEL_ORDER_BGR (default)

These can be defined in the ```platformio.ini``` file defining the settings:
These can be defined in the `platformio.ini` file defining the settings:

```ini
build_flags =
Expand All @@ -101,20 +107,21 @@ build_flags =
#-D TFT_ORIENTATION_LANDSCAPE
#-D TFT_ORIENTATION_PORTRAIT_INV
#-D TFT_ORIENTATION_LANDSCAPE_INV
#-D TFT_FLIPPEDMIRRORED
#-D ESP32_2432S024N
#-D ESP32_2432S024R
-D ESP32_2432S024C
#-D ESP32_2432S024C
#-D ESP32_2432S028R
#-D ESP32_3248S035R
#-D ESP32_3248S035C
#-D ESP32_8048S070N
#-D ESP32_8048S070C

lib_deps =
rzeldent/esp32_smartdisplay@^1.0.6
rzeldent/esp32_smartdisplay@^1.0.9
```

The path for the lv_conf.h above is ```${PROJECT_INCLUDE_DIR}```.
The path for the lv_conf.h above is `${PROJECT_INCLUDE_DIR}`.
This needs to be specified because the LVGL library included this header file.

## Demo application
Expand Down Expand Up @@ -175,9 +182,11 @@ Put the display to sleep.
Wake the display.

## Version history

- October 2023
- Added option for flipped/mirrored TFT's
- Changed default RGB order to BGR
- Version 1.0.8
- Version 1.0.8 and 1.0.9
- September 2023
- Added support for ESP32_2432S024N/R/S
- Version 1.0.7
Expand All @@ -198,4 +207,4 @@ Wake the display.
- RGB Led output
- CDS light sensor input
- July 2022
- Initial work started
- Initial work started
2 changes: 1 addition & 1 deletion library.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "esp32_smartdisplay",
"version": "1.0.8",
"version": "1.0.9",
"description": "LVGL driver for Sunton ESP32 TFT display boards",
"keywords": "LVGL 2432S024 2432S028 3248S035 8048S070",
"repository": {
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=esp32-smartdisplay
version=1.0.8
version=1.0.9
author=Rene Zeldenthuis
maintainer=Rene Zeldenthuis
category=Displays & LEDs
Expand Down
51 changes: 36 additions & 15 deletions src/tft_ilI9341.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,19 +59,19 @@
#endif

void ili9341_send_command(const uint8_t command, const uint8_t data[] = nullptr, const ushort length = 0)
{
digitalWrite(ILI9341_PIN_DC, LOW); // Command mode => command
spi_ili9431.beginTransaction(SPISettings(ILI9341_SPI_FREQ, MSBFIRST, SPI_MODE0));
digitalWrite(ILI9341_PIN_CS, LOW); // Chip select => enable
spi_ili9431.write(command);
if (length > 0)
{
digitalWrite(ILI9341_PIN_DC, LOW); // Command mode => command
spi_ili9431.beginTransaction(SPISettings(ILI9341_SPI_FREQ, MSBFIRST, SPI_MODE0));
digitalWrite(ILI9341_PIN_CS, LOW); // Chip select => enable
spi_ili9431.write(command);
if (length > 0)
{
digitalWrite(ILI9341_PIN_DC, HIGH); // Command mode => data
spi_ili9431.writeBytes(data, length);
}
digitalWrite(ILI9341_PIN_CS, HIGH); // Chip select => disable
spi_ili9431.endTransaction();
digitalWrite(ILI9341_PIN_DC, HIGH); // Command mode => data
spi_ili9431.writeBytes(data, length);
}
digitalWrite(ILI9341_PIN_CS, HIGH); // Chip select => disable
spi_ili9431.endTransaction();
}

void ili9341_send_pixels(const uint8_t command, const lv_color_t data[], const ushort length)
{
Expand Down Expand Up @@ -110,17 +110,38 @@ void ili9341_send_init_commands()
ili9341_send_command(CMD_VCOMVTRL1, vcomctr1, sizeof(vcomctr1)); // VCOM Control 1
static const uint8_t vcomctr2[] = {0xBE}; //
ili9341_send_command(CMD_VCOMVTRL2, vcomctr2, sizeof(vcomctr2)); // VCOM Control 2

#ifdef TFT_ORIENTATION_PORTRAIT
static const uint8_t madctl[] = {MADCTL_MY | MADCTL_PANEL_ORDER}; // Portrait 0 Degrees
// Portrait 0 Degrees
#ifndef TFT_FLIPPEDMIRRORED
static const uint8_t madctl[] = {MADCTL_MY | MADCTL_PANEL_ORDER};
#else
static const uint8_t madctl[] = {MADCTL_MY | MADCTL_MV | MADCTL_PANEL_ORDER}; // Flipped/Mirrored anomaly
#endif
#else
#ifdef TFT_ORIENTATION_LANDSCAPE
static const uint8_t madctl[] = {MADCTL_MV | MADCTL_PANEL_ORDER}; // Landscape 90 Degrees
// Landscape 90 Degrees
#ifndef TFT_FLIPPEDMIRRORED
static const uint8_t madctl[] = {MADCTL_MV | MADCTL_PANEL_ORDER};
#else
static const uint8_t madctl[] = {MADCTL_ML | MADCTL_PANEL_ORDER}; // Flipped/Mirrored anomaly
#endif
#else
#ifdef TFT_ORIENTATION_PORTRAIT_INV
static const uint8_t madctl[] = {MADCTL_MX | MADCTL_PANEL_ORDER}; // Portrait inverted 180 Degrees
// Portrait inverted 180 Degrees
#ifndef TFT_FLIPPEDMIRRORED
static const uint8_t madctl[] = {MADCTL_MX | MADCTL_PANEL_ORDER};
#else
static const uint8_t madctl[] = {MADCTL_MX | MADCTL_MV | MADCTL_PANEL_ORDER}; // Flipped/Mirrored anomaly
#endif
#else
#ifdef TFT_ORIENTATION_LANDSCAPE_INV
static const uint8_t madctl[] = {MADCTL_MY | MADCTL_MX | MADCTL_MV | MADCTL_PANEL_ORDER}; // Landscape inverted 270 Degrees
// Landscape inverted 270 Degrees
#ifndef TFT_FLIPPEDMIRRORED
static const uint8_t madctl[] = {MADCTL_MY | MADCTL_MX | MADCTL_MV | MADCTL_PANEL_ORDER};
#else
static const uint8_t madctl[] = {MADCTL_MY | MADCTL_MX | MADCTL_MH | MADCTL_PANEL_ORDER}; // Flipped/Mirrored anomaly
#endif
#else
#error TFT_ORIENTATION not defined!
#endif
Expand Down

0 comments on commit 97619ef

Please sign in to comment.