Pixelli 3D Printed WS2812B LED Strip Matrix

by csete in Circuits > Arduino

640 Views, 2 Favorites, 0 Comments

Pixelli 3D Printed WS2812B LED Strip Matrix

matrix-1500.gif

Build a matrix based on an ESP32, 3D printed matrix and standard WS2812B LED strips that displays time, temperature and top news headlines.

Supplies

3D Printed Parts

The 3D printed parts can be found in Thingiverse. For this particular build, the following parts should be printed:

  • 4 x 8x8Matrix.stl
  • 3 x 8x8MatrixBinder.stl
  • 4 x Straight_Frame_Section.stl
  • 2 x Frame_Corner_1.stl
  • 2 x Frame_Corner_2.stl
  • 1 x power_connector_boot.stl (Optional)

As mentioned in Thingiverse, with the exception of the connector boot, it is suggested to use PETG. If using the connector boot, a flexible filament such as TPU is required.

Mounting Parts

The printed matrix can be mounted to a 24x36 corrugated plastic sheet using zip ties.

LED Matrix Electronics

The LED matrix is comprised of an ESP32 and a strip of WS2812B LEDs. This particular build used:

"Mock" Matrix Electronics

An optional development board and OLED display can be used as a mock matrix to simplify software development. The parts involved in that setup include:

Wire LEDs

20230108_172838.jpg
20220706_132516.jpg
test-driver.jpg

The unique approach to this design inherited from this project is that the LED strips are folded back on themselves so that the LEDs project into opposite sides of the open squares of the matrix holder.

Test Driver Wiring

Most of the WS2812B strips include a very simple test driver with a JST connector. It is nice to be able to separate out issues with wiring from issues with the ESP32 software, so I generally choose to wire to the JST connector that will mate with that test driver rather than direct to the ESP32. For this 8 x 32 matrix:

  • Start by cutting 4 strips of 64 LED's that will make up the 8 x 32 cells in the matrix.
  • Fold each strip in half similar to the associated picture.
  • Connect all 5V power lines to the power source, no specific direction is required and I chose to feed to all power connections on the LED strips to the RED connection on the JST connector.
  • Connect all ground lines to a common ground, no specific direction is required and I chose to feed to all power connections on the LED strips to the WHITE connection on the JST connector.
  • Connect the data lines between each section of LED strips, making sure that the data flows in the proper direction from the GREEN connection on the JST connector. In order to match the way the software is configured, the data line should start at the lower-left corner, wrapping back and forth from bottom to the top.

Once all of the soldering is done, plug in the test driver to the JST connector and power it up to validate that the LED's are all functioning as expected.

ESP32 Wiring

Connect the other half of a JST connector to power and an ESP32.

  • Connect a RED wire from the + terminal of the barrel connector. The power must be split such that it powers:
  • The RED wires to the LED strips
  • The Vin 5V pin of the ESP32
  • Connect a WHITE wire from the - terminal of the barrel connector. The ground must be split such that it connects to:
  • The WHITE wire to the LED strips
  • The GND pin of the ESP32
  • Connect a GREEN wire to the GPIO5 pin of the ESP32

For the purposes of this build, the connections to the ESP32 were made by soldering the JST connector wires directly to the ESP32 pins.

IMPORTANT NOTE - Make sure that whenever the LED strips are plugged in to the ESP32 that there is sufficient power from the external power supply. The ESP32 is not able to provide enough power to drive the LEDs when plugged in via USB.

Software

The software is available from Github here: https://github.com/csetera/pixelli . Instructions for building and installing the software can be found in Github.

More Information

More information about wiring WS2812B/Neopixel strips can be found in Adafruit's NeoPixel Überguide

Build Matrix

20220305_080636.jpg
IMG_20220305_105801.jpg
20220305_111135.jpg

Print the 4 8x8 matrix sections and the 3 binders. Tape the matrix sections together and then glue them using the binders to create the final 8x32 grid.

Add LEDs to Matrix

20230108_172921.jpg
20220805_123702.jpg
20220710_130857.jpg

Slip the LED strips into the matrix. For sections that were soldered together at the factory, the spacing may be slightly different requiring a bit of tweaking. I chose to add some small bits of hot glue to hold the strips in place.

I chose to mount the entire matrix and all wiring to a piece of corrugated plastic using zip ties that matched the matrix color.

Add Matrix Bezel

20220705_150125.jpg
IMG_20220609_102421.jpg

Each section of the bezel has a set of locking tabs that slide over the outer wall of a matrix section.

NOTE: The current design of the bezel locking tabs has a tendency to break along layer lines. Be careful when sliding the bezel sections on to the matrix.

(Optional) Mock Matrix

20230109_090446.jpg
20230109_090430.jpg
61afDc5iOYL._AC_SL1001_.jpg
Screenshot from 2023-01-22 10-20-34.png

For development purposes, the optional "mock" matrix can be built. The mock matrix is built based on an ESP32 and OLED Display. The full information about the OLED display can be found in the Waveshare Wiki. The OLED module operates 3wire-SPI and 4wire-SPI protocols. The ESP32 used in this case is a 38-pin model and the OLED display is connected via the built-in ESP32 SPI pins as shown in the mapping table.