Mar 172017

One of the interesting usage possibilities for the RasPiO InsPiRing system is illuminated signage. What could be better than flashy, blinky, multi-coloured signage? Well, not much really? So I decided to make an arrow out of two straight 8s and a triangle.

I used white depron foam as a base, ordinary headers and jumper wires to connect all the shapes to each other and to the controller. Then a needle and thread and some hot glue to fasten the shapes to the depron. I then darkened the foam with a marker pen. This is what it looks like.

Arrow sign from 2 RasPiO InsPiRing straights and a triangle

Arrow sign from 2 RasPiO InsPiRing straights and a triangle

I got it all working on a Raspberry Pi in Python to begin with, then decided to port the code to Arduino and use a Wemos D1 mini (ESP8266) for my ‘on location’ shoot (just power it up and go – no screen or keyboard required).

Here’s the Python Code

from time import sleep
import apa

numleds = 40    # number of LEDs in our display
delay = 0.04
brightness = 0xFF  # set phasers to MAX

ledstrip = apa.Apa(numleds)


levels = [[0,8],[1,9],[2,10],[3,11],[4,12],[5,13],[6,14],[7,15],

def scroll(b,g,r):
    for level in levels:
        for led in level:
            ledstrip.led_values[led] = [brightness, b, g, r]

    while True:

    print("/nAll LEDs OFF - BYE!/n")

Here’s the Arduino Sketch Code

This sketch uses the FastLED library which already has a driver for APA102. It can do native SPI on supported devices, but I haven’t managed to get this to work on a Wemos D1 mini, so using bit-banging on pins 7 & 5.

#define NUM_LEDS 40
#define DATA_PIN 7
#define CLOCK_PIN 5

CRGBArray<NUM_LEDS> leds;

    void setup() { 
        FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, BGR, DATA_RATE_MHZ(12)>(leds, NUM_LEDS);

int delay_ms = 40;
int levels[17][2] = {{0,8},{1,9},{2,10},{3,11},{4,12},{5,13},{6,14},{7,15},{32,33},{16,31},

void arrow(int red, int green, int blue){    
      for(int i=0; i<17; i++){
          if (i == 8){
            for(int j=32; j<40; j++){
              leds[j].setRGB(red, green, blue);
          else {
            leds[levels[i][0]].setRGB(red, green, blue);
            leds[levels[i][1]].setRGB(red, green, blue);         

void loop() {
      arrow(255,0,0);        //RED
      arrow(0,255,0);        //GREEN
      arrow(0,0,255);        //BLUE
      arrow(0, 125, 255);    //CYAN
      arrow(255, 0, 125);    //MAGENTA
      arrow(255, 125, 0);    //YELLOW
      arrow(255, 125, 125);  //WHITE
RasPiO Inspiring Arrow

RasPiO Inspiring Arrow

If you’d like to build an arrow, the top pledge level includes enough parts to make two arrows and a few more parts. Also, for another 26 hours (until 12pm Saturday), you can get a Pi Zero W in this bundle.

Check out the RasPiO InsPiRing Kickstarter here.

Leave a Reply