I am working on an ESP32-based (NodeMCU-32S) vehicle gauge system that will display information such as various temperatures, boost pressure, oil pressure, etc. The display I am using is a 2.4" SPI touch display based on ILI9341.
My question for the experienced folks is what is the best graphics library(ies) to use for my project based on the following needs / wants:
ease of use for displaying (drawing) and updating text on the screen
font support
speed - measurements will be updated 5 times per second and I would like the display to be flicker-free
menu support - not drop down, just rectangular buttons, but would be nice if it had existing menu icons, e.g. arrows
I am currently using Adafruit_GFX.h with Adafruit_ILI9341.h, and a 8g2_for_Adafruit_GFX.h wrapper. It seems less than ideal for my needs, particularly given that:
for screen clearing, I am using display.fillScreen(0x0000), which is very slow
for displaying text, I am using u8g2_for_adafruit_gfx.print(string), but that sometimes results in overlapping text when the length of the string being displayed changes.
I personally would not mix 2 graphic/text libraries. One library update could put you into fix-it mode.
A mentioned by @jremington, take pencil and graph paper and map-out screen areas: only clear what is necessary.
Not much real-estate screen area for automotive use; imaging driving down the road at 70MPH and reaching over with your stylus (or finger) to get a different screen view. If you are going to do something like this in a car, boat, plane go ahead and invest the money to get quality components.
The above being said, I completed the code for a Rotax engine monitor on an Europa Experimental about a year before COVID. Sensors are hosted by a Mega with JSON serial output to BT which is collected by a PC or Raspberry Pi which runs NodeRed for large graphics. With do much screen, tiny little touch displays are not needed. Serial output directly into NodeRED - Arduino for STM32 (stm32duino.com)
This is for offroad use, is not intended to be controlled on the fly, and I want a standalone always on monitor, not output to the deck or a tablet. I could do the latter, but I don't always take it with me, and this is the info I like to have all of the time. It will show 6 measurements: outside temp and altimeter (smaller font, top screen), boost, EGT, coolant temp, and trans temp (2x2 grid). The only "on the fly" control will be a single prolonged tap to invert the color scheme. The size is perfect as it will replace my 3-in-1 52mm gauge, but will show the info I need much more clearly.
EVE3 and EVE4-compliant displays have lots of widgets (there's a built in graphics engine on the display that does the heavy lifting) and are not too difficult to use. I've used them in industrial projects are they are pretty good quality.
I've found that if you want anything other than really basic graphics and don't want to spend a lot of time doing it, you're better off using a Raspberry Pi and an HDMI display. Then you can take advantage of all the screen handling built into the OS.