Skip to content
Closed
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
4fd54f2
Add info for multiplexing to sml.rst
johnzielke Jul 4, 2025
ca0bb8e
Nitpicks and indentation
johnzielke Jul 8, 2025
57509de
Make example more concise
johnzielke Jul 8, 2025
a393f22
Fix errors
johnzielke Jul 8, 2025
212952d
Merge branch 'current' into patch-1
johnzielke Jul 8, 2025
72a34f8
Bump version to 2025.9.0-dev
jesserockz Aug 20, 2025
4e90d17
Merge branch 'current' into next
jesserockz Aug 21, 2025
4d42bac
Add-schema_docs-for-md (#5281)
glmnet Aug 23, 2025
66814b9
Merge branch 'current' into next
jesserockz Aug 24, 2025
c4f2d49
Add See Also links. (#5283)
glmnet Aug 24, 2025
4f3fc15
[mipi_spi] Add doc line for jc3636w518v2 (#5279)
clydebarrow Aug 24, 2025
97e889f
Merge branch 'current' into next
jesserockz Aug 25, 2025
e31b820
Merge branch 'current' into next
jesserockz Aug 25, 2025
ceed9d0
Merge branch 'current' into next
jesserockz Aug 28, 2025
bcb4069
Merge branch 'current' into next
jesserockz Aug 29, 2025
6056fdf
[mapping] Update docs (#5194)
clydebarrow Aug 29, 2025
cb43850
[lvgl] Document change in spinbox config (#5263)
clydebarrow Aug 29, 2025
e7d5b6e
[sen5x] Update Nox defaults and lint page (#5176)
Fmstrat Aug 29, 2025
d2ddde3
Add LVGL Hello image (#5307)
clydebarrow Aug 29, 2025
caea2a1
Initial documentation for new camera encoder component (md) (#5314)
DT-art1 Aug 31, 2025
da1f6ce
[sntp]: document change in behaviour for ESP8266 and ESP32 (#5276)
kaechele Aug 31, 2025
489fe34
[nrf52] dfu (#5117)
tomaszduda23 Aug 31, 2025
83a5bc6
[schema-doc] Update parsing md for better doc extraction (#5325)
glmnet Sep 3, 2025
9dbf889
[bluetooth_proxy] Update docs for active connections default change t…
bdraco Sep 3, 2025
0b28769
Merge branch 'current' into next
jesserockz Sep 3, 2025
a47690b
Merge branch 'current' into next
jesserockz Sep 4, 2025
79f7728
[mipi_rgb] Document new display driver (#5260)
clydebarrow Sep 8, 2025
ce2797b
Merge remote-tracking branch 'upstream/next' into patch-1
johnzielke Sep 8, 2025
7adbffe
Format
johnzielke Sep 8, 2025
7663096
Format
johnzielke Sep 8, 2025
8f6dc5a
Format
johnzielke Sep 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions content/components/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -722,6 +722,7 @@ Often known as "tag" or "card" readers within the community.
{{< imgtable >}}
"Addressable Light","components/display/addressable_light","addressable_light.jpg"
"MIPI DSI Displays","components/display/mipi_dsi","tab5.jpg"
"MIPI RGB Displays","components/display/mipi_rgb","indicator.jpg"
"MIPI SPI Displays","components/display/mipi_spi","t4-s3.jpg"
"ILI9xxx","components/display/ili9xxx","ili9341.jpg"
"ILI9341","components/display/ili9xxx","ili9341.svg"
Expand Down Expand Up @@ -1038,6 +1039,7 @@ ESPHome to cellular networks. **Does not encompass Wi-Fi.**
## Miscellaneous Components

{{< imgtable >}}
"Camera Encoder","components/camera/camera_encoder","camera.svg","dark-invert"
"ESP32 Camera","components/esp32_camera","camera.svg","dark-invert"
"Exposure Notifications","components/exposure_notifications","exposure_notifications.png",""
"GPS","components/gps","crosshairs-gps.svg","dark-invert"
Expand Down
5 changes: 4 additions & 1 deletion content/components/bluetooth_proxy.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,12 @@ please search for it in the [Home Assistant Integrations](https://www.home-assis

```yaml
bluetooth_proxy:
# Active connections are now enabled by default
# To disable active connections (previous default behavior), use:
# active: false
```

- **active** (*Optional*, boolean): Enables proxying active connections. Defaults to `false`.
- **active** (*Optional*, boolean): Enables proxying active connections. Defaults to `true`.
- **cache_services** (*Optional*, boolean): Enables caching GATT services in NVS flash storage which significantly speeds up active connections. Defaults to `true` when using the ESP-IDF framework.
- **connection_slots** (*Optional*, int): The maximum number of BLE connection slots to use.
Each configured slot consumes ~1KB of RAM. This can only be adjusted when using
Expand Down
50 changes: 50 additions & 0 deletions content/components/camera/camera_encoder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
description: "Instructions for setting up the camera encoder component in ESPHome."
title: "Camera Encoder"
params:
seo:
description: Instructions for setting up the camera encoder component in ESPHome.
image: camera.svg
---

The ``camera_encoder`` component provides image compression support for software-based cameras or cameras without
internal compression. It allows raw camera frames to be compressed into a format suitable for transmission to API
clients, such as Home Assistant, which expect JPEG-compressed images.

It supports different encoder implementations, such as a ESP32 Camera software JPEG encoder that can be configured with
options like image quality and incremental encoding. These settings make it possible to balance image
quality and performance depending on the use case.

{{< note >}}
The default software JPEG encoder enables devices like the ESP32-S3 to stream images.
It is primarily intended for smallar images due to limited processing power and memory,
and supports only devices from the ESP32 family.
{{< /note >}}

```yaml
# Example configuration entry
camera_encoder:
```

## Configuration variables

- **type** (*Optional*): ``esp32_camera``

## esp32_camera Options

- **quality** (*Optional*, int): Sets JPEG compression quality.
Valid values range from ``1`` (lowest quality, highest compression) to ``100`` (best quality, least compression). Defaults: ``80``.

- **buffer_size** (*Optional*, int): Initial size of the output buffer in bytes, used to store the JPEG-encoded image data.
- Minimum: 1024 bytes
- Maximum: 2097152 bytes (2 MB), sufficient for ESP32-S3 and ESP32-P4
- Default: ``4096``.

- **buffer_expand_size** (*Optional*, int): Number of bytes to expand the output buffer if it is too small to hold the JPEG-encoded image. A value of ``0`` disables expansion.
- Maximum: 2097152 bytes (2 MB), sufficient for ESP32-S3 and ESP32-P4
- Default: ``1024``.

## See Also

- {{< apiref "camera/encoder.h" "camera/encoder.h" >}}
- {{< apiref "camera_encoder/esp32_camera_jpeg_encoder.h" "camera_encoder/esp32_camera_jpeg_encoder.h" >}}
18 changes: 12 additions & 6 deletions content/components/display/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,18 @@ params:
image: folder-open.svg
---

The `display` component houses ESPHome's powerful rendering and display
engine. Fundamentally, there are these types of displays:
The `display` component houses ESPHome's graphical rendering and display
engine. It caters for a wide range of different display types, from simple character displays to
graphical displays with fully addressable pixels.

- Character displays like {{< docref "max7219" "7-Segment displays" >}} or
{{< docref "lcd_display" "LCD displays" >}}.

- Serial displays like {{< docref "nextion/" >}} that have their own processors for graphics rendering.
- Graphical displays with fully addressable pixels, like {{< docref "waveshare_epaper" "E-Paper" >}},
{{< docref "ssd1306" "OLED" >}} or {{< docref "ili9xxx" "TFT" >}} displays.
- Graphical displays with fully addressable pixels, such as
{{< docref "mipi_spi" "SPI interfaced LCDs" >}},
{{< docref "waveshare_epaper" "E-Paper" >}},
and {{< docref "ssd1306" "OLED" >}}.

For graphical displays, which offer the greatest flexibility, there are two options for displaying content:

Expand Down Expand Up @@ -587,7 +590,7 @@ display:
- **from** (*Optional*, [ID](#config-id)): A page id. If set the automation is only triggered if changing from this page. Defaults to all pages.
- **to** (*Optional*, [ID](#config-id)): A page id. If set the automation is only triggered if changing to this page. Defaults to all pages.

Additionally the old page will be given as the variable `from` and the new one as the variable `to`.
Additionally, the old page will be given as the variable `from` and the new one as the variable `to`.

### Troubleshooting

Expand Down Expand Up @@ -619,7 +622,10 @@ For displays in 8 bit mode you will see distinct color blocks rather than a smoo
### See Also

- {{< apiref "display/display_buffer.h" "display/display_buffer.h" >}}
- {{< docref "/components/lvgl/index" "LVGL" >}}
- {{< docref "/components/lvgl/index" >}}
- {{< docref "/components/display/mipi_spi" >}}
- {{< docref "/components/display/mipi_rgb" >}}
- {{< docref "/components/display/mipi_dsi" >}}
- [Fonts](#display-fonts)
- [Graph Component](#display-graphs)
- [QR Code Component](#display-qrcode)
Expand Down
2 changes: 1 addition & 1 deletion content/components/display/ili9xxx.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ beyond the basic SPI connections, and a reasonable amount of RAM, it is not well
{{< warning >}}
This component has been made redundant since this class of displays is now supported by the [MIPI SPI Display Driver](#mipi_spi).
This component may be removed in a future release.

{{< /warning >}}

{{< note >}}
PSRAM is not automatically enabled on the ESP32 (this changed with the 2025.2 release.) If PSRAM is available, you
should enable it with the {{< docref "/components/psram" "PSRAM configuration" >}}.
Expand Down
207 changes: 207 additions & 0 deletions content/components/display/mipi_rgb.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
---
description: "Instructions for setting up 16 bit \"RGB\" parallel displays"
title: "MIPI RGB Display Driver"
params:
seo:
description: Instructions for setting up 16 bit "RGB" parallel displays
image: indicator.jpg
---

## Types of Display

This display driver supports displays with 16 bit parallel interfaces, often referred to as "RGB".
Two classes of display fall under this category, the first are those that only have the RGB interface and require
no special configuration of the driver chip. The second are those that have both the RGB interface and an SPI interface
which is used to configure the driver chip.

## Supported boards and driver chips

The driver supports a number of display driver chips, and can be configured for custom displays. As well as support for
driver chips, there are also specific configurations for several ESP32 boards with integrated displays. For those boards
the predefined configuration will set the correct pins and dimensions for the display.

For custom displays, the driver can be configured with the correct pins and dimensions, and the driver chip can be
specified, or a custom init sequence can be provided.

### Driver chips

| Driver Chip | Typical Dimensions |
| ----------- | ------------------ |
| ST7701S | 480x480 |
| RPI | varies |

The `RPI` driver chip represents displays without an SPI interface, so no init sequence is required.

### Supported integrated display boards

These boards have completely pre-filled configurations for the display driver, so the only required configuration
option is `model`.

| Board | Driver Chip | Manufacturer | Product link |
| ---------------------------- | ----------- | ------------ | ---------------------------------------------------------------- |
| GUITION-4848S040 | ST7701s | Guition | <https://devices.esphome.io/devices/Guition-ESP32-S3-4848S040> |
| T-PANEL-S3 | ST7701s | Lilygo | <https://lilygo.cc/products/t-panel-s3> |
| T-RGB-2.1 | ST7701s | Lilygo | <https://lilygo.cc/products/t-rgb> |
| T-RGB-2.8 | ST7701s | Lilygo | <https://lilygo.cc/products/t-rgb> |
| SEEED-INDICATOR-D1 | ST7701s | Seeed Studio | <https://www.seeedstudio.com/SenseCAP-Indicator-D1L-p-5646.html> |
| ESP32-S3-TOUCH-LCD-4.3 | RPI | Waveshare | <https://www.waveshare.com/esp32-s3-touch-lcd-4.3.htm> |
| ESP32-S3-TOUCH-LCD-7-800X480 | RPI | Waveshare | <https://www.waveshare.com/esp32-s3-touch-lcd-7.htm> |
| WAVESHARE-4-480x480 | RPI | Waveshare | <https://www.waveshare.com/esp32-s3-touch-lcd-4.htm> |

## Usage

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.

{{< img src="indicator.jpg" alt="Image" caption="Sensecap Indicator display" width="75.0%" class="align-center" >}}

```yaml
# Example minimal configuration entry
display:
- platform: mipi_rgb
model: WAVESHARE-4-480x480
id: my_display
```

## Configuration variables

- **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 `0°`, `90°`, `180°`, or `270°`.
This option cannot be used with `transform`.
- **transform** (*Optional*): Transform the display presentation using hardware. All defaults are `false`.
This option cannot be used with `rotation`.

- **mirror_x** (*Optional*, boolean): If true, mirror the x-axis.
- **mirror_y** (*Optional*, boolean): If true, mirror the y-axis.
**Note:** To rotate the display in hardware by 180 degrees set both `mirror_x` and `mirror_y` to `true`.

- **update_interval** (*Optional*, [Time](#config-time)): The interval to re-draw the screen. Defaults to `5s`.
- **auto_clear_enabled** (*Optional*, boolean): If the display should be cleared before each update. Defaults to `true`
if a lambda or pages are configured, false otherwise.
- **lambda** (*Optional*, [lambda](#config-lambda)): The lambda to use for rendering the content on the display.
See [Display Rendering Engine](#display-engine) for more information.
- **pages** (*Optional*, list): Show pages instead of a single lambda. See [Display Pages](#display-pages).
- **id** (*Optional*, [ID](#config-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.

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

- **red** (**Required**, [Pin Schema](#config-pin_schema)): Exactly 5 pins for the red databits, listed from least
to most significant bit.
- **green** (**Required**, [Pin Schema](#config-pin_schema)): Exactly 6 pins for the green databits, listed from
least to most significant bit.
- **blue** (**Required**, [Pin Schema](#config-pin_schema)): Exactly 5 pins for the blue databits, listed from
least to most significant bit.

- **de_pin** (**Required**, [Pin Schema](#config-pin_schema)): The DE pin.
- **pclk_pin** (**Required**, [Pin Schema](#config-pin_schema)): The PCLK pin.
- **hsync_pin** (**Required**, [Pin Schema](#config-pin_schema)): The Horizontal sync pin.
- **vsync_pin** (**Required**, [Pin Schema](#config-pin_schema)): The Vertical sync pin.
- **reset_pin** (*Optional*, [Pin Schema](#config-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.
- **pclk_frequency** (*Optional*): Set the pixel clock speed. Default is 8MHz.
- **pclk_inverted** (*Optional*, bool): If the pclk is active negative (default is True)

The horizontal and vertical `pulse_width` , `front_porch` and `back_porch` values are optional, but will
likely require changing from the default values for a specific display. Refer to the manufacturer's sample code
for suitable values. These specify timing requirements for the display.

## Additional Configuration for non-RPI displays

Displays needing a custom init sequence require an SPI bus to be configured, plus these options:

- **dc_pin** (*Optional*, [Pin Schema](#config-pin_schema)): The DC pin.
- **data_rate** (*Optional*): Set the data rate of the SPI interface to the display. One of `80MHz` , `40MHz` ,
`20MHz` , `10MHz` , `5MHz` , `2MHz` , `1MHz` (default), `200kHz` , `75kHz` or `1kHz` .
- **spi_mode** (*Optional*): Set the mode for the SPI interface to the display. Default is `MODE0` but some displays
require `MODE3` .
- **spi_id** (*Optional*, [ID](#config-id)): The ID of the SPI interface to use - may be omitted if only one SPI bus
is configured.
- **init_sequence** (*Optional*, A list of byte arrays): Specifies the init sequence for the display. Predefined boards
have a default init sequence, which can be overridden. A custom board can specify the init sequence using this
variable. RPI displays should provide an empty sequence in which case the SPI bus is not required.

The `init_sequence` requires a list of elements, one of which may be a single integer selecting a canned init
sequence (the default and currently the only sequence is 1), the remainder must be byte arrays providing additional
init commands, each consisting of a command byte followed by zero or more data bytes.

A delay may be specified with `delay <N>ms`

These will be collected and sent to the display via SPI during initialisation. The SPI bus need not be implemented
in hardware (i.e. it may use `interface: software`) and it will be released after initialisation, before the RGB
driver is configured. This caters for boards that use the SPI bus pins as RGB pins.

## Example configurations

This is an example of a full custom configuration.

```yaml
display:
- platform: mipi_rgb
update_interval: never
spi_mode: MODE3
color_order: RGB
dimensions:
width: 480
height: 480
invert_colors: true
transform:
mirror_x: true
mirror_y: true
cs_pin:
pca9554: p_c_a
number: 4
reset_pin:
pca9554: p_c_a
number: 5
de_pin: 18
hsync_pin: 16
vsync_pin: 17
pclk_pin: 21
init_sequence:
- 1 # select canned init sequence number 1
- delay 5ms
- [ 0xE0, 0x1F ] # Set sunlight readable enhancement
data_pins:
red:
- 4 #r1
- 3 #r2
- 2 #r3
- 1 #r4
- 0 #r5
green:
- 10 #g0
- 9 #g1
- 8 #g2
- 7 #g3
- 6 #g4
- 5 #g5
blue:
- 15 #b1
- 14 #b2
- 13 #b3
- 12 #b4
- 11 #b5
lambda: |-
it.fill(COLOR_BLACK);
it.print(0, 0, id(my_font), id(my_red), TextAlign::TOP_LEFT, "Hello World!");
```

## See Also

- {{< docref "index/" >}}
- {{< apiref "mipi_rgb/mipi_rgb.h" "mipi_rgb/mipi_rgb.h" >}}
Loading