Pixel Art Frame

I’ve always wanted to play with a big LED matrix, and now I have! 🙂 In this post, I’m making a Pixel Art frame, capable of displaying images, scrolling text, etc … Useful to show the weather, social media notifications, and whatever else you can think of!


The following electronic components were used in this project:

The Adafruit RGB Matrix HAT, makes it easy to connect the matrix using a ribbon cable, but its power input also powers the Pi Zero. This makes wiring a lot simpler and cleaner. If you prefer though, the matrix could be wired directly to the Pi’s GPIO instead, not requiring the HAT anymore!

img_2833-1 img_2828

Detailed instructions on how to connect and wire the HAT can be found on the Adafruit website. To wire the matrix to the Pi directly, check the link to Henner’s GitHub page in the next paragraph.


The Pi Zero runs the latest Raspbian Jessie, but because timing is critical and could affect the matrix, it is recommended to use the “lite” version of the image.

I originally started off with Adafruit’s RGB LED Matrix library to drive the matrix, but that resulted in glitches and flickering when displaying images on the matrix. I then found out that Adafruit’s library is a branch of Henner Zeller’s rpi-rgb-led-matrix library. Henner’s library continued to evolve and introduced various improvements, resulting in a glitch-free display. It is also very well documented and provides different options such as C++ and Python, depending on your coding preferences.

Installing the library and the examples is a piece of cake:

One of the demo application takes *.ppm images. If the width is larger than 32 pixels, it is possible to let the image scroll while displaying.

To have something to demonstrate, I downloaded some images and used GIMP to convert them to the ppm format. I’ve then written a small script that iterates through the images in a folder and displays them for five seconds each.

From there, it’s a matter of deciding what you want to display, based on which triggers. You could easily display the weather forecast for the day, or display the social media symbol for which you’ve just received a notification, etc … It’s all up to you!


To hold the electronics together and give the project a proper finish, I created a custom frame consists of wood, acrylic and window tint foil. Using the miter saw, four pieces of “meranti” were cut in order to create a basic frame, with the inner space large enough to fit the LED matrix. Grooves were made using the table saw, to hold the acrylic in place.

img_2812 img_2813

Window tinting foil purchased on eBay was used to give the acrylic a slight mirror look while allowing the light of the LEDs to shine through from behind. The acrylic with foil was then inserted in the grooves, and the four pieces of wood glued together. Using some saw dust mixed with glue, any gaps were filled. To allow the frame to stand up, a small rod was inserted in the back, giving the frame an additional point of support.

img_2815 img_2816

Finally, a bit of beeswax was applied to the wooden frame.


Like it? What would you display? Let me know in the comments! 🙂


16 thoughts on “Pixel Art Frame

  1. Nice.

    Could you indicate what is that 90° USB thing you used, where you sourced it and what is the benefit compare to plugging the USB OTG connector directly into the PiZero?

    Also, it is not clear from where you power the PiZero:
    Is that a micro USB power supply or do you apply power from other Pi?
    Is it a separate power supply for Pi and for LED or a single one?


    1. It’s just a 90° microUSB extension. It allows me to put the Pi Zero in that spot without touching the middle edge of the plastic frame, as it is shorter than directly connecting the USB OTG cable. Cosmetic, nothing mandatory 🙂

      As for the power supply, as described in the post, the HAT powers the Pi, so only a single power supply is required. The HAT has a DC barrel jack connector.

  2. Hey! I have been hoping to make one of these for so long. Thank you for this guide!!! I’m wondering if you’d be able to let me know what would be different (code, parts needed, etc.) if I wanted to use a RaspberryPi 3 instead of a 0. I have an extra, so I’d rather not buy what I don’t need.

    1. Hi Zack, thanks!

      If you plan on using a Pi 3, I don’t think there would be any difference in software. But as you can use the onboard wifi, you wouldn’t need the USB OTG cable and wifi dongle required for Pi Zero.

  3. Hello sir, I really like the work what you do and especially the Pixel Art Frame. I’m trying to get it to work but unfortunally it doesn’t light up. The LED matrix I have isn’t displaying anything.
    My setup is this:
    Raspberry Pi 2B
    Adafruit LED RGB Matrix hat
    1 x 32×32 LED matrix (Hub75)

    It’s strange that the Henner Zeller github clone is not working either but the Adafruit github clone (led-rgb-led-matrix-master) is working perfect.
    Do you know if there is a setting that I’m missing? Maybe you can walk me tru this problem step by step so that I can get it working. I would really appreciate it if you do 🙂

    Thanks and greetings from the Netherlands,

    1. Hello Sander,

      which command from the Henner Zeller library are you using?
      Does anything appear on the matrix if you run the following command? “sudo /home/pi/rpi-rgb-led-matrix/examples-api-use/demo -D0 –led-gpio-mapping=adafruit-hat”

      Greetings from Belgium 😉

    1. The command was correct, but the blog seems to turn “- -” into “-“.

      Anyway, I’m then using the D1 command to pass custom *.ppm images, as demonstrated in the blog/video. I believe there is a “runtext.ppm” in the library you can experiment with.

      Let me know how that works out for you 🙂

  4. It does not work anymore, whatever command I try… is it possible that I remove everything from the rpi-rgb-led-matrix folder and install everything fresh?

  5. Thanks for your help, figured something out that the system was using adafruit-hat-pwm as a standard…it was configured in several files… Now everything is working like it should be 🙂

    Is it possible to use animated GIF files also? I have a script that can play animated GIF’s but that script uses only one file.

Leave a Reply

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