Show Time
Get a tiny color display working on a Raspberry Pi, so you can show your own movies.
Lead Image © Dietmar H pfl, 123RF.com
Get a tiny color display working on a Raspberry Pi, so you can show your own movies.
In a recent Raspberry Pi Geek article [1], I showed how to make short videos for small, portable Raspberry Pi-powered devices, such as my fourth-generation Steampunk conference badge (Figure 1).
This time, I'll explain how to get that little 1.8-inch TFT color display [2] working on a Raspberry Pi, so you can show your own movies. Maybe you'd like to build your own conference badge, a video picture frame, or a small animated sign. The Rasp Pi is definitely fast enough to run videos at 30 frames per second on the little screen.
My conference badge runs on a Raspberry Pi 2 (RPi2) Model B [3]. Fortunately, you can successfully use small TFT displays with the earlier Raspberry Pi 1 (RPi1) model B+, as well, by simply moving the microSD card, keyboard, mouse, and cables over to the RPi1 and then restarting everything. There's no lag or problems running videos with either model.
Prototyping was done on Raspbian Wheezy [4]. The build is very straightforward, and I've had great results. I'll cover that in a minute.
You might want to consider not moving up to the latest Raspbian Jessie release, because the application that plays a movie – MPlayer [5] – has been swapped out for the now unsupported MPlayer2. At the time of writing, the required FBDev modules for MPlayer2 were not installed in the release, so the application refused to play a movie on a tiny display using the framebuffer. It works fine for an HDMI-attached big screen in an X window-based desktop, just not on a small LCD running as a framebuffer.
I spent considerable time trying to troubleshoot the problem and was unable to find a way to get MPlayer2 to work. Even worse, the regular MPlayer application isn't offered as an option in Jessie. As a result, when working with the small LCD displays connected to the GPIO pins, you should stick with Wheezy until the problem has been sorted out. Using Wheezy is a practical solution, and it's absolutely capable of providing a great wearable-device experience, especially on the quad-core, 1GB RAM-equipped RPi2.
With the general software strategy defined, you'll next need to build a cable to connect the Pi to the TFT display.
I built my cable from an old 40-pin PC IDE hard drive ribbon connector, some repurposed 22-gauge wire from a Category 5 (CAT5) cable, and a 10-pin female connector. Take the retainer off the ribbon connector and gently remove the ribbon cable from the pins. I then soldered the CAT5 wires to the tiny pins using a 25-watt soldering iron. A "helping hand" device was instrumental in lining the tiny wires up to the tiny connector pins.
The plastic around the pins and wire insulation melt quickly, so use as little heat as possible when making the connections. A traditional magnifying work light is also invaluable for getting the right wire on the right connector. Figure 2 shows a close-up view of the connector that attaches to the Pi.
Being able to swap parts around quickly is important, because I have a number of different projects in the works at any one time, and I usually don't have boxes of extra TFT displays and other components just lying around. Using parts in multiple projects is a fact of my technology writing life. Happily, connectors are cheap, and I go to the little extra effort of using them on everything to facilitate rapid prototyping of my mix-and-match tech project schemes.
You'll need 10 wires going from the Pi 40-pin connector to the TFT display's 10-pin terminator (Figures 3 and 4). I split a couple of CAT5 cables and extracted the pairs, covered one end with tape, and snaked them through a length of 3/8-inch thick woven paracord, with the inner core removed. The covering gives an antique Steampunk look to the cord on my conference badge. I lightly melted the ends of the cover, to keep it from unraveling. Some tightly wound wire kept the ends from bunching toward the center of the cable.
Table 1
Wiring Connections
>Wire Color | 10-pin Connector # | LCD Breakout Pin | Rasp Pi Pin # | Rasp Pi Pin Name |
---|---|---|---|---|
Orange/white |
10 |
Lite |
12 |
GPIO 18 (GPIO-Gen 1) |
Orange |
9 |
MISO |
21 |
GPIO09 (SPI_MISO) |
Brown/white |
8 |
SCK |
23 |
GPIO11 (SPI_CLK) |
Blue/white |
7 |
MOSI |
19 |
GPIO10 (SPI_MOSI) |
Green/white |
6 |
TFT_CS |
24 |
GPIO08 (SPI_CE0_N) |
Green |
5 |
CARD_CS |
|
Not used |
Blue |
4 |
D/C |
18 |
GPIO24 (GPIO_Gen 5) |
Orange/white |
3 |
RESET |
22 |
GPIO25 (GPIO_Gen 6) |
Orange |
2 |
VCC |
01 |
3.3V (DC Power) |
Brown |
1 |
Ground |
06 |
Ground |
I started with a clean build of Raspbian Wheezy on a 32GB Samsung EVO+ microSD card. To begin, you should download the image and expand it in its own directory and then copy the image over to the microSD card [6].
Insert the card in the slot and mount the device on the desktop, then use the df
command in a terminal to get the device name. You should see something like what is shown in Listing 1, with the /dev/mmcblk0p2
(or similar) being the operative entry.
Listing 1
Output of df Command
rob % df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 92G 14G 74G 16% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 4.0K 2.0G 1% /dev tmpfs 396M 816K 395M 1% /run /dev/sda6 129G 60M 122G 1% /disk6 /dev/sda7 92G 60M 87G 1% /disk7 /dev/mmcblk0p2 7.3G 5.0G 2.0G 72% /media/rob/13d368bf
Create a new directory and copy the downloaded TAR file to that directory:
cd mkdir raspbian cd raspbian
The file is around 1GB in size, so be sure to download it with a fast Internet connection. Next, expand the .zip
file into an image that you'll burn on the SD card:
unzip 2015-05-05-raspbian-wheezy.zip
The result will be a .img
file of a little more than 3GB in size.
It's important to copy the image over to the proper partition on the SD card. Make sure you use the bootable partition and not put it somewhere else. In the example df
result (Listing 1), that would just be the /dev/mmcblk0
part, not including the p0
part, which represents another non-bootable partition. Also, make sure to unmount the card before proceeding. Go onto the Linux desktop, right-click on the card icon and select unmount.
Next, image the card:
sudo dd bs=4M if=2015-05-05-raspbian-wheezy.img of=/dev/mmcblk0
Copying the image onto the card should take about three to five minutes. When completed remove the card from the Linux notebook and insert it into the Raspberry Pi's card slot. Apply power, and you'll immediately go into the raspi-config app.
Table 2 shows the settings I changed while in raspi-config. Pay particular attention to expanding the filesystem, enabling SSH, and enabling/loading the SPI drivers. If you forget to expand the filesystem, installing the display drivers from the rpi-update
process will fail with an out-of-disk-space error.
Table 2
Configuration Settings in raspi-config
Option |
| Setting |
---|---|---|
Expand the filesystem |
|
Yes |
Change user password |
|
<Your new password> |
Internationalization |
Change Keyboard Layout |
|
|
Keyboard Model |
Logitech Generic |
|
Keyboard Layout |
English (US) |
|
AltGr |
Use default |
|
Compose |
No compose key |
|
Ctrl+Alt+Backspace to kill X? |
No |
Overclock |
|
Set to Pi2 |
Advanced Options |
||
|
Hostname |
Raspi |
|
SSH |
Enable |
|
SPI |
Enable |
|
SPI enabled at reboot? |
Yes |
Reboot |
|
Yes |
Enabling SSH lets you log into and control the RPi2 remotely without a monitor, such as in a wearable conference badge situation. Once the Rasp Pi reboots, log in to the command line in a terminal.
The kernel drivers included in Raspbian Wheezy must be installed before they'll work, which is accomplished with an rpi-update
to the firmware. Make sure you have connectivity to the Internet; otherwise, the update will fail here, as well. Fortunately, Raspbian uses the wired Ethernet connection, out of the box, so this shouldn't be a problem if you can connect a cable to the Rasp Pi and the router. Alternately, you'll have to log in to the Pi while hooked up to a monitor to set your access point and WiFi passcode.
Running rpi-update
is straightforward:
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update
You'll also have to reboot for the firmware updates to take effect:
sudo shutdown -r now
Once you log back in, start the TFT framebuffer:
sudo modprobe fbtft_device name=adafruit18
Keep an eye on the LCD screen, and you should see the backlight come on after a short period. If you have a 2.2-inch display, use adafruit22
as the device name. Other displays have similar designations.
The next step installs MPlayer:
sudo apt-get install mplayer
You'll also need a short video file to display on the color LCD. I had some on my Linux notebook, in my drtorq
directory and copied them over to the Raspberry Pi:
cd drtorq rcp nano-video.mp4 pi@192.168.1.164:/home/pi/nano-video.mp4
To run the video on the display, the magic formula is:
mplayer -nosound -loop 0 -vo fbdev2:/dev/fb1 -x 160 -y \ 128 -zoom -flip -vf rotate 1 /home/pi/nano-video.mp4
I didn't really care too much about audio on the movie, thus the -nosound
option. To make the video loop indefinitely, set the loop
option to 0
; otherwise, use a number or exclude the option for a single pass. The zoom
, flip
, and rotate
options configure the screen for proper viewing orientation, as do the -x
and -y
size values.
Pages: 4
Price $15.99
(incl. VAT)