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.
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)
ledstrip.flush_leds()
ledstrip.zero_leds()
ledstrip.write_leds()
levels = [[0,8],[1,9],[2,10],[3,11],[4,12],[5,13],[6,14],[7,15],
[32,33,34,35,36,37,38,39],[16,31],[17,30],[18,29],
[19,28],[20,27],[21,26],[22,25],[23,24]]
def scroll(b,g,r):
for level in levels:
for led in level:
ledstrip.led_values[led] = [brightness, b, g, r]
ledstrip.write_leds()
sleep(delay)
try:
while True:
scroll(255,0,0)
scroll(0,255,0)
scroll(0,0,255)
scroll(255,255,0)
scroll(0,255,255)
scroll(255,255,255)
finally:
print("/nAll LEDs OFF - BYE!/n")
ledstrip.zero_leds()
ledstrip.write_leds()
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 FASTLED_ESP8266_D1_PIN_ORDER
#include<FastLED.h>
#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);
FastLED.clear();
}
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},
{17,30},{18,29},{19,28},{20,27},{21,26},{22,25},{23,24}
};
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);
}
delay(delay_ms);
FastLED.show();
}
FastLED.show();
delay(delay_ms);
}
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


Where could I buy this already made? Thanks.
It’s not available ready made, but you can get the parts at https://shop.rasp.io/collections/raspio-collection/products/raspio-inspiring-programmable-rgb-led-shapes-super-bright-and-colourful