I’m using a ILI9341 touch screen with an ESP32 (ESP-WROOM-32). Everything works, but I get a flicker with each refresh of the screen (screen flashes brighter, or at least that’s how it seems). Are there any tricks to avoid/reduce flicker?
Here’s my minimal config to duplicate the problem:
spi:
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
display:
- platform: ili9341
model: TFT 2.4
cs_pin: 5
dc_pin: 27
reset_pin: 17
auto_clear_enabled: false
update_interval: 1s
id: my_display
lambda: |-
it.filled_rectangle(0, 0, it.get_width() - 1, it.get_height() - 1, Color(242, 140, 38));
This fills the screen with a solid color every second. The auto_clear_enabled: false
option makes it so it doesn’t clear the screen before re-drawing, so it seems like this shouldn’t cause any noticeable flicker…
I’ve tried changing the lambda so it doesn’t redraw the full screen each time:
lambda: |-
static bool first = true;
if (first) //Fill the full screen on the first draw
{
it.filled_rectangle(0, 0, it.get_width() - 1, it.get_height() - 1, Color(242, 140, 38));
first = false;
}
it.filled_rectangle(0, 0, 100, 100, Color(122, 122, 122)); //Draw a small rectangle
But this still causes the whole screen to flicker on each draw.
I have the LED pin on the ILI9341 connected to 3.3v. I’ve also tried connecting it to a GPIO pin and setting the led_pin
option, but that doesn’t seem to have any effect.
Has anyone else noticed flickering when working with a display component? If so, were you able to find any way to improve it?