Closed
Description
Screen unvisible until backlight->setBrightness(int percent) is set to 85 and above. Also very noticeable non-linear adjustment is happening between 95-96-97 percent.
Here you can see Issue's video representation
Is this normal behaviour? Or maybe I'm doing something wrong?
Board: BOARD_JINGCAI_ESP32_4848S040C_I_Y_3
I configured BOARD_JINGCAI_ESP32_4848S040C_I_Y_3.h header file, and by default it uses PWM backlight control.
BOARD_JINGCAI_ESP32_4848S040C_I_Y_3.h
#pragma once
// *INDENT-OFF*
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// Please update the following macros to configure general panel /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* @brief Board name
*/
#define ESP_PANEL_BOARD_NAME "Jingcai:ESP32_4848S040C_I_Y_3"
/**
* @brief Panel resolution configuration in pixels
*/
#define ESP_PANEL_BOARD_WIDTH (480) // Panel width (horizontal, in pixels)
#define ESP_PANEL_BOARD_HEIGHT (480) // Panel height (vertical, in pixels)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// Please update the following macros to configure the LCD panel /////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* @brief LCD panel configuration flag (0/1)
*
* Set to `1` to enable LCD panel support, `0` to disable
*/
#define ESP_PANEL_BOARD_USE_LCD (1)
#if ESP_PANEL_BOARD_USE_LCD
/**
* @brief LCD controller selection
*/
#define ESP_PANEL_BOARD_LCD_CONTROLLER ST7701
/**
* @brief LCD bus type selection
*/
#define ESP_PANEL_BOARD_LCD_BUS_TYPE (ESP_PANEL_BUS_TYPE_RGB)
/**
* @brief LCD bus parameters configuration
*
* Configure parameters based on the selected bus type. Parameters for other bus types will be ignored.
* For detailed parameter explanations, see:
* https://docs.espressif.com/projects/esp-idf/en/v5.3.1/esp32s3/api-reference/peripherals/lcd/index.html
* https://docs.espressif.com/projects/esp-iot-solution/en/latest/display/lcd/index.html
*/
#if ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_RGB
/**
* @brief RGB bus parameters configuration
*/
/**
* Set to 0 if using simple "RGB" interface which does not contain "3-wire SPI" interface.
*/
#define ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL (1) // 0/1. Typically set to 1
#if ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL
/* For control panel (3wire-SPI) */
#define ESP_PANEL_BOARD_LCD_RGB_SPI_IO_CS (39)
#define ESP_PANEL_BOARD_LCD_RGB_SPI_IO_SCK (48)
#define ESP_PANEL_BOARD_LCD_RGB_SPI_IO_SDA (47)
#define ESP_PANEL_BOARD_LCD_RGB_SPI_CS_USE_EXPNADER (0) // Set to 1 if the signal is controlled by an IO expander
#define ESP_PANEL_BOARD_LCD_RGB_SPI_SCL_USE_EXPNADER (0) // Set to 1 if the signal is controlled by an IO expander
#define ESP_PANEL_BOARD_LCD_RGB_SPI_SDA_USE_EXPNADER (0) // Set to 1 if the signal is controlled by an IO expander
#define ESP_PANEL_BOARD_LCD_RGB_SPI_MODE (0) // 0-3, typically set to 0
#define ESP_PANEL_BOARD_LCD_RGB_SPI_CMD_BYTES (1) // Typically set to 8
#define ESP_PANEL_BOARD_LCD_RGB_SPI_PARAM_BYTES (1) // Typically set to 8
#define ESP_PANEL_BOARD_LCD_RGB_SPI_USE_DC_BIT (1) // 0/1. Typically set to 1
#endif // ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL
/* For refresh panel (RGB) */
#define ESP_PANEL_BOARD_LCD_RGB_CLK_HZ (26 * 1000 * 1000)
// To increase the upper limit of the PCLK, see: https://docs.espressif.com/projects/esp-faq/en/latest/software-framework/peripherals/lcd.html#how-can-i-increase-the-upper-limit-of-pclk-settings-on-esp32-s3-while-ensuring-normal-rgb-screen-display
#define ESP_PANEL_BOARD_LCD_RGB_HPW (10)
#define ESP_PANEL_BOARD_LCD_RGB_HBP (10)
#define ESP_PANEL_BOARD_LCD_RGB_HFP (20)
#define ESP_PANEL_BOARD_LCD_RGB_VPW (10)
#define ESP_PANEL_BOARD_LCD_RGB_VBP (10)
#define ESP_PANEL_BOARD_LCD_RGB_VFP (10)
#define ESP_PANEL_BOARD_LCD_RGB_PCLK_ACTIVE_NEG (0) // 0: rising edge, 1: falling edge. Typically set to 0
// The following sheet shows the valid combinations of
// data width and pixel bits:
// ┏---------------------------------┳- -------------------------------┓
#define ESP_PANEL_BOARD_LCD_RGB_DATA_WIDTH (16) // | 16 | 8 |
#define ESP_PANEL_BOARD_LCD_RGB_PIXEL_BITS (ESP_PANEL_LCD_COLOR_BITS_RGB565) // | ESP_PANEL_LCD_COLOR_BITS_RGB565 | ESP_PANEL_LCD_COLOR_BITS_RGB888 |
// ┗---------------------------------┻---------------------------------┛
// To understand color format of RGB LCD, see: https://docs.espressif.com/projects/esp-iot-solution/en/latest/display/lcd/rgb_lcd.html#color-formats
#define ESP_PANEL_BOARD_LCD_RGB_BOUNCE_BUF_SIZE (ESP_PANEL_BOARD_WIDTH * 10)
// Bounce buffer size in bytes. It is used to avoid screen drift
// for ESP32-S3. Typically set to `ESP_PANEL_BOARD_WIDTH * 10`
// The size should satisfy `size * N = LCD_width * LCD_height`,
// where N is an even number.
// For more details, see: https://github.com/esp-arduino-libs/ESP32_Display_Panel/blob/master/docs/FAQ.md#how-to-fix-screen-drift-issue-when-driving-rgb-lcd-with-esp32-s3
#define ESP_PANEL_BOARD_LCD_RGB_IO_HSYNC (16)
#define ESP_PANEL_BOARD_LCD_RGB_IO_VSYNC (17)
#define ESP_PANEL_BOARD_LCD_RGB_IO_DE (18) // -1 if not used
#define ESP_PANEL_BOARD_LCD_RGB_IO_PCLK (21)
#define ESP_PANEL_BOARD_LCD_RGB_IO_DISP (-1) // -1 if not used. Typically set to -1
// The following sheet shows the mapping of ESP GPIOs to
// LCD data pins with different data width and color format:
// ┏------┳- ------------┳--------------------------┓
// | ESP: | 8-bit RGB888 | 16-bit RGB565 |
// |------|--------------|--------------------------|
// | LCD: | RGB888 | RGB565 | RGB666 | RGB888 |
// ┗------|--------------|--------|--------|--------|
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA0 (4) // | D0 | B0 | B0-1 | B0-3 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA1 (5) // | D1 | B1 | B2 | B4 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA2 (6) // | D2 | B2 | B3 | B5 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA3 (7) // | D3 | B3 | B4 | B6 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA4 (15) // | D4 | B4 | B5 | B7 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA5 (8) // | D5 | G0 | G0 | G0-2 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA6 (20) // | D6 | G1 | G1 | G3 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA7 (3) // | D7 | G2 | G2 | G4 |
#if ESP_PANEL_BOARD_LCD_RGB_DATA_WIDTH > 8 // ┗--------------┫--------|--------|--------|
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA8 (46) // | G3 | G3 | G5 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA9 (9) // | G4 | G4 | G6 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA10 (10) // | G5 | G5 | G7 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA11 (11) // | R0 | R0-1 | R0-3 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA12 (12) // | R1 | R2 | R4 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA13 (13) // | R2 | R3 | R5 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA14 (14) // | R3 | R4 | R6 |
#define ESP_PANEL_BOARD_LCD_RGB_IO_DATA15 (0) // | R4 | R5 | R7 |
// ┗--------┻--------┻--------┛
#endif // ESP_PANEL_BOARD_LCD_RGB_DATA_WIDTH
#endif // ESP_PANEL_BOARD_LCD_BUS_TYPE
/**
* @brief LCD specific flags configuration
*
* These flags are specific to the "3-wire SPI + RGB" bus.
*/
#if (ESP_PANEL_BOARD_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_RGB) && ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL
/**
* @brief Enable IO multiplex
*
* Set to 1 if the 3-wire SPI pins are sharing other pins of the RGB interface to save GPIOs. Then, the control panel
* and its pins (except CS signal) will be released after LCD call `init()`. All `*_by_cmd` flags will be invalid.
*/
#define ESP_PANEL_BOARD_LCD_FLAGS_ENABLE_IO_MULTIPLEX (0) // typically set to 0
/**
* @brief Mirror by command
*
* Set to 1 if the `mirror()` function will be implemented by LCD command. Otherwise, the function will be implemented by
* software. Only valid when `ESP_PANEL_BOARD_LCD_FLAGS_ENABLE_IO_MULTIPLEX` is 0.
*/
#define ESP_PANEL_BOARD_LCD_FLAGS_MIRROR_BY_CMD (!ESP_PANEL_BOARD_LCD_FLAGS_ENABLE_IO_MULTIPLEX)
#endif // ESP_PANEL_BOARD_LCD_RGB_USE_CONTROL_PANEL
/**
* @brief LCD vendor initialization commands
*
* Vendor specific initialization can be different between manufacturers, should consult the LCD supplier for
* initialization sequence code. Please uncomment and change the following macro definitions. Otherwise, the LCD driver
* will use the default initialization sequence code.
*
* The initialization sequence can be specified in two formats:
* 1. Raw format:
* {command, (uint8_t []){data0, data1, ...}, data_size, delay_ms}
* 2. Helper macros:
* - ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(delay_ms, command, {data0, data1, ...})
* - ESP_PANEL_LCD_CMD_WITH_NONE_PARAM(delay_ms, command)
*/
#define ESP_PANEL_BOARD_LCD_VENDOR_INIT_CMD() \
{ \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xFF, {0x77, 0x01, 0x00, 0x00, 0x10}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC0, {0x3B, 0x00}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC1, {0x0D, 0x02}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC2, {0x31, 0x05}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xCD, {0x00}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB0, {0x00, 0x11, 0x18, 0x0E, 0x11, 0x06, 0x07, 0x08, 0x07, 0x22, 0x04, 0x12, 0x0F, 0xAA, 0x31, 0x18}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB1, {0x00, 0x11, 0x19, 0x0E, 0x12, 0x07, 0x08, 0x08, 0x08, 0x22, 0x04, 0x11, 0x11, 0xA9, 0x32, 0x18}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xFF, {0x77, 0x01, 0x00, 0x00, 0x11}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB0, {0x60}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB1, {0x32}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB2, {0x07}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB3, {0x80}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB5, {0x49}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB7, {0x85}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xB8, {0x21}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC1, {0x78}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC2, {0x78}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE0, {0x00, 0x1B, 0x02}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE1, {0x08, 0xA0, 0x00, 0x00, 0x07, 0xA0, 0x00, 0x00, 0x00, 0x44, 0x44}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE2, {0x11, 0x11, 0x44, 0x44, 0xED, 0xA0, 0x00, 0x00, 0xEC, 0xA0, 0x00, 0x00}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE3, {0x00, 0x00, 0x11, 0x11}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE4, {0x44, 0x44}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE5, {0x0A, 0xE9, 0xD8, 0xA0, 0x0C, 0xEB, 0xD8, 0xA0, 0x0E, 0xED, 0xD8, 0xA0, 0x10, 0xEF, 0xD8, 0xA0}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE6, {0x00, 0x00, 0x11, 0x11}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE7, {0x44, 0x44}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE8, {0x09, 0xE8, 0xD8, 0xA0, 0x0B, 0xEA, 0xD8, 0xA0, 0x0D, 0xEC, 0xD8, 0xA0, 0x0F, 0xEE, 0xD8, 0xA0}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xEB, {0x02, 0x00, 0xE4, 0xE4, 0x88, 0x00, 0x40}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xEC, {0x3C, 0x00}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xED, {0xAB, 0x89, 0x76, 0x54, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x45, 0x67, 0x98, 0xBA}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xFF, {0x77, 0x01, 0x00, 0x00, 0x13}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xE5, {0xE4}), \
ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xFF, {0x77, 0x01, 0x00, 0x00, 0x00}), \
ESP_PANEL_LCD_CMD_WITH_NONE_PARAM(120, 0x11), \
}
/**
* @brief LCD color configuration
*/
#define ESP_PANEL_BOARD_LCD_COLOR_BITS (ESP_PANEL_LCD_COLOR_BITS_RGB666)
// ESP_PANEL_LCD_COLOR_BITS_RGB565/RGB666/RGB888
#define ESP_PANEL_BOARD_LCD_COLOR_BGR_ORDER (0) // 0: RGB, 1: BGR
#define ESP_PANEL_BOARD_LCD_COLOR_INEVRT_BIT (0) // 0/1
/**
* @brief LCD transformation configuration
*/
#define ESP_PANEL_BOARD_LCD_SWAP_XY (0) // 0/1
#define ESP_PANEL_BOARD_LCD_MIRROR_X (0) // 0/1
#define ESP_PANEL_BOARD_LCD_MIRROR_Y (0) // 0/1
#define ESP_PANEL_BOARD_LCD_GAP_X (0) // [0, ESP_PANEL_BOARD_WIDTH]
#define ESP_PANEL_BOARD_LCD_GAP_Y (0) // [0, ESP_PANEL_BOARD_HEIGHT]
/**
* @brief LCD reset pin configuration
*/
#define ESP_PANEL_BOARD_LCD_RST_IO (-1) // Reset pin, -1 if not used
#define ESP_PANEL_BOARD_LCD_RST_LEVEL (0) // Reset active level, 0: low, 1: high
#endif // ESP_PANEL_BOARD_USE_LCD
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// Please update the following macros to configure the touch panel ///////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* @brief Touch panel configuration flag (0/1)
*
* Set to `1` to enable touch panel support, `0` to disable
*/
#define ESP_PANEL_BOARD_USE_TOUCH (1)
#if ESP_PANEL_BOARD_USE_TOUCH
/**
* @brief Touch controller selection
*/
#define ESP_PANEL_BOARD_TOUCH_CONTROLLER GT911
/**
* @brief Touch bus type selection
*
* Supported types:
* - `ESP_PANEL_BUS_TYPE_I2C`
* - `ESP_PANEL_BUS_TYPE_SPI`
*/
#define ESP_PANEL_BOARD_TOUCH_BUS_TYPE (ESP_PANEL_BUS_TYPE_I2C)
#if (ESP_PANEL_BOARD_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_I2C) || \
(ESP_PANEL_BOARD_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_SPI)
/**
* If set to 1, the bus will skip to initialize the corresponding host. Users need to initialize the host in advance.
*
* For drivers which created by this library, even if they use the same host, the host will be initialized only once.
* So it is not necessary to set the macro to `1`. For other drivers (like `Wire`), please set the macro to `1`
* ensure that the host is initialized only once.
*/
#define ESP_PANEL_BOARD_TOUCH_BUS_SKIP_INIT_HOST (0) // 0/1. Typically set to 0
#endif
/**
* @brief Touch bus parameters configuration
*/
#if ESP_PANEL_BOARD_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_I2C
/**
* @brief I2C bus
*/
/* For general */
#define ESP_PANEL_BOARD_TOUCH_I2C_HOST_ID (0) // Typically set to 0
#if !ESP_PANEL_BOARD_TOUCH_BUS_SKIP_INIT_HOST
/* For host */
#define ESP_PANEL_BOARD_TOUCH_I2C_CLK_HZ (400 * 1000)
// Typically set to 400K
#define ESP_PANEL_BOARD_TOUCH_I2C_SCL_PULLUP (1) // 0/1. Typically set to 1
#define ESP_PANEL_BOARD_TOUCH_I2C_SDA_PULLUP (1) // 0/1. Typically set to 1
#define ESP_PANEL_BOARD_TOUCH_I2C_IO_SCL (45)
#define ESP_PANEL_BOARD_TOUCH_I2C_IO_SDA (19)
#endif
/* For panel */
#define ESP_PANEL_BOARD_TOUCH_I2C_ADDRESS (0) // Typically set to 0 to use the default address.
// - For touchs with only one address, set to 0
// - For touchs with multiple addresses, set to 0 or
// the address. Like GT911, there are two addresses:
// 0x5D(default) and 0x14
#endif // ESP_PANEL_BOARD_TOUCH_BUS_TYPE
/**
* @brief Touch panel transformation flags
*/
#define ESP_PANEL_BOARD_TOUCH_SWAP_XY (0) // 0/1
#define ESP_PANEL_BOARD_TOUCH_MIRROR_X (0) // 0/1
#define ESP_PANEL_BOARD_TOUCH_MIRROR_Y (0) // 0/1
/**
* @brief Touch panel control pins
*/
#define ESP_PANEL_BOARD_TOUCH_RST_IO (-1) // Reset pin, -1 if not used
#define ESP_PANEL_BOARD_TOUCH_RST_LEVEL (0) // Reset active level, 0: low, 1: high
#define ESP_PANEL_BOARD_TOUCH_INT_IO (-1) // Interrupt pin, -1 if not used
#define ESP_PANEL_BOARD_TOUCH_INT_LEVEL (0) // Interrupt active level, 0: low, 1: high
#endif // ESP_PANEL_BOARD_USE_TOUCH
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// Please update the following macros to configure the backlight ////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* @brief Backlight configuration flag (0/1)
*
* Set to `1` to enable backlight support, `0` to disable
*/
#define ESP_PANEL_BOARD_USE_BACKLIGHT (1)
#if ESP_PANEL_BOARD_USE_BACKLIGHT
/**
* @brief Backlight control type selection
*/
#define ESP_PANEL_BOARD_BACKLIGHT_TYPE (ESP_PANEL_BACKLIGHT_TYPE_PWM_LEDC)
#if (ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_SWITCH_GPIO) || \
(ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_SWITCH_EXPANDER) || \
(ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_PWM_LEDC)
/**
* @brief Backlight control pin configuration
*/
#define ESP_PANEL_BOARD_BACKLIGHT_IO (38) // Output GPIO pin number
#define ESP_PANEL_BOARD_BACKLIGHT_ON_LEVEL (1) // Active level, 0: low, 1: high
#endif // ESP_PANEL_BOARD_BACKLIGHT_TYPE
/**
* @brief Backlight idle state configuration (0/1)
*
* Set to 1 if want to turn off the backlight after initializing. Otherwise, the backlight will be on.
*/
#define ESP_PANEL_BOARD_BACKLIGHT_IDLE_OFF (0)
#endif // ESP_PANEL_BOARD_USE_BACKLIGHT
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// Please update the following macros to configure the IO expander //////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* @brief IO expander configuration flag (0/1)
*
* Set to `1` to enable IO expander support, `0` to disable
*/
#define ESP_PANEL_BOARD_USE_EXPANDER (0)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// Please utilize the following macros to execute any additional code if required /////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////// File Version ///////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Do not change the following versions. These version numbers are used to check compatibility between this
* configuration file and the library. Rules for version numbers:
* 1. Major version mismatch: Configurations are incompatible, must use library version
* 2. Minor version mismatch: May be missing new configurations, recommended to update
* 3. Patch version mismatch: No impact on functionality
*/
#define ESP_PANEL_BOARD_CUSTOM_FILE_VERSION_MAJOR 1
#define ESP_PANEL_BOARD_CUSTOM_FILE_VERSION_MINOR 0
#define ESP_PANEL_BOARD_CUSTOM_FILE_VERSION_PATCH 0
// *INDENT-ON*
Main.cpp
#include <Arduino.h>
#include <esp_display_panel.hpp>
#include <lvgl.h>
#include "lvgl_v8_port.h"
extern "C" {
#include <ui/screens.h>
#include <ui/ui.h>
}
int counter = 0;
bool once = false;
using namespace esp_panel::drivers;
using namespace esp_panel::board;
esp_panel::drivers::Backlight *backlight;
void setup() {
Serial.begin(115200);
Serial.println("Initializing board");
Board *board = new Board();
board->init();
#if LVGL_PORT_AVOID_TEARING_MODE
auto lcd = board->getLCD();
// When avoid tearing function is enabled, the frame buffer number should be set in the board driver
lcd->configFrameBufferNumber(LVGL_PORT_DISP_BUFFER_NUM);
#if ESP_PANEL_DRIVERS_BUS_ENABLE_RGB && CONFIG_IDF_TARGET_ESP32S3
auto lcd_bus = lcd->getBus();
/**
* As the anti-tearing feature typically consumes more PSRAM bandwidth, for the ESP32-S3, we need to utilize the
* "bounce buffer" functionality to enhance the RGB data bandwidth.
* This feature will consume `bounce_buffer_size * bytes_per_pixel * 2` of SRAM memory.
*/
if (lcd_bus->getBasicAttributes().type == ESP_PANEL_BUS_TYPE_RGB) {
static_cast<BusRGB *>(lcd_bus)->configRGB_BounceBufferSize(lcd->getFrameWidth() * 10);
}
#endif
#endif
assert(board->begin());
backlight = board->getBacklight();
Serial.println("Initializing LVGL");
lvgl_port_init(board->getLCD(), board->getTouch());
Serial.println("Creating UI");
/* Lock the mutex due to the LVGL APIs are not thread-safe */
lvgl_port_lock(-1);
/**
* Create the simple labels
*/
lv_obj_t *label_1 = lv_label_create(lv_scr_act());
lv_label_set_text(label_1, "Hello World!");
lv_obj_set_style_text_font(label_1, &lv_font_montserrat_30, 0);
lv_obj_align(label_1, LV_ALIGN_CENTER, 0, -20);
lv_obj_t *label_2 = lv_label_create(lv_scr_act());
lv_label_set_text_fmt(
label_2, "ESP32_Display_Panel(%d.%d.%d)",
ESP_PANEL_VERSION_MAJOR, ESP_PANEL_VERSION_MINOR, ESP_PANEL_VERSION_PATCH
);
lv_obj_set_style_text_font(label_2, &lv_font_montserrat_16, 0);
lv_obj_align_to(label_2, label_1, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
lv_obj_t *label_3 = lv_label_create(lv_scr_act());
lv_label_set_text_fmt(label_3, "LVGL(%d.%d.%d)", LVGL_VERSION_MAJOR, LVGL_VERSION_MINOR, LVGL_VERSION_PATCH);
lv_obj_set_style_text_font(label_3, &lv_font_montserrat_16, 0);
lv_obj_align_to(label_3, label_2, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
/* Release the mutex */
lvgl_port_unlock();
lvgl_port_lock(-1);
/* Initialize LVGL UI generated by Squareline */
ui_init();
/* Release the mutex */
lvgl_port_unlock();
if(backlight == nullptr) {
Serial.println("Backlight driver not available on this panel");
}
}
void loop() {
// put your main code here, to run repeatedly:
//Serial.println("IDLE loop");
delay(1000);
counter++;
if(!(backlight->setBrightness(80+counter)))
{
Serial.println("Failed to set Brightness");
}
if(counter == 20)
{
counter = 0;
}
Serial.print("Screen Brightness: ");Serial.println(backlight->getBrightness());
}
Metadata
Metadata
Assignees
Labels
No labels