Display Devices

This section is about bitmap (or raster graphic) displays and does not discuss older technologies like 7-segment and 14-segment displays.

In the abstract the main properties of a bitmapped display are:

They determine how much bandwidth and computational resources are required to properly operate the display.

There are also more technical properties which we discuss below.

Interfaces

The interface describes how the display is connected to the Pi and is usually dictated by the driver chip - see below. Some chips support multiple interfaces, e.g. SPI and I2C.

Interfaces differ in the bandwith they provide. As a rule of thumb:

If you want to play video or have responsive interactive graphics you likely want HDMI.

Driver Chips

The driver chip is an embedded controller usually built into the display that enables us to send commands over the interface that alter the shown image.

Display Types

The type of a display describes how the display physically generates images.

LCD, TFT

These are available with resolutions high enough to run standard GUIs like X11. Resolution start around 200x320 with 16 bit or 24 bit color depth. Many come in a variant equipped with a touch screen sensor.

TFT displays need a backlight to function properly. It is desirable for the brightness of the backlight to be controlled by software.

The displays usually connect via SPI or HDMI.

One thing to keep in mind is that a TFT display’s viewing angles can be very orientation dependent influencing whether the display should be used in portrait or landscape mode.

Displays available on Amazon we liked:

OLED Displays

Unlike TFTs, OLEDs emit light directly without the need for backlights. When nothing is displayed there is no stray light emanating from the display. The downside is that the resolution is typically low - around 128x128 pixels. OLEDs usually are connected via SPI.

OLEDs offer a wide selecton of color depths, e.g. 16 bit color, monochrome, and grayscale. Monochrome does not necessarily mean black and white. In fact many OLED displays come in black and blue, black and yellow, and other combinations. Some displays even combine these: e.g. part of the display is black and yellow while other parts are black and white.

Displays available on Amazon we liked:

LED Arrays

These are more or less regular LEDs organized in small grids. They are usually monochrome and connect via SPI or I2C interfaces.

E-Ink

E-Ink display do not emit light so they cannot be read in the dark. They are either black and white, 3-color (red, white, black), or gray-scale. With resolutions starting at 100x200. The framerate is often low, e.g. < 5Hz.

They usually connect via SPI.

Displays available on Amazon we liked:

Displaying Content

An easy way to display content is to first render it into a bitmapped buffer of the same resolution as the display and then send the buffer contents to the display to make the image visible. This can be optimized further by sending only the part of the content that has changed.

In Python, the Python Image Library (PIL) 1 provides a simple way to create and manipulate such buffers in form of the PIL.Image abstraction.

The details of sending buffer contents to the display depend on its interface and driver chip.

When available the preferred way is to use the Linux kernel’s framebuffer abstraction. which provides a unified API for transferring image data. However, the kernel only supports a limit number of driver chips out of the box.

For some displays the manufacturer may provide a loadable kernel module that also provides the framebuffer abstraction.

If there is not framebuffer support available, the display can be programmed manually. See here for SPI interfaces.

To determine which of the three options will work for your display consult the driver chip overview page.


  1. sudo apt install python3-pil↩︎