Skip to content

Inkplate E-Paper Displays

The Inkplate family consists of Wi-Fi enabled ESP32-based e-paper displays by Soldered Electronics. Each board integrates the e-paper panel, an ESP32 module, a TPS65186 PMIC, and a GPIO I/O expander into a single ready-to-use unit. For hardware details and board-specific documentation, see the Inkplate documentation.

Inkplate 6
Inkplate 6
Model keyProductResolution
inkplate4Inkplate 4 TEMPERA600×600
inkplate5v1Inkplate 5 v1960×540
inkplate5v2Inkplate 5 v21280×720
inkplate6v1Inkplate 6 v1800×600
inkplate6v2Inkplate 6 v2+800×600
inkplate6plusInkplate 6 PLUS1024×758
inkplate6flickInkplate 6 FLICK1024×758
inkplate10Inkplate 101200×825
i2c:
pca6416a:
- id: pca6416a_hub
address: 0x20
display:
- platform: inkplate
model: inkplate6v2
pca6416a_id: pca6416a_hub
update_interval: 60s
lambda: |-
it.print(0, 0, id(my_font), "Hello World!");

NOTE

Inkplate boards require PSRAM for framebuffer allocation. Add psram: to your configuration.

WARNING

Partial updates (full_update_every > 1) are not supported in grayscale mode and are ignored.

  • model (Required, enum): The Inkplate board model. One of:

    • inkplate4
    • inkplate5v1
    • inkplate5v2
    • inkplate6v1
    • inkplate6v2
    • inkplate6plus
    • inkplate6flick
    • inkplate10
  • pca6416a_id (Optional, ID): ID of the PCA6416A I/O expander. Required for all models except inkplate6v1.

  • mcp23017_id (Optional, ID): ID of the MCP23017 I/O expander. Required for inkplate6v1. Exactly one of pca6416a_id or mcp23017_id must be specified.

  • grayscale_mode (Optional, boolean): Enable 3-bit grayscale rendering. Defaults to false.

  • full_update_every (Optional, int): Perform a full refresh every N updates. Set to 1 to always do a full refresh (partial updating disabled). Set to a higher value to enable partial updates with a periodic full refresh. Defaults to 1.

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

  • lambda (Optional, lambda): The lambda to use for rendering. See Display Rendering Engine.

  • update_interval (Optional, Time): Interval between refreshes. Minimum 5s. Defaults to 1min when lambda or pages is configured.

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

The component communicates with the onboard TPS65186 PMIC over I²C. The i2c: bus must be configured. See I²C Bus.

  • address (Optional, int): I²C address of the TPS65186 PMIC. Defaults to 0x48.
  • i2c_id (Optional, ID): ID of the I²C bus to use.
i2c:
pca6416a:
- id: pca6416a_hub
address: 0x20
display:
- platform: inkplate
model: inkplate4
pca6416a_id: pca6416a_hub
update_interval: 60s
i2c:
pca6416a:
- id: pca6416a_hub
address: 0x20
display:
- platform: inkplate
model: inkplate5v1
pca6416a_id: pca6416a_hub
update_interval: 60s
i2c:
pca6416a:
- id: pca6416a_hub
address: 0x20
display:
- platform: inkplate
model: inkplate5v2
pca6416a_id: pca6416a_hub
update_interval: 60s

The original Inkplate 6 uses an MCP23017 I/O expander. Use mcp23017_id instead of pca6416a_id:

i2c:
mcp23017:
- id: mcp23017_hub
address: 0x20
display:
- platform: inkplate
model: inkplate6v1
mcp23017_id: mcp23017_hub
update_interval: 60s
i2c:
pca6416a:
- id: pca6416a_hub
address: 0x20
display:
- platform: inkplate
model: inkplate6v2
pca6416a_id: pca6416a_hub
update_interval: 60s
i2c:
pca6416a:
- id: pca6416a_hub
address: 0x20
display:
- platform: inkplate
model: inkplate6plus
pca6416a_id: pca6416a_hub
update_interval: 60s
i2c:
pca6416a:
- id: pca6416a_hub
address: 0x20
display:
- platform: inkplate
model: inkplate6flick
pca6416a_id: pca6416a_hub
update_interval: 60s

The Inkplate 10 board has two PCA6416A expanders. The display driver only uses the primary expander at address 0x20. The secondary expander at 0x21 can be declared independently to access its additional I/O pins.

i2c:
pca6416a:
- id: pca6416a_hub
address: 0x20
- id: pca6416a_hub2
address: 0x21
display:
- platform: inkplate
model: inkplate10
pca6416a_id: pca6416a_hub
update_interval: 60s

Use lambda to draw on the display. See Display Rendering Engine for the full drawing API.

font:
- file: "gfonts://Roboto"
id: roboto_48
size: 48
display:
- platform: inkplate
model: inkplate6v2
pca6416a_id: pca6416a_hub
update_interval: 60s
lambda: |-
it.fill(COLOR_OFF);
it.print(10, 10, id(roboto_48), COLOR_ON, "Hello World!");
it.rectangle(10, 80, 200, 100);

Enable grayscale_mode to draw with 8 gray levels (3-bit). Use color values from 0x00 (black) to 0xFF (white):

display:
- platform: inkplate
model: inkplate6v2
pca6416a_id: pca6416a_hub
grayscale_mode: true
update_interval: 60s
lambda: |-
it.fill(Color(0xFF, 0xFF, 0xFF));
it.filled_rectangle(0, 0, 100, 100, Color(0x00, 0x00, 0x00));
it.filled_rectangle(100, 0, 100, 100, Color(0x80, 0x80, 0x80));

Set full_update_every to reduce flicker on frequent updates. A full refresh runs every N cycles to clear ghosting.

WARNING

Partial updates only work in black and white mode (grayscale_mode: false). When grayscale is enabled, partial updates are silently ignored and every update is a full refresh.

display:
- platform: inkplate
model: inkplate6v2
pca6416a_id: pca6416a_hub
full_update_every: 10
update_interval: 5s
lambda: |-
it.fill(COLOR_OFF);
it.strftime(400, 300, id(roboto_48), COLOR_ON, TextAlign::CENTER, "%H:%M:%S", id(esptime).now());