p4: 3D printed 288 LED desktop display

In my previous posts, I mentioned a second gift I was working on for Christmas. It has been a long time coming, but that gift is ready to be posted. I heard my nephew had recently gotten into investing, so I thought it would be a fun idea to make a simple stock ticker for him that could be on his desk or shelf. As you know, I was already working on my large LED matrix display and this smaller, desktop display would function in many of the same ways, albeit with limited information displayed at one time.

I started with the idea and knowing that he used Apple and Amazon products vs my Android and Google setup, meant that I needed to add hardware and web based controls and configuration to this display. I started off with some WS2813 LED strips I had on hand and designed the look of the display based on the dimensions of the strip. I knew that stacking the strips on top of one another would make the display too tall and would not allow me to create square pixels while keeping everything desktop sized. My thought was to trim off excess from the sides of the strip and then overlap matching polarities since the strips were going to be laid out in a serpentine pattern anyway. I designed the display with this idea in mind, not sure if it would work. To Fusion I went!


Above you see version 1 of the design I came up with. I wanted to ensure that I could assemble the display easily while providing a structure that was sturdy. The hardware buttons kind of threw me off and thinking about how to best accommodate the round buttons and assembling the display resulted in a design that was to be assembled from the bottom of the box. Materials involved where:

  • Black PETG
  • Clear Acrylic Sheet
  • Tactile Push Buttons
  • 288 x WS2813 LEDs
  • ESP32 Dev Board
  • MAX9814 microphone/amp
  • USB-C female port for power

This design worked out for the most part, but after a test assembly, I did not like the seams on the bezels around the front of the display. I also didn’t like the need to add structural supports to keep the LED panel and diffusion grid snug against the acrylic front. Version 2 changed the round buttons to rectangular with assembly to be done from the back. I created spacers that kept everything snug as it went in and created a two part support system to allow insertion of the buttons from the back.

I was much happier with this design. Everything fit snug and it was relatively easy to assemble. Now, the programming needed to be done. Much like my larger LED matrix display, this one would display the time, date, weather, stock ticker, and an audio spectrum visualizer. I will be doing another post of these features on the larger display in the near future! So, check back for that. With this smaller display, each bit of information would be displayed in its own separate mode.

The diffusion panel for this display is much like the larger one, but scaled down to a “desktop” size. It is printed with white PLA as the diffusion layer

the leds

As I mentioned above, my original idea was to use WS2813 strips and trimming the edges off. While this technically worked, it did not work 100% of the time. There was always some interference and instability with the power being fed to the LEDs. It just wasn’t good enough if it would not reliably work. After much trying many, many times to resolve the reliability issue, I gave up and decided to get a custom LED panel PCB made. So that’s what I did.

It was fairly easy to design and the resulting board was beautifully made. The only problem was that I had failed to read the data sheet for the LED component correctly. When initially designing the panel, I selected an LED component that I later found out, was not eligible for SMD manufacturing. In my rush to get the panel completed, I selected a different LED component (same WS2813, but different model) that had a different pin layout. I modified the traces on the PCB design but failed to notice on the data sheet that these different LED components also required a small capacitor between each LED. Unfortunately, the manufacturer does not take the time to double check these aspects for you ( I don’t blame them).

I did not realize my mistake until I received them and tested them out. The LED data signal had too much interference and by the time it reached the third row of LEDs, the data signal was too corrupted. The interference resulted in the LEDs flickering and lighting up randomly or not at all. I was disappointed and frustrated with myself. I had gone through this process to create a custom LED panel and I DID IT INCORRECTLY.

THANKFULLY – after some googling and research, I was able to modify the panel and address the interference issue. Essentially, instead of one data signal that entered in the first LED and was passed down the line to the last LED, I used a separate data signal for each row. This solved the interference problem and I now had a working LED panel.


All of the features of the display rely on an Internet connection except for the audio spectrum visualizer. I designed a simple web interface that allowed configuration and setup of the display, as well as updating the firmware for correcting any bugs or adding features. Each of the modes can be cycled through using the first button (left most button).

time and date

The time and date are retrieved from time.gov and rendered in 12 hour and MM/DD/YY formats, respectively. This ensures that both the time and date are always accurate.


Weather mode provides three sub-modes. Every sub-mode displays an icon that represents the current forecast for the zipcode provided during setup. Each sub-mode is described below and can be cycled through by using the middle button. Weather data is retrieved every 15 minutes through an openweather API request.

  • Sub-mode 1 – The current temperature in F and a brief current conditions are interchangeably displayed approximately every 15 seconds.
  • Sub-mode 2 – The current temperature, high temperature, and low temperature are interchangeably displayed approximately every 5 seconds.
  • Sub-mode 3 – A brief description of current conditions is repeatedly displayed.

stock ticker

Stock ticker mode displays a scrolling ticker of the stock symbols entered during setup. The stock prices are updated approximately every 30 seconds and provide a quick view of a current stock price and the amount of change since the market opened. The stock ticker mode currently supports up to 10 symbols.

audio spectrum visualizer

The audio spectrum visualizer utilizes the microphone to analyze the audio and visually represent the audio frequencies. This feature was inspired by this fantastic video from Scott Marley. Scott also provides his code and this feature is a modified version of his code. Thanks Scott! This feature provides three sub-modes, which increase the width of the bars and slightly modifies the size of the frequency bins each bar represents. I found that this was very useful to accommodate for audio/music that was of different volumes, which did not look so great with the single pixel width bars. Again, changing the sub-modes can be done using the middle (i.e., second) button.


The last feature is just a simple brightness control using the third button. There are currently three brightness levels, which can be cycled through using the button.

full demo

Below is a video demonstration of the desktop LED display in action. Take a look and let me know what you think! Thanks for reading.

Leave a Reply

Your email address will not be published. Required fields are marked *