Drivers for LittlevGL (LVGL)

The LittlevGL GUI library is a great way to add polished user interfaces to embedded systems. It can run on fairly simple 32-bit micro-controllers and has a hardware abstraction layer allowing it to operate with a variety of input and output devices. The project supported the ubiquitous ILI9341 display controller used for TFT LCD panels up to about 320x240 pixel resolution as well as a few resistive and capacitive touchscreen controllers. I think that 480x320 pixels is a good resolution for smaller screens and the HX8357 TFT controller and STMPE610 resistive touchscreen controller are commonly found on displays of this resolution.

LVGL is open source. I wrote and contributed a pair of drivers for these devices. The official LVGL repository containing these drivers is here. My original code is here.

I also wondered if it would be possible to simulate a frame buffer in javascript running in a browser window since many micro-controller like the ESP32 have network interfaces built-in. That lead to the creation of a web-socket driver for LVGL supporting 8-bit, 16-bit and 24-bit/pixel displays with input in a web browser. Especially at higher bits/pixel and with heavy images this driver isn't super fast but I was surprised how well it works for basic GUI operation. With LVGL's support of multiple screens it's an easy way to extend a device with a local LCD to have the same GUI on a remote device like a cell phone.

The github code is here.

There is also a more detailed write-up of the project on hackaday.io.
Stacks Image 10
Stacks Image 12
Stacks Image 14
Stacks Image 16

Same GUI interface in two web browsers, with actions echoed to both, from that little ESP32 module sitting on the keyboard of my laptop.