Good news! Getting the ESP32-S3 and a parallel-connected LCD to play nice was much less trouble than anticipated. Super smooth!
Espressif’s ESP-IDF framework includes an API and examples for working with a few different displays. The item we had on-hand — a 2.8″ TFT with ILI3441 driver, same as used in the PyPortal — was not among the supported devices. But it was a simple matter to start with their ST7789 display code and adapt this to ILI9341. They all have pretty similar register sets, it’s mostly the display hardware initialization that changes. Working through the pull request process now to get this merged.
Not that everything worked perfect on the first try. For some reason we were seeing color fringing and some artifact pixels along motion paths…
Fix was to not use the byte-swap setting of the LCD API, and instead configure LittlevGL (which is rendering the graphics) to handle endian differences in software. This should make no difference — same end result, bytes swapped — but hardware, especially new hardware, is finicky. Look! No more artifacts:
18- and 24-bit color graphics were mentioned last week as one possible incentive for using the S3’s LCD peripheral. ST7789 and ILI9341 support 18-bit color at most…but looking at the processing, RAM and bandwidth overhead this would incur, it really doesn’t seem worthwhile for just 2 extra color bits; 16-bit suits these displays really well. NT35510 displays (which we don’t currently have on-hand) can support 24-bit color, and the bandwidth overhead could be compensated for by using a 16-bit wide interface. The ESP-IDF code doesn’t yet support 24-bit color mode, it’s very 16-bit-centric across all displays, but it’s easy to see where such changes would be needed, if and when such a capability is required.
Stop breadboarding and soldering – start making immediately! Adafruit’s Circuit Playground is jam-packed with LEDs, sensors, buttons, alligator clip pads and more. Build projects with Circuit Playground in a few minutes with the drag-and-drop MakeCode programming site, learn computer science using the CS Discoveries class on code.org, jump into CircuitPython to learn Python and hardware together, TinyGO, or even use the Arduino IDE. Circuit Playground Express is the newest and best Circuit Playground board, with support for CircuitPython, MakeCode, and Arduino. It has a powerful processor, 10 NeoPixels, mini speaker, InfraRed receive and transmit, two buttons, a switch, 14 alligator clip pads, and lots of sensors: capacitive touch, IR proximity, temperature, light, motion and sound. A whole wide world of electronics and coding is waiting for you, and it fits in the palm of your hand.