Easiest RGB LED Strip With Raspberry Pi!




If you've looked into driving RGB LED strips from your raspberry pi, you may have found it to be more effort than you were willing to put in to it. Either you had to build a driver from scratch with transistors, or you needed to modify the circuitry of a mini amplifier to make sure it didn't blow up your Pi.

Well, now you don't have to - there's a plug and play solution, thanks to a fortuitous discovery about a particular model of RGB LED amplifier.

This is the kind you DON'T want: very cheap, highly tempting mini amplifiers, such as https://www.amazon.com/FAVOLCANO-Amplifier-Control...

They have a fatal flaw - the +12V input pin is connected to the +12V output pin. Connect it to your Pi and you'll blow up the Pi.

This is the kind you DO want: slightly more expensive and larger: https://www.amazon.com/TSSS-Repeater-Signal-Amplif... (Cost - $5.75!)

These ones do NOT connect the input and output 12V pins and are safe to drive directly from the +5V pin on the Pi and the GPIO output pins. (Though just to be sure in case there's ever a new design using the same packaging, check that for yourself with an Ohm meter)

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Connecting Is Trivial!

Connect the +5V pin of your Pi to the +12V input of the amp with a male-female jumper lead.

Connect 3 GPIO pins (GPIO 4,5,6 are a good choice) to the R, G & B inputs of the amp with three male-female jumper leads.

The amp will come with two short connectors for the LED strips. Use one to connect to your LED strip. They'll have color-coded wires - red, green and blue plus one other for the power line. (Black, in my case)

Step 2: Now Test It...

You will need the "pigpiod" system on your pi in order to take advantage of software PWM so that you can drive the LED strips at different intensities. "sudo apt-get install pigpiod" if it isn't already installed.

Go to https://www.raspberrypi.org/forums/viewtopic.php?f... to see how to configure your Pi so that pigpiod starts when you power up.

Here's a shell script that will let you set the LED strip to an arbitrary color:

if [[ "$1" == "on" ]] ; then
  pigs pwm 23 0 pwm 24 0 pwm 25 0
  if [[ "$1" == "off" ]] ; then
    pigs pwm 23 255 pwm 24 255 pwm 25 255
    # trying to compensate for eye's log response to brightness
#   tmpR=`echo 'scale=4; (e(l(2) * (((100 - '$1') * 8) / 100))-0.01)' | bc -l`
#   tmpG=`echo 'scale=4; (e(l(2) * (((100 - '$2') * 8) / 100))-0.01)' | bc -l`
#   tmpB=`echo 'scale=4; (e(l(2) * (((100 - '$3') * 8) / 100))-0.01)' | bc -l`

    # but simple linear seems to work better :-(
    tmpR=`echo 'scale=4; ((100-'$1')*255/100)' | bc -l`
    tmpG=`echo 'scale=4; ((100-'$2')*255/100)' | bc -l`
    tmpB=`echo 'scale=4; ((100-'$3')*255/100)' | bc -l`

    # convert to integer
    tmpR=`echo 'scale=0; ('$tmpR'/1)' | bc -l`
    tmpG=`echo 'scale=0; ('$tmpG'/1)' | bc -l`
    tmpB=`echo 'scale=0; ('$tmpB'/1)' | bc -l`

    # echo "RGB: "$tmpR $tmpG $tmpB
    pigs pwm 23 $tmpR pwm 24 $tmpG pwm 25 $tmpB

Call it "ledstrip" and use it like this: ledstrip 50 50 0

The 3 parameters are the values of R, G & B in a range of 0 to 100.

That's it. Easiest LED strip project ever!

Microcontroller Contest 2017

Participated in the
Microcontroller Contest 2017

2 People Made This Project!


  • Made with Math Contest

    Made with Math Contest
  • Multi-Discipline Contest

    Multi-Discipline Contest
  • Robotics Contest

    Robotics Contest

13 Discussions


6 months ago

Would it be possible to drive a RGBW from a raspberry pi with this:
What GPIO pin would you use for the white? :)

2 replies

Reply 6 months ago

yes, that looks very possible. the extra W and even WW lines became available after I did this project but you should be able to extend it in the obvious way. Any standard GPIO that isn't in use internally by the Pi should be OK, there's a dozen free ones that are easy to use. Just pick one, I have no special favourite. Obviously you'll also need to tweak a script to drive it. Oh wait - did I update this project to only use the built-in PWM? If I was using hardware PWM then I guess you would need a spare hardware PWM pin if there is one, but if it's software PWM then any regular GPIO would do.


Reply 6 months ago

