About: Analog engineer

This is custom 5x5cm Arduino UNO board that allows simple connection to HUB75 interface LED displays.
If you are not familiar with such displays you can buy one from Adafruit 16X32 RGB LED MATRIX PANEL, or from Aliexpress

HUB75 interface LED displays usually comes with flat cable for data and power cable. So after you soldered this PCB all you need to do is to connect power cable to screw terminal. and plug flat cable to PCB and LED display. Pinout compatible with Adafruit "RGB matrix Panel" library, but I wanted to understand how HUB75 interface works. So I wrote my own library. Five free pins can be used to connect sensors or other devices. See examples below. Gerber files for Seeedstudio Fusion PCB service attached. It will cost you 10$ to produce 10 of this PCB.

Also Eagle schematic and board layout files attached so you can also use any other PCB service.

Step 1: Parts List

You will need flowing parts:

1. ATmega328 with Arduino Optiboot (Uno)

2. Resistor 10k

3. Capacitor 22pF x2

4. Capacitor 100nF x5

5. Crystal 16MHz

6. Capacitor 470uF x2

7. DC Barrel Power Jack/Connector like this

8. Two pins screw terminal block 3.5mm pitch like this

9. Switch like this optional if you want reset button.

10. DIP Socket, 28 Contacts optional

11. Two jumpers

12. Break Away Headers 18 pins like this

13. Resistor 330 Ohm x5 (optional)

14. RUEF250U FUSE (optional)

15. Ribbon Cable Connector 2x8 like this probably you also can use one like this You can also solder two rows of headers. It works fine also.

RUEF250U is a 3A fuse. It is optional. You can simply short it connections with wire if you don't want it.

Resistors 300 Ohm also optional. You can solder header before resistors as you can see on photo.

Step 2: The Board

As you can see it is no USB interface on board, so you will need some USB to serial cable to upload sketches. I am using SparkFun FTDI Basic Breakout - 5V

Using jumpers board can be configured for panels with 3 bits of row address (A,B,C) usually 16x32 or for panels with four bits of address (A,B,C,D) usually 32x32 panels or larger

For panels with 3 bits of row address you need to short NOD1,NOD2 jumper as you can see on picture

For panels with 4 bits of row address you need to remove jumpers from NOD1,NOD2 and put them on USED1,USED2 headers.

It is no voltage regulator on board. Please use good 5V power supply. For 16x32 panel you will need about 2A power supply. For 32x32 panel you will need about 3A power supply.

Connect 5V power supply only to Barrel Power Connector. The connector in lower left corner is for connected external devices as RTC, sensors etc. Traces on board for this connector too narrow for 2A needed to power LED matrix!

Step 3: HUB75 Interface

HUB75 interface used for lot of LED displays. It is couple of links below if you want to learn about it.

It is slight differences between panels, but for panels used by Adafruit and many others basically you need is to do flowing to operate the display:

1. Clock in data for entire row (use R1,G1,B1,R2,G2,B2 for data and CLK for clock)

2. OE high

3. Select line address (A,B,C,D)

4. LAT high

5. LAT low

6. OE low

Repeat for each line

Step 4: My Library

As I wrote before, this board will work just fine with Adafruit "RGB matrix Panel" library. But it was interesting to write my own. So I did. You can download latest version from GitHub HUB75driver or you can download attached zip file.

This library will work with normal Arduino Uno as well.

HUB75driver library parameters

Supports 16x32 1/8 refresh rate panels

Frame rate 125FPS

12bits of clolors, 4 bits per color (RGB)

3500 bytes of program memory

RAM: 40 bytes + 768 bytes if no double buffering and 1536 bytes if double buffering used

It takes 7ms to fill all matrix using draw_point() function (512 times)

Step 5: Usage Examples

Example how to use my library to scroll text

Step 6: Clock Example

THis example uses connected via I2C DS1307 breakout board as RTC

Step 7: Temperature Display Example

This example using Adafruit libraries and DS18B20 sensor to display temperature

Step 8: References



    • Backyard Contest

      Backyard Contest
    • Sensors Contest

      Sensors Contest
    • Games Contest

      Games Contest

    17 Discussions


    1 year ago

    Hi Alexander, great project I want to connect 4 P10 led to arduino, with 4 HUB 75 I do not know if its possible?

    1 reply

    1 year ago

    Hi friend! Can this code be used with the HUB08 Interface as well? Thanks

    2 replies

    1 year ago

    Will this work with 32x64 LED panels? (They have a HUB75 connector)

    1 reply

    2 years ago

    Really nice solution for small matrix.

    Is anу possibility to scale it for 32x64 matrix? (Arduino Mega based) Is any possibility to add chaining for two 32x64 panels?


    2 replies

    Reply 2 years ago

    It is Adafruit library that should support 32x64 matrix for Arduino Mega. Of cause to do custom board with Arduino Mega not simple because Arduino Mega surface mounted.


    Reply 1 year ago

    Hi Sir,

    I am using DUE library RGBmatrixPanelDue in my RGB 3-panel Width 2-panel Height display.
    Could you please help me with few queries:
    1) P-10 RGB 16x32 panels bottom row and P-10 RGB 16x32 panel top row Hub-75 port But how to connect both display panel convert to 32x32 size connections?
    2)How to print String value to display? (RGBmatrixPanelDue library)

    3)How to scroll the (text) value? (RGBmatrixPanelDue library)

    Can you please provide me any .CPP file with the same ,as the demo file does not contain the above examples in it. only matrix.writeAChar('B'); function.

    Awaiting your valuable reply.
    ( or (

    Thanks& Regards

    Vishwas Mathew


    1 year ago

    P10 rgb matrix is campactble on arduino nano or not?

    1 reply

    Reply 1 year ago

    P10 is pitch size (dot size) you need to know interface type


    2 years ago


    Does this library enable to chain three RGB matrices?

    Thank you.

    1 reply

    3 years ago

    Hi , great project .

    I have an 1/4 refresh rate JS Industrial 16*32 P10 HUB75 matrix.

    Where I can set the refresh rate ? , because e.g the Adafruit projects works only with 1/8 refresh rate display :( . With my 1/4 rate display writes stupid things..

    Thank You!

    2 replies

    Reply 3 years ago


    unfortunately my library as well as Adafruit not supports 1/4 refresh rate. I googled about 1/4 rate panels and it seems like it is lot of different panels with different pixel mappings. If you can get pixel mapping diagram for you panel, possible I will be able to add support to my library. But if you don't have some special reason to use this panel, it better to use standard 1/8 refresh rate panel.



    Reply 3 years ago

    Thank You Alex ,

    not so important , I have only 1 panel which is...

    Later I also bought panels with 1/8 rate :(