LCD, DPI, SPI, HDMI, NTSC/PAL, TFT, OLED, ePaper, etc. this is part of the jargon you will need some appreciation of in order to be able to choose the right display for your project. The first part covered HDMI, DSI and Composite Video. This second part will focus on displays that utilise GPIO and USB as a mean to connect the screen to you Raspberry Pi. Hopefully as we look at the various options some of the jargon will be clearer. We will also venture into some additional considerations and alternative approaches to complete the “picture” (pun intended).
We are going to look at:
- What’s to come
- More to consider
GPIO is the acronym for General Purpose Input Output and the main bonus that comes with it is that you can reconfigure each pin as either an Input and Output but also deem them to provide a different type of interface for the various types of displays and boards in general.
You can find displays that use DPI, SPI, I2C and even UART or an ad-hoc interface. Some Interfaces like DPI are particularly fast but will require lots of GPIO to interface with the screen, others like SPI and I2C need very few pins but won’t be as fast as DPI. Ultimately choosing between them will be down to your projects requirements. Let’s look at examples for each.
As a reference for the pins we can use the invaluable pinout.xyz website with a link to the DPI interface. As you can see the interface can use up to 28 pins and therefore should only if can allocate the GPIO pretty much just for the display. A lot more information can be found at the Raspberry Pi website.
These are essentially the DPI add-on boards that I could find and in fact there isn’t pretty much more when it come to this type of interface.
For one reason or another none of them are can be considered HATs.
Pimoroni’s HyperPixel is a 4.0″ high speed display with a resolution of 800×480 and 18 bit per pixel. It also features a version with the a capacitive touch and has a breakout port for the I2C interface. There is also a Github repository where you can find its drivers.
The Gert VGA 666 brainchild of Gert Van Loo produced by Pi Supply and distributed by many is a very nice and cheap way of reusing an old VGA monitor. It doesn’t use all of the DPI pins because, as it says on the tin, it only use the 6 bits per colour mode or RGB666 and unlike the HyperPixel leave some pins free to be reused. As it becomes more and more rare to find VGA monitors in lofts I suppose this board will become eventually obsolete but it is still worth considering especially when working on legacy projects.
The Adafruit DPI Kippah offers in a similar way to the HyperPixel an 18 bit per pixel with 800×480 resolution but this time the screen is an LVDS display with choice between 5″ and 7″. This board also comes with or without the capacitive touch. Additional resources can be found on their Github repository. An earlier breakout board that Adafruit offered led to an interesting detailed project documented on this blog worth having a look if you want to know more about venturing the DPI way.
As the author of the blog also stresses out this approach is not straightforward and simply might not work in many cases. Fun to explore I’d imagine but wouldn’t think it would take on any time soon also because, as I said int my previous article, these LVDS displays are not any laptop display, one shouldn’t get the wrong idea that all of a sudden your long gone laptop getting dust in the loft can with these have a second life; it probably won’t. That’s why Adafruit offers a small selection of compatible displays.
SPI and I2C are amongst the favourite by vendors as they offer pretty much what’s needed for most use cases, utilise few pins and can be used by other hardware platforms quite easily. So no surprise to see the likes of Waveshare having quite a selection covering pretty much all the various interfaces.
With SPI the amount of pins required is much less, it only requires 4-5 pins and that’s why vendors are often adding additional hardware to their displays. SPI allows to control more than one device on its bus but it’s generally not used for more than one.
As for SPI even I2C requires few pins, in fact it only needs 2 which makes this interface very light in terms of GPIO usage. One additional advantage is that it’s very easy to use other peripherals in parallel to the same I2C bus making this option quite versatile.
One of the main downsides of these technologies is that you will end up with fairly small displays which provide good graphic support but very low resolutions and with modern OSs unless you come up with your own custom made GUI it will make using the display very difficult indeed.
A good bonus in getting an SPI or I2C display is that in general they come with additional hardware like buttons, LEDs and others due to the availability of many spare pins.
From the top left are three SPI screens.
This is an SPI display I found on Conrad, it is a 4.57 cm (1.8″) TFT display and can provide 262,000 colours with a resolution of 128×160 pixels. This is not a HAT and can easily be used for other platforms.
The last one is from Adafruit and similarly to the Watterott comes with additional buttons, 4 in this case. The TFT screen resolution is 320×240, features a resistive touchscreen and the backlight is dimmable via PWM. Adafruit offers a number of these screens some with higher resolution and screen size.
At the bottom three I2C displays.
The first from the left is a monochromatic Adafruit OLED 0.96″ display with a resolution of 128×64. It comes with a breakout connector and can therefore be used with Arduino and other platforms. Even in this case Adafruit has more to offer in terms of this type of screens with colour ones and bonnets designs (a type of pHAT essentially. That goes to show that in the absence of a standard chaos reigns, thanks God we now have the uHAT). This particular display can also be driven via SPI.
An interesting article form Codelectron on how to interface a similar OLED display as the one above.
The middles display is from Pimoroni, it is also an OLED, it measures 1.12″, has a resolution of 128×128 and offers a breakout connector specifically designed to easily interface to a Raspberry Pi. As they also recommend there is a nice library you can use with your Pi.
The last one is again from Adafruit and it is one of my favourites. It shows how tiny and useful these OLED screen can be. The form factor is a SHIM which is a small pHAT.
As pHAT the SHIM is not a standard either and in fact it’s only used by Pimoroni but it’s a nice way to identify this size of PCBs and I vote for IEEE to adopt the term officially! The display is monochrome and has a resolution of 128×23 and it’s just a great addition to your headless Pi. Adafruit offer many good quality tutorials and there is one also for this display.
Text based LCD
LCD displays like the HD44780 16×2 are very common and widely used, they are cheap, well known and there are plenty of resources available. When all you need is just a bit of feedback and text is sufficient then these are the go-to technology also due to their low power requirements. There is a really nice article from the RaspberryPi Spy which shows how to use the I2C backpack that allows to indeed use the HD44780 via I2C thereby saving many pins and allow for a more modular approach for your project. The backpack also controls the dimmable backlight.
An alternative could be the Adafruit Blue&White 16×2 LCD+Keypad Kit which in additions provides 5 buttons particularly useful for menu navigation.
There are several versions of these displays with coloured backlight or more lines of text, even OLED naturally but in general the principle and purpose are the same.
ePaper displays get featured here as the ones I found all use SPI. ePapers are truly nice when you are tight with power i.e. running off batteries and when you don’t need the picture refreshed often, you’ll still need to refresh it periodically but you will not risk getting ghosting effects due to always displaying the same image for days or months. You will in fact be able to display something then power-off your Raspberry Pi for a week and still keep the image on the display. It’s nothing new as the Amazon Kindle got us used to but it’s great to get this technology in our project. The screens come in very many different sizes to fit anybody’s need. A word of caution though, be careful with these screens as they are very, very delicate to the touch and brake easily.
Repaper, Pi Supply, Pimoroni, Waveshare, Adafruit are the biggest players getting a slice of the ePaper market. They all offer different screen sizes and features. This type of display offers such a variety that it would require a series of articles in itself. The ePaper screens are coming from one or two manufactures but each vendor tries to create a different product by leveraging on the features that the controller board offers as well as the software resources that come with it.
Waveshare has probably the largest selection of screens ranging from 1.54″ to 9.7″, monochromatic and colour, and resolutions between 200×200 to 1200×825, they even have a new generation of flexible screens. They all appear to use the same SPI driver board which can either be connected to the Raspberry Pi’s GPIO or to other hardware platforms via a breakout connector. Their Wiki pages offer additional information and resources like demos and videos.
PaPiRus from Pi Supply was the first ePaper for the Raspberry Pi to get on the market after a very successful kickstarter campaign which produced the HAT version of PaPiRus featuring 4 buttons, a breakout connector but most importantly an RTC circuit notoriously missing on the Raspberry Pi. The PaPiRus HAT supports 1.44″, 1.9″, 2.0″, 2.6″ and 2.7″ ePaper screens whereas the PaPiRus Zero supports 1.44″ and 2.0″. Pi Supply, now called Nebra Ltd, joined forces with RePaper a couple of year ago and I’m sure we will soon see more from them in terms of offer. There is a buzzing community of people working on PaPiRus Github repository which over the years added a lot of features to these boards.
A couple of years ago Pimoroni came out with their own ePaper boards. The Inky pHAT followed by the Inky wHAT called this way as it exceeds the dimension of a HAT and lacks some of the features the HATs requires. (they have a tendency to coin new standards anyway :). The Inky pHAT is a 212×104 pixel e-paper display whereas the Inky wHAT has a resolution on 400×300. They are available in red/black/white, yellow/black/white or black/white for the pHAT only. More information on resources on their Github repository.
Adafruit has also got some ePaper displays. The Adafruit SHARP Memory LCD doesn’t seem to be supported for the Raspberry Pi nor I could find any resources that would indicate that but it is an interesting display for which at some point a library could be made available. It has an SPI interface, has a resolution of 168×144, it is ultra low power but most importantly has a fast-refresh rate comparable to an LCD. Although this is technically not an e-Ink display it is still worth considering for a specific set of use cases where it is important to be able to read the display in broad daylight and also refresh the images particularly fast.
The last display from Adafruit is in fact three SPI, Tri-Color (Red, Black, White) eInk / ePaper Displays with SRAM with screen sizes of 1.54″, 2.13″ and 2.7″ and resolutions of 152×152, 212×104 and 264×176. They come with a small SRAM chip in order to be able to store the buffer whilst a microcontroller fills it up essentially. This is particularly useful with small Arduino like boards. Once again there is no support for the Raspberry Pi but worth looking at if anything to see how much investment there is on the market for this type of technology.
This is somewhat a limited case and doesn’t really provide a “display” as you would expect it to be. I thought though that it would be worth covering this product as it will be useful under some use cases. UART allows for example for the display to be quite far from the Raspberry Pi distance wise and it is such a ubiquitous standard that it will find support in many if not all programming languages and it will certainly be something you can use on other hardware platforms too.
I came across the Nextion displays during a Meetup in London and within half an hour someone had already created a nice interface to presumably order more beer by selecting the right amount with a slider. The bottom line was though that the time it took to have something “useful” of these displays was really short. Productivity come in mind!
These aren’t displays in a traditional sense, you have to think of them as displays with their own graphics which you can sort of drive and customise to your needs via UART.
NEXTION is a Human Machine Interface (HMI) solution combining a TFT touch display with an onboard processor and memory, developing by a free and downloadable NEXTION Editor software. Using the NEXTION Editor software, you can quickly develop the HMI GUI by drag-and-drop components (graphics, text, button, slider etc.) and ASCII text based instructions for coding how components interact at display side. With just 2 wires (RX,TX), NEXTION display quickly connects to MCU via 5V TTL Serial to provide event notifications that MCU can act on, and utilizes simple ASCII text based instructions so the MCU can easily provide progress and status updates back to your HMI user.
The TFT screens with integrated 4-wire resistive Touch Panel feature RGB 65K true to life colours,
4M flash memory and an on board micro-SD card for firmware upgrade. A lot more information can be found via their Wiki.
This article from Random Nerd Tutorials explains a bit more what to do and how using an Arduino but it shouldn’t be too far off using a Raspberry Pi instead.
In searching material for these articles I came across some exotic approaches and some other less uncommon ones like driving a HD44780 directly from the GPIO. There are several articles describing the connections and the programming here a small selection:
- Raspberry Pi LCD: How to Setup a 16×2 LCD Display – PiMyLifeUp
- Programming the HD44780 LCD Display with Raspberry Pi – Glenn K. Lockwood.
- How to drive a Character LCD display using the Raspberry Pi – ModMyPi
There is even a HAT from Anavi Technologies which allows you to plug the display directly on the HAT.
This way of using the HD44780 display won’t be as straight forward as using it with the I2C interface showed above and won’t use as few pins either but it is nevertheless an easy option to add a display in a headless configuration or in any case where graphics is not required and characters are possibly used to navigate through a menu and show some limited output for your program.
USB can offer good performances and similarly to what HDMI or Video Composite could offer a fairly long leash for the the screen to be located away from the Raspberry Pi. There aren’t many displays that offer support for the Raspberry Pi although there could be more to come.
This 2.8″ USB TFT Touch Display from RoboPeak has a resolution of 320×240 with 16bpp and supports USB2.0 Full-Speed. It can work with several other hardware platforms boards and has a nice Wiki page and a Github repository although neither have been recently updated. It feels as though this product might have been abandoned.
More to consider
Some of the technologies deal with how the display is connected to the Raspberry Pi, some are to do with how the images are actually displayed. In both cases you will have differences in performances and that will be one of the parameters to factor in your requirements i.e. Do you display static pictures or videos? Do you need colours? How many? Is power consumption an important factor?
Ultimately choosing a display is finding something that satisfies your requirements and you will have to look at the display’s specifications against your project’s requirements. There are though other factors you should be looking at:
- Documentation available and updated
- Open source drivers and software (were applicable e.g. for HATs)
- Natively supported in the OS
- Github or similar repository
- Active community providing support and innovation
These things are IMO more important than the cost of the display itself and you should check the quality of the resources available no matter how pretty was the Ad for the product you intend to buy or how much cheaper it was compared to a better resourced alternative.
After you’ve chosen the right display for your project you might also need a case for your Raspberry Pi, your display and whatever else you need for your idea to work in a nice enclosure.
There are several vendors which offer general purpose cases some of which I showed in the previous article. Of particular note is ModMyPi which has a huge selection of cases many of which designed by them.
But if your needs are either very specific or a one-off type you can always go the 3D printing way.
Drivers and OS native support
Some displays don’t come with a Frame Buffer option which allows your OS to output to the screen for example during boot time. Seeing what happens during boot or more generally be able to use the display as a standard output for you OS is very useful. Many projects will then integrate this functionality in their drivers and request the OS maintainers to natively include it for ease of installation.
One example of these is provided by Notro whose Github repository offers drivers for small TFT displays. These things aren’t at all straight forward but it is still interesting to always dig a bit deeper and get an appreciation of how many skilled people are sharing their knowledge for free often improving commercial products beyond their original purpose.
If your project needs Frame Buffer then make sure the product you buy has a suitable driver or that some tech angel is possibly writing one for you.
What’s to come
SPI and I2C are interfaces on which vendors are rather productive and the choice here is much wider than with DPI. The answer I believe is that hopefully DSI but certainly already the HDMI interfaces render using the DPI less of a need and more of a luxury, SPI and I2C are enough when it comes to provide some feedback to the end user and in some cases even pretty good graphical contents.
At The Things Network in Amsterdam Pi Supply now Nebra Ltd has officially presented a new Pocket Projector which comes either standalone or as HAT for the Raspberry Pi.
The product will launch soon on Kickstarter and we will hopefully get to know the full specifications then.
I guess pico projectors as maybe OLED, flexible and foldable, bigger ePaper displays, screen cast or mirroring are what we could see in the near future for the Raspberry Pi. Some of these are already there if using the right OS but whatever it’s going to be hopefully now you have a better understanding of how to choose the best display for your Raspberry Pi.