RPI_DPI_RGB Display Driver


This display driver supports displays with 16 bit parallel interfaces, often referred to as “RPI_DPI_RGB” type. These have a parallel interface but no SPI interface and require no configuration of the driver chip.

This driver has been tested with the following displays:

  • Waveshare ESP32-S3-Touch-LCD-4.3

  • Makerfabs 4.3” display (Sunton)


This component requires an ESP32 (usually an ESP32-S3 because of the number of GPIO pins required) and the use of ESP-IDF. PSRAM is a requirement due to the size of the display buffer.


Waveshare ESP32-S3 Touch 4.3

# Example minimal configuration entry
  - platform: rpi_dpi_rgb
    id: rpi_disp
      width: 800
      height: 480
    de_pin: REPLACE_ME
    hsync_pin: REPLACE_ME
    vsync_pin: REPLACE_ME
    pclk_pin: REPLACE_ME

        - XX        #r1
        - XX        #r2
        - XX        #r3
        - XX        #r4
        - XX        #r5
        - XX        #g0
        - XX        #g1
        - XX        #g2
        - XX        #g3
        - XX        #g4
        - XX        #g5
        - XX        #b1
        - XX        #b2
        - XX        #b3
        - XX        #b4
        - XX        #b5

Configuration variables:

  • data_pins (Required) A list of pins used for the databus. Specified in 3 groups:

    • red: (Required, Pin Schema) Exactly 5 pin numbers for the red databits, listed from least to most significant bit.

    • green: (Required, Pin Schema) Exactly 6 pin numbers for the green databits, listed from least to most significant bit.

    • blue: (Required, Pin Schema) Exactly 5 pin numbers for the blue databits, listed from least to most significant bit.

  • de_pin (Required, Pin Schema): The DE pin

  • pclk_pin (Required, Pin Schema): The PCLK pin.

  • hsync_pin (Required, Pin Schema): The Horizontal sync pin.

  • vsync_pin (Required, Pin Schema): The Vertical sync pin.

  • reset_pin (Optional, Pin Schema): The RESET pin.

  • hsync_pulse_width (Optional, int): The horizontal sync pulse width.

  • hsync_front_porch (Optional, int): The horizontal front porch length.

  • hsync_back_porch (Optional, int): The horizontal back porch length.

  • vsync_pulse_width (Optional, int): The vertical sync pulse width.

  • vsync_front_porch (Optional, int): The vertical front porch length.

  • vsync_back_porch (Optional, int): The vertical back porch length.

  • update_interval (Optional, Time): The interval to re-draw the screen. Defaults to 5s.

  • auto_clear_enabled (Optional, boolean): Whether to automatically clear the display in each loop (‘’true’’, default), or to keep the existing display content (must overwrite explicitly, e.g., only on data change).

  • pages (Optional, list): Show pages instead of a single lambda. See Display Pages.

  • id (Optional, ID): Manually specify the ID used for code generation.

  • color_order (Optional): Should be one of bgr (default) or rgb.

  • dimensions (Required): Dimensions of the screen, specified either as width x height (e.g 320x240) or with separate config keys.
    • height (Required, int): Specifies height of display in pixels.

    • width (Required, int): Specifies width of display.

    • offset_width (Optional, int): Specify an offset for the x-direction of the display, typically used when an LCD is smaller than the maximum supported by the driver chip. Default is 0

    • offset_height (Optional, int): Specify an offset for the y-direction of the display. Default is 0.

  • pclk_frequency (Optional): Set the pixel clock speed. Default is 16MHz.

  • pclk_inverted (Optional bool): If the pclk is active negative (default is True)

  • invert_colors (Optional): With this boolean option you can invert the display colors. Note some of the displays have this option set automatically to true and can’t be changed.

  • rotation (Optional): Rotate the display presentation in software. Choose one of , 90°, 180°, or 270°.

  • lambda (Optional, lambda): The lambda to use for rendering the content on the display. See Display Rendering Engine for more information.

The horizontal and vertical pulse_width, front_porch and back_porch values are optional, but may require changing for a specific display. Refer to the manufacturer’s sample code for suitable values. These specify timing requirements for the display.

Example configurations

Waveshare ESP32-S3 Touch 4.3

  - platform: rpi_dpi_rgb
    auto_clear_enabled: false
    color_order: RGB
    pclk_frequency: 16MHz
      width: 800
      height: 480
      number: 5
      number: 46
      ignore_strapping_warning: true
      number: 3
      ignore_strapping_warning: true
    pclk_pin: 7
    hsync_back_porch: 30
    hsync_front_porch: 210
    hsync_pulse_width: 30
    vsync_back_porch: 4
    vsync_front_porch: 4
    vsync_pulse_width: 4
        - 1         #r3
        - 2         #r4
        - 42        #r5
        - 41        #r6
        - 40        #r7
        - 14        #b3
        - 38        #b4
        - 18        #b5
        - 17        #b6
        - 10        #b7
        - 39        #g2
        - 0         #g3
        - 45        #g4
        - 48        #g5
        - 47        #g6
        - 21        #g7

Makerfabs 4.3” 800x480 display

  - platform: rpi_dpi_rgb
    update_interval: never
    auto_clear_enabled: false
    id: rpi_display
    color_order: RGB
    rotation: 90
      width: 800
      height: 480
      number: 40
    hsync_pin: 39
    vsync_pin: 41
    pclk_pin: 42
        - 45        #r1
        - 48        #r2
        - 47        #r3
        - 21        #r4
        - 14        #r5
        - 5         #g0
        - 6         #g1
        - 7         #g2
        - 15        #g3
        - 16        #g4
        - 4         #g5
        - 8         #b1
        - 3         #b2
        - 46        #b3
        - 9         #b4
        - 1         #b5

See Also