Working fine with software PWM, thanks (:


Tip 1 year ago

Came back here and remembered that I intended to post my Perl code that controls my LEDs. It uses the X11 color database to set the color, or uses a random color (although some of the colors don't look like you'd expect because the LEDs don't render them as faithfully as a monitor would). You will need to install pigpiod as stated in the article and make sure it's running before using this script.

Usage: ./ledrgb.pl [--color=color-name] [--random]

--- start file ledrgb.pl --- cut here ---

#!/usr/bin/perl -w
use Getopt::Long;
my $colordb = "/usr/share/X11/rgb.txt";
open(COLORDB, $colordb)
or die "Can't open $colordb - $!";
my $random = 0;
my $color = undef;
GetOptions( "color=s" => \$color, "random" => \$random );
if ($random) {
$lineout = `/usr/bin/wc -l $colordb`;
if( $lineout =~ m/^\s*(\d+)\s+/ ) {
$lines = $1;
} else {
die "Can't understand output from wc - (" . $lineout . ")";
$rvalue = int(rand $lines);
for($i=0; $i<$rvalue; $i++) {

chomp($selcolor =
} else {
#$color = $ARGV[0];
unless( $color ) {
print "Usage: $0 [--color=color-name] [--random]\n";
exit 1;
) {
next unless m/$color/i;
push(@matches, $_);
# $n++;
if( scalar(@matches) == 0 ) {
print "Color $color not found in $colordb\n";
exit 1;
} elsif ( scalar(@matches) == 1 ) {
$index = 0;
} else {
for($i=0; $i<=$#matches; $i++) {
print $i, "\t", $matches[$i];
select STDOUT; $| = 1;
print "Selection: ";
chomp($input = );
$input =~ s/[^\d+]//;
$index = length($input) ? $input + 0 : 0;
chomp($selcolor = $matches[$index]);
print $selcolor, "\n";
# Remove leading spaces
$selcolor =~ s/^\s*//;
($r, $g, $b) = split /\s+/, $selcolor;
$r1 = 255 - $r;
$g1 = 255 - $g;
$b1 = 255 - $b;
$cmd = "/usr/bin/pigs pwm 23 $r1 pwm 24 $g1 pwm 25 $b1";
print $cmd, "\n";
exec $cmd;
die "exec $cmd returned - shouldn't happen";

--- end file ledrgb.pl --- cut here ---

3 replies

Reply 1 year ago

Appreciate the code posting, shame it got mangled by Instructables, though would have been much worse if it had been python and lost the indentation!


Reply 1 year ago

Heh, yep. Guess we can't post code blocks in the comments. <code>Or can we?</code>


Reply 1 year ago

Nope, guess the code block formatting is reserved for articles only.

Anyway, since it's Perl, indentation isn't a deal-breaker. Ping me via the site or george <dot> rapp <at-sign> Google's mail product <dot> com if you have any questions or problems with the code.


Question 1 year ago on Step 2

Awesome tutorial! I have a question in regards to setting up something similar. I’m planning to use this setup to control a strip, but I need the colur to change on a gpio pin change (i.e, the LEDs Aden blue, but turn red once a certain pin is high). Any ideas how to implement this in Python?

1 answer

Tip 1 year ago on Step 2

Thanks OP for a straightforward and easy Instructable. My build notes:

* There is a new product on Amazon, and unfortunately the price has risen to US $13: https://www.amazon.com/gp/product/B00MN7UQVQ
* My 12V power supply is on the floor, and the rPi and LED amplifier are up near the ceiling. I only wanted to run the 12V power up the wall, but I needed USB power for the rPi. I wired the output Power + / - leads to a cigarette lighter USB car adapter, and then used a Micro USB cable from that adapter to connect to the rPi.
* My 5A power supply is sufficient to drive 10 meters of RGB LED strips with 30 LEDs/meter.

instructables 1.pnginstructables 2.pnginstructables 3.pnginstructables 4.png
2 replies

Reply 1 year ago

Thanks - the best thing about Instructables is when someone builds something you've suggested!

It's coincidental that you just now posted this - this week I ran LED strips all round my living room for use as power-failure lighting and pulled this exact hardware from my box of parts to drive it. I'll be setting up a 12V lead-acid battery on trickle charge (same as most burglar alarm systems) and am contemplating the same wiring issues as you have. In my case I've decided to use a 12v->5v USB adapter for the Pi, and house the amplifier and Pi (ZeroW, if it works) on a shelf close to the strip to keep the wiring short & tidy.

PS If you search around on Amazon or eBay you can find better prices for the same amplifier - currently $5.99 w/ Prime shipping is the best I can see on Amazon. Also there are now RGBW amps with an extra channel.


Reply 1 year ago

I was looking for 12v->5v adapters on Amazon, but decided to try the cigarette lighter adapter first because I have dozens of them lying around. :) 3+ days continuous uptime on the rPi and no issues thus far.

Thanks for the tip on the cheaper amplifiers.


2 years ago

I hear that Broadcom pin numbers 12/13/18/19 are capable of hardware PWM support so may be a better choice than the ones above. OTOH I had previously understood that only pin 18 was supported by hardware PWM so I don't know if this applies to all models.