esphome / esphome/feature-requests

ESP32S3 RPI_DPI_RGB component should allow "serial" RGB displays

Open
#2,973 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
450
Forks
29
PR merge metrics
No merged PRs in 30d

Description

**Describe the problem you have/What new integration you would like**
Current RPI_DPI_RGB component only makes use of parallel RGB displays, but there's also support from the IDF itself of the so-called "serial RGB" displays. Such displays use a parallel bus, but they require to latch the colors in separate clocks, for instance, an 8 bit bus that will provide the RED pixel data (8 bits), then the GREEN pixel data (another 8 bits), and finally the BLUE pixel data (another 8 bits), consuming 3 clocks per pixel. This works transparently for the user, since this is taken into account inside the IDF. In order to use this feature, when configuring the panel, the `esp_lcd_rgb_panel_config_t` structure should contain its member `data_width` set to a lower number than the `bits_per_pixel` member. For instance, `data_width` set to 8, while `bits_per_pixel` set to 24 (i.e. RGB888). This would mean you don't need to specify the red/green/blue pins separately, just the N pins used in the `data_width`.

**Please describe your use case for this integration and alternatives you've tried:**
A lot of LCD modules use this, and it's already implemented in IDF, so it's trivial to make use of.

**Additional context**
I'm using a A035QN05 display which is a 320*240, "serial RGB", with the following initialization code:
```
esp_lcd_rgb_panel_config_t panel_config = {
.data_width = 8, // RGB888
.bits_per_pixel = 24,
.num_fbs = 1,
.dma_burst_size = 64,
.clk_src = LCD_CLK_SRC_DEFAULT,
.disp_gpio_num = -1,
.pclk_gpio_num = GPIO_NUM_8,
.vsync_gpio_num = GPIO_NUM_46,
.hsync_gpio_num = GPIO_NUM_3,
.de_gpio_num = -1,
.data_gpio_nums = {
GPIO_NUM_45,
GPIO_NUM_21,
GPIO_NUM_14,
GPIO_NUM_13,
GPIO_NUM_12,
GPIO_NUM_11,
GPIO_NUM_10,
GPIO_NUM_9,
},
// The timing parameters should refer to your LCD spec
.timings = {
.pclk_hz = 27000000UL,
.h_res = 320,
.v_res = 240,

.hsync_back_porch = 75,
.hsync_front_porch = 686,
.hsync_pulse_width = 1,

.vsync_back_porch = 21,
.vsync_front_porch = 2,
.vsync_pulse_width = 1,
},
.flags.fb_in_psram = true,
};
```
As you can see, there's not much deviation from a standard true "parallel" RGB display, just less pins declared, and the different values in `data_width` and `bits_per_pixel`

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.