RGB LEDs controlled via GPIO

Note: For the 2019 Edition of the Pi Dramble, I am using the Blinkstick Nano over USB, since I lost the use of the Pi GPIO headers to the PoE HAT. But either way works great, and I still have all the RGB LED scripts in the source code if you're interested in building and using your own RGB LED boards!

Since the main purpose of the Dramble is to demonstrate Ansible deployments, it’s nice to be able to visualize the process. Since the Raspberry Pi has a 40-pin GPIO header with many software-controlled pins, it’s relatively easy to interface with external circuits to indicate status visually. One of the simplest circuits is an LED, which requires a resistor, an LED, and a connection between the LED and ground/3.3V on the Pi.

In our case, we can wire up a little board with a bright RGB LED so the Pi can display its status or other information using any color in the rainbow, and can even fade the LED in and out so the Pi looks like it’s ‘breathing’ (using Pulse-Width Modulation, or PWM for short)!

Raspberry Pi Dramble - RGB LED GPIO board

For my own Dramble, I’ve built six such RGB LED boards (one is pictured above), and I used the following parts to make each board:

For each board, I designed the circuit using a breadboard, then diagrammed it in Fritzing:

Raspberry Pi Dramble - RGB LED breadboard circuit diagram in Fritzing

Once I had the basic circuit design, I cut up a prototyping board and started playing around with a layout that would let the board plug directly into the GPIO using a 2x4 pin header, and have the LED facing directly out the front of the Pi. This way the ‘front’ of the Dramble could have all the LEDs nicely lined up vertically with each Pi. Here’s a picture of the beginnings of the circuit, from the underside (the female header plugs into the Pi directly):

Raspberry Pi Dramble - RGB LED PCB bottom side - female headers

Using the assortment of tools pictured below (the most important tools are a soldering iron and solder, a wire stripper, and a needle-nose pliers), I soldered together all the boards in a couple hours, then tested them on an older Pi B+ (I didn’t want to learn that I bridged the wrong connection on one of the boards and fry a Pi 2!):

Raspberry Pi Dramble - RGB LED PCB assembly station - soldering kit

When complete, I had six nearly-identical boards (two were a little narrower, so connections were a little tighter), which I plugged into one of the Dramble Pis in the proper location on the GPIO port:

Raspberry Pi Dramble - RGB LED PCBs - all six fully assembled

Once I had these boards wired up and ready to go, I wrote a few small Python scripts to control the LEDs (mostly for fun—the main one I’m using for the Dramble demonstrations is the simple rgb script that turns on one color at a time).

See the scripts in the repository:

Ansible then copies these scripts into the user’s path as executables on each of the Dramble servers, so Ansible playbooks can call them with something as simple as command: rgb red to switch the LED to ‘red’ mode, or command: rgb off to switch the LED off.

Here’s a video of the LEDs in action (click the image to watch on YouTube):

Raspberry Pi Dramble RGB LEDs in action