Introduction: 24bit RGB LED Emoji/Sprite Display

About: tinkerer, teacher, developer, dreamer... follow me @echundotcom on twitter, instagram to see my other creations

As a teacher going back to the classroom amidst COVID and the requirement to wear PPEs, I realised that my students won't be able to see my facial expressions (I teach high school, but have children that are going back to both elementary and secondary school). Was thinking of modifying the facial shield or the mask itself with LEDs and shapes, but figured that the cleaning of these would be a bit of an issue, so a solution that came to mind is to make a lightweight wearable, which can display emojis and images displaying my reactions. Here are my instructions on how I got this done.


Physical Materials Required

  • 24bit RGB LED Matrix
  • ESP32
  • wires
  • switches/push buttons (optionally, can reprogram the ESP to use touch sensors)
  • EVA foam (or some other kind of frame)
  • acrylic (white, 1/4" thick)
  • acrylic (black, 1/8" thick)
  • tinting plastic (optional)

Software Required:

  • Arduino
  • Python
  • graphics editor (PhotoShop or GIMP)

Step 1: Laser Cut Template

Here's the laser cut template to make boxes around some acrylic, so that it protects the LEDs as a part of the frame. I did this with a 1/8" black piece of acrylic.

I tried to cut a thicker piece of white acrylic (1/4"), but found I didn't have the settings strong enough to cut through all the way, which happens to have turned out better than expected, as the white did a better job of diffusing the light from the LEDs and ended up making a better "pixel" (btw, fun fact, the word "pixel" is an acronym of Picture Element - sorry, the teacher inside me had to just say that)

Step 2: Converting Images

The next step I took was to convert some images for use in the Arduino code, which is a modification of the sample RGB LED code found for the ESP32 (in the next step).

Using the Python code included above, edited the file location portion of the code to generate the proper hex code for use in the RGB LED Matrix (if you're a programmer, you'll notice that the LEDs are linked up in series, and not a traditional Cartesian coordinates, so proper identification of the RGB locations need to zig zag between the rows of LEDs).

The code on the next page already has the header data updated with the associated names.

The Mario image above was taken from a sprite sheet I found on the Internet, and the rest were hand created in PhotoShop... just need to make a 16x16 canvas, and Zoom in all the way, and use a 1x1 pixel brush to make the images

Step 3: Wiring and Coding

The Arduino code is included above, and just had to wire the RGB LEDs to the proper power source off of the ESP32 (5V and GND), as well as the data link (P4)

Using push buttons (pulled from another piece of junk tech), connected these to pins P5 and P15, and the other end of GND. The code does a PULLUP to HIGH so that button activation occurs when it recognizes a LOW to HIGH change (so essentially when the button is releases as opposed to a down button)

Step 4: Putting It All Together

In putting it all together, covered up the front of the white acrylic with some window tinting vinyl, which gives it the nice black screen look.

Cut out a frame using layers of EVA foam (supplies I had for the cosplay stuff I also create), and glued those using contact cement (two layers to house the items).

A third layer of EVA foam was added with cut outs so that the back would fit like a puzzle piece in place.

Added a strap so that it would easily hang off my neck. The total weight of all this is barely noticeable.

With regards to powering up the unit, I decided to use the built in micro USB connection that is used to program the ESP32, and had it connected to a USB power supply that I just kept in my pocket. To ensure that accidental pulls on the cord don't cause issues, I've added the use of one of those magnetically connected USB power charger adapters for the micro USB.

What's next? I'm looking to add a microphone to the ESP, and then make an animated sound volume bars, much like KITT from Knight Rider, so that students see a visual representation of my voice... stay tuned.

"Can't Touch This" Family Contest

Runner Up in the
"Can't Touch This" Family Contest