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.
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.




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