From 707614f1cf98d200ade8f224cc6b4b67c64efdfe Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 13 Mar 2024 10:15:00 +1100 Subject: [PATCH] Document quad SPI AMOLED displays (#3677) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../display/images/t-display-amoled.jpg | Bin 0 -> 20002 bytes components/display/images/t4-s3.jpg | Bin 0 -> 27582 bytes components/display/qspi_amoled.rst | 185 ++++++++++++++++++ index.rst | 1 + 4 files changed, 186 insertions(+) create mode 100644 components/display/images/t-display-amoled.jpg create mode 100644 components/display/images/t4-s3.jpg create mode 100644 components/display/qspi_amoled.rst diff --git a/components/display/images/t-display-amoled.jpg b/components/display/images/t-display-amoled.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5ac405591d1b872e3140433609a3b9dc4b19330 GIT binary patch literal 20002 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�-6}t>yYT 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 literal 0 HcmV?d00001 diff --git a/components/display/qspi_amoled.rst b/components/display/qspi_amoled.rst new file mode 100644 index 000000000..1c75519ce --- /dev/null +++ b/components/display/qspi_amoled.rst @@ -0,0 +1,185 @@ +Quad SPI AMOLED Displays +======================== + +.. seo:: + :description: Instructions for setting up quad SPI AMOLED displays. + :image: t4-s3.jpg + +.. _qspi_amoled: + +Models +------ +This display driver supports AMOLED displays with quad SPI interfaces. + +This driver has been tested with the following displays: + + - Lilygo T4-S3 + - Lilygo T-Display S3 AMOLED + +Usage +----- +This component requires an ESP32 and the use of +ESP-IDF. PSRAM is a requirement due to the size of the display buffer. A :ref:`quad SPI bus ` interface must be configured. + +.. figure:: images/t4-s3.jpg + :align: center + :width: 75.0% + + Lilygo T4-S3 + +.. figure:: images/t-display-amoled.jpg + :align: center + :width: 75.0% + + Lilygo T-Display S3 AMOLED + + +.. code-block:: yaml + + # Example minimal configuration entry + + display: + - platform: qspi_amoled + model: RM690B0 + data_rate: 80MHz + spi_mode: mode0 + dimensions: + width: 450 + height: 600 + offset_width: 16 + color_order: rgb + invert_colors: false + brightness: 255 + cs_pin: 11 + reset_pin: 13 + enable_pin: 9 + + +Configuration variables: +************************ + +- **model** (**Required**): One of ``RM67162`` or ``RM690B0``. +- **cs_pin** (**Required**, :ref:`Pin Schema `): The chip select pin. +- **reset_pin** (*Optional*, :ref:`Pin Schema `): The RESET pin. +- **enable_pin** (*Optional*, :ref:`Pin Schema `): The display enable pin. +- **brightness** (*Optional*, int): A brightness value in the range 0-255 +- **update_interval** (*Optional*, :ref:`config-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 :ref:`display-pages`. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **color_order** (*Optional*): Should be one of ``rgb`` (default) or ``bgr``. +- **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 a display 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. + +- **rotation** (*Optional*): Rotate the display presentation in software. Choose one of ``0°``, ``90°``, ``180°``, or ``270°``. +- **transform** (*Optional*): Transform the display presentation using hardware. All defaults are ``false``. This option cannot be used with ``rotation``. + + - **swap_xy** (*Optional*, boolean): If true, exchange the x and y axes. + - **mirror_x** (*Optional*, boolean): If true, mirror the x axis. + - **mirror_y** (*Optional*, boolean): If true, mirror the y axis. +- **data_rate** (*Optional*): Set the data rate of the SPI interface to the display. One of ``80MHz``, ``40MHz``, ``20MHz``, ``10MHz`` (default), ``5MHz``, ``2MHz`` or ``1MHz``. +- **spi_mode** (*Optional*): Set the mode for the SPI interface to the display. Default is ``MODE0``. +- **invert_colors** (*Optional*): With this boolean option you can invert the display colors. +- **lambda** (*Optional*, :ref:`lambda `): The lambda to use for rendering the content on the display. + See :ref:`display-engine` for more information. + + + +Example configurations +---------------------- + + +Lilygo T4-S3 +************ + +.. code-block:: yaml + + spi: + id: quad_spi + type: quad + clk_pin: 15 + data_pins: [14, 10, 16, 12] + + i2c: + sda: 6 + scl: 7 + + touchscreen: + - platform: cst226 + id: my_touchscreen + interrupt_pin: 8 + reset_pin: 17 + + display: + - platform: qspi_amoled + model: RM690B0 + data_rate: 80MHz + spi_mode: mode0 + dimensions: + width: 450 + height: 600 + offset_width: 16 + color_order: rgb + invert_colors: false + brightness: 255 + cs_pin: 11 + reset_pin: 13 + enable_pin: 9 + update_interval: never + auto_clear_enabled: false + + psram: + mode: octal + speed: 80MHz + +Lilygo T-Display S3 AMOLED +************************** + +.. code-block:: yaml + + spi: + id: quad_spi + clk_pin: 47 + data_pins: + - 18 + - 7 + - 48 + - 5 + + i2c: + sda: 3 + scl: 2 + + touchscreen: + - platform: cst816 + id: my_touchscreen + interrupt_pin: + number: 21 + + display: + - platform: qspi_amoled + model: RM67162 + id: main_lcd + dimensions: + height: 240 + width: 536 + transform: + mirror_x: true + swap_xy: true + color_order: rgb + brightness: 255 + cs_pin: 6 + reset_pin: 17 + enable_pin: 38 + + +See Also +-------- + +- :doc:`index` +- :apiref:`qspi_amoled/qspi_amoled.h` +- :ghedit:`Edit` diff --git a/index.rst b/index.rst index 51363f318..64acb8266 100644 --- a/index.rst +++ b/index.rst @@ -676,6 +676,7 @@ Display Components MAX7219 Dot Matrix, components/display/max7219digit, max7219digit.jpg Nextion, components/display/nextion, nextion.jpg PCD8544 (Nokia 5110/ 3310), components/display/pcd8544, pcd8544.jpg + Quad SPI AMOLED, components/display/qspi_amoled, t4-s3.jpg PVVX MiThermometer, components/display/pvvx_mithermometer, ../components/sensor/images/xiaomi_lywsd03mmc.jpg RPI_DPI_RGB, components/display/rpi_dpi_rgb, waveshare_touch-s3.jpg SSD1306, components/display/ssd1306, ssd1306.jpg