Introduction: Four Foot Long LED Signs

About: I ws a geek before the word was invented.

I have been making LED signs for over 20 years. My latest improvements are using an ESP32 processor and 3D printed LED seperators.

Supplies

Four strips each 5 meters (16 feet) long of 60 LED/meter WS2812B

ESP32 processor - Note: D1 mini style does not work.

One foot by four foot sign board

Wood frame - will need about 12 feet of 1 by 3 wood

One foot by four foot plexiglass

One foot by four foot diffuser

12 3D printed LED dividers

Step 1: Attaching the Strips to the Backing

I used a zig zag fromat with each strip being 72 LED's in the opposite direction of the one above it. At the starting end I used the connectors that came with the LED strips, at the far end I soldered jumper wires. Getting power to the strips can be done in several ways. The strips come with wires to add power to them. I tried adding power every forth strip but the color may dim when full on white, if you do that. At a minimum you should use 5 power tap ins, 8 is ideal.

Step 2:

Once they are wired up and tested to work you can add the 3D printed LED spacers (optional, but you can see the difference). I printed out 12 of the spacer grids and then glued them together on top of the LED strips. The spacers can be found at https://www.thingiverse.com/thing:5801854

Step 3:

The frame can be made out of wood. You will need to cut grooves for the plexiglass front. You can cut grooves for the sign board holding the LED strips or cut 1/2 inch off the sign board so that groove is not needed. The frame needs to be about 49 inches by 13 inches outside measurement to fit the 48 inch by 12 inch plexiglass. The frame is assembled with the plexiglass installed. Then add the diffuser (Or use the plastic film that comes on the plexiglass) then add the LED strip assembly.

Step 4:

The ESP 32 needs to be programmed with the following code. I hope to add background color and graphics later.

// Bluetooth Text for ESP32 with 72x16 Sign

// Format: Color/line/Text to display

// January 2023 by Bob Davis


#include <Adafruit_GFX.h>

#include <Adafruit_NeoMatrix.h>

#include <Adafruit_NeoPixel.h>

#include <BluetoothSerial.h> 

BluetoothSerial BT_Text;

#define PIN 25 // This is the led signal pin


Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(72, 16, PIN,

 NEO_MATRIX_TOP + NEO_MATRIX_LEFT +

 NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,

 NEO_GRB     + NEO_KHZ800);


int i; 

String Text1="R1OPEN SUNDAY";

String Text2="G2OPEN SUNDAY";

String textn=" ";


void setup() {

 // Serial.begin(115200);

 BT_Text.begin("BT_Text"); //Name of the Bluetooth interface (On your phone)

 matrix.begin();

 matrix.setTextWrap(true);

 matrix.setBrightness(128);

}


void loop() {

 if (BT_Text.available()) {

  textn="";

  while (BT_Text.available()) {

   i = BT_Text.read();

   textn = textn + char (i);   }

  if ((textn[1])=='1') Text1=textn; 

  if ((textn[1])=='2') Text2=textn; }


 BT_Text.println(Text1);

 BT_Text.println(Text2);

 if ((Text1[0])=='R') matrix.setTextColor(matrix.Color(255, 0, 0));

 if ((Text1[0])=='G') matrix.setTextColor(matrix.Color(0, 255, 0));

 if ((Text1[0])=='B') matrix.setTextColor(matrix.Color(0, 0, 255));

 if ((Text1[0])=='Y') matrix.setTextColor(matrix.Color(255, 255, 0));

 if ((Text1[0])=='P') matrix.setTextColor(matrix.Color(255, 0, 255));

 if ((Text1[0])=='C') matrix.setTextColor(matrix.Color(0, 255, 255));

 matrix.fillScreen(0);  //Turn off all the LEDs

 matrix.setCursor(-12, 0);

 matrix.print(Text1);

 matrix.show();

 delay(4000);

 if ((Text2[0])=='R') matrix.setTextColor(matrix.Color(255, 0, 0));

 if ((Text2[0])=='G') matrix.setTextColor(matrix.Color(0, 255, 0));

 if ((Text2[0])=='B') matrix.setTextColor(matrix.Color(0, 0, 255));

 if ((Text2[0])=='Y') matrix.setTextColor(matrix.Color(255, 255, 0));

 if ((Text2[0])=='P') matrix.setTextColor(matrix.Color(255, 0, 255));

 if ((Text2[0])=='C') matrix.setTextColor(matrix.Color(0, 255, 255));

 matrix.fillScreen(0);  //Turn off all the LEDs

 matrix.setCursor(-12, 0);

 matrix.print(Text2);

 matrix.show();

 delay(4000);

}