Adafruit RGB Matrix + Real Time Clock
HAT for Raspberry Pi
Created by lady ada
https://learn.adafruit.com/adafruit-rgb-matrix-plus-real-time-clock-hat-for-raspberry-pi
Last updated on 2022-07-18 05:05:28 PM EDT
©Adafruit Industries
Page 1 of 36
Table of Contents
Overview
3
Pinouts
6
•
•
•
•
•
•
I2C / RTC pins
5V protection circuitry and backpower diode
Matrix Drive pins
Matrix Color Pins
Matrix Control pins
RGB Matrix Address pins
Assembly
10
• Solder on Headers and Terminal Block
• And Solder!
• 64x64 Matrices: Solder “E” Jumper
Driving Matrices
•
•
•
•
•
•
•
•
•
21
Step 1. Plug HAT/Bonnet into Raspberry Pi
Step 2. Connect Matrix Power cable to terminal block
Step 3. Connect RGB Matrix Data cable to IDC
Step 4. Power up your Pi via MicroUSB (optional but suggested)
Step 5. Plug in the 5V DC power for the Matrix
Check that the Matrix plugs are installed and in the right location
Step 6. Log into your Pi to install and run software
Testing the Examples
Using the Python Library
Using the RTC
33
HELP!
33
Downloads
35
• Datasheets
• Schematic
• Fabrication Print
©Adafruit Industries
Page 2 of 36
Overview
You can now create a dazzling display with your Raspberry Pi with the Adafruit RGB
Matrix HAT or Bonnet. These boards plug into your Pi and makes it super easy to
control RGB matrices such as those we stock in the shop and create a colorful
scrolling display or mini LED wall with ease.
The RGB Matrix HAT works on any Raspberry Pi with a 40-pin GPIO header — Zero,
Zero W/WH, Model A+, B+, Pi 2, 3 and 4. It does not work with older 26-pin boards like
the original Model A or B. Note with the Pi Zero you may need to solder a header on
the Pi board; it’s normally unpopulated on that model (except the “Zero WH”).
©Adafruit Industries
Page 3 of 36
This HAT is our finest to date, full of some really great circuitry. Let me break it down
for you:
• Simple design - plug in power, plug in IDC cable, run our Python code!
• Power protection circuitry - you can plug a 5V 4A wall adapter into the HAT and
it will automatically protect against negative, over or under-voltages! Yay for no
accidental destruction of your setup.
• Onboard level shifters to convert the RasPi's 3.3V to 5.0V logic for clean and
glitch free matrix driving
• DS1307 Real Time Clock can keep track of time for the Pi even when it is
rebooted or powered down, to make for really nice time displays
©Adafruit Industries
Page 4 of 36
Works with any of our 16x32, 32x32 or 32x64 RGB LED Matrices with HUB75
connections (https://adafru.it/emd). The latest “Rev C” HAT also supports 64x64
matrices by soldering a small jumper on the PCB. You can even chain multiple
matrices together for a longer display - we've only tested up to 32x128 but it works
just fine. The bigger the display the harder it is on the Pi, so keep that in mind if
you're using a lower-powered Pi Zero.
Please note: this HAT is only for use with HUB75 type RGB Matrices. Not for use with
NeoPixel, DotStar, or other 'addressable' LEDs.
©Adafruit Industries
Page 5 of 36
Each order comes with a HAT PCB with all surface mount parts assembled, a 2x20
female socket connector, a 2 pin terminal block, and a 2x8 IDC socket connector. A
CR1220 coin cell is not included to make air shipping easier, please order one
seperately (https://adafru.it/em8) if you do not have one and would like to use the real
time clock.
RGB Matrix is not included, please check out our fine selection (https://adafru.it/emd)!
A 5V power supply is also required, not included, for power the matrix itself, the Pi
cannot do it, to calculate the power, multiply the width of all the chained matrices *
0.12 Amps : A 32 pixel wide matrix can end up drawing 32*0.12 = 3.85A so pick up a
5V 4A power supply (https://adafru.it/e50).
Raspberry Pi not included (but we have 'em in the shop so pick one up) (https://
adafru.it/eme)
Some light soldering is required to attach the headers to your Pi. A soldering iron and
solder are required, but it’s a simple soldering job and most beginners can do it in
about 15 minutes.
Pinouts
This HAT uses a lot of pins to drive the RGB Matrix. You'll still have a couple left over
but just be aware a majority are in use by the matrix.
Unused GPIO pins include: RX, TX, 25, MOSI, MISO, SCLK, CE0, CE1, 19.
Pin 24 is free if you are not using a 1/32 scan (i.e. 64x64) matrix.
Pin 18 is free if using the “convenience” (vs “quality”) setting during installation.
The 1-Wire interface as enabled by raspi-config will interfere with the operation of the
matrix! By default it uses pin 4. If you are connecting any 1-Wire devices, specify a diff
erent pin (any of the above) in /boot/config.txt, for example:
dtoverlay=w1-gpio gpiopin=19
©Adafruit Industries
Page 6 of 36
I2C / RTC pins
The DS1307 Real Time Clock soldered onboard is connected to the I2C pins SDA and
SCL - these can still be used for other I2C sensors and devices as long as they are
not on address 0x68
To use the Real Time Clock, a CR1220 3V lithium battery is required.
5V protection circuitry and backpower
diode
LED matrix panels require 5V power and a lot of it! 5V 2A at a minimum and you can
easily need a 5V 4A or 5V 10A supply for big stretches of panels!
Each matrix has 64 pixels (16x32 or 32x32 panels) or 128 pixels (for the 32x64 panels)
lit at one time. Each pixel can draw up to 0.06 Amps each if on full white. The total
max per panel is thus 64 * 0.06 = 3.95 Amps or 128 * 0.06 = 7.68 Amps
That's if all the LEDs are on at once, which is not likely - but still, its good to have at
least half for the power supply in case you get bright!
©Adafruit Industries
Page 7 of 36
5V power from a wall plug goes into the DC jack on the HAT which then goes through
a fancy protection circuit that makes sure the voltage is not higher than 5.8V - this
means that if you accidentally grab a 9V or 12V plug or a reverse polarity plug you will
not damage the HAT, Pi and panels. (Please note, this does not protect against
extreme damage, if you plug in a 120VAC output into the DC jack or continuously try
to plug in the wrong voltage you could still cause damage so please do be careful!)
We recommend powering your driving Raspberry Pi from the Pi's microUSB port but
we do have a 1A diode on board that will automatically power the Pi if/when the
voltage drops. So if you want, just plug in the 5V wall adapter into the HAT and it will
automagically power up the Pi too!
The green LED next to the DC jack will indicate that the 5V power is good, make sure
it is lit when trying to use the HAT!
Matrix Drive pins
The matrix does not work like 'smart' pixels you may have used, like NeoPixels or
DotStars or LPD8806 or WS2801 or what have you. The matrix panels are very 'dumb'
and have no memory or self-drawing capability.
Data must be constantly streamed to the matrix for an image to display! So all of
these pins are always used when drawing to the display
©Adafruit Industries
Page 8 of 36
All these pins go thru a 74AHCT145 level shifter to convert the 3.3V logic from the Pi
to the 5V logic required by the panels
Matrix Color Pins
• Pi GPIO #5 - Matrix R1 (Red row 1) pin
This pin controls the red LEDs on the top half of the display
• Pi GPIO #13 - Matrix G1 (Green row 1) pin
This pin controls the green LEDs on the top half of the display
• Pi GPIO #6 - Matrix B1 (Blue row 1) pin
This pin controls the blue LEDs on the top half of the display
• Pi GPIO #12 - Matrix R2 (Red row 2) pin
This pin controls the red LEDs on the bottom half of the display
• Pi GPIO #16 - Matrix G2 (Green row2) pin
This pin controls the green LEDs on the bottom half of the display
• Pi GPIO #23 - Matrix B2 (Blue row 2) pin
This pin controls the blue LEDs on the bottom half of the display
Matrix Control pins
• Pi GPIO #4 - Matrix OE (output enable) pin
This pin controls whether the LEDs are lit at all
• Pi GPIO #17 - Matrix CLK (clock) pin
This pin is the high speed clock pin for clocking RGB data to the matrix
©Adafruit Industries
Page 9 of 36
• Pi GPIO #21 - Matrix LAT (latch) pin
This pin is the data latching pin for clocking RGB data to the matrix
RGB Matrix Address pins
• Pi GPIO #22 - Matrix A (address A) pin
This pin is part of the 1->16 or 1->8 multiplexing circuitry.
• Pi GPIO #26 - Matrix B (address B) pin
This pin is part of the 1->16 or 1->8 multiplexing circuitry.
• Pi GPIO #27 - Matrix C (address C) pin
This pin is part of the 1->16 or 1->8 multiplexing circuitry.
• Pi GPIO #20 - Matrix D (address D) pin
This pin is part of the 1->32, 1->16 multiplexing circuitry. Used for 32-pixel and 64pixel tall displays only
• Pi GPIO #24 - Matrix E (address E) pin
This pin is part of the 1->32 multiplexing circuitry. Used for 64-pixel tall displays
only. Present on newer “Rev C” HATs only. Requires minor soldering, explained
on next page.
Assembly
©Adafruit Industries
Page 10 of 36
Solder on Headers and Terminal Block
Before we can a-blinkin' there's a little soldering to be done. This step will attach the
2x20 socket header so that we can plug this HAT into a Raspberry Pi, the 2x8 header
so we can plug the RGB matrix into the HAT, and a terminal block so you can power
the matrix through the HAT.
Start by plugging the 2x20 header into a
Raspberry Pi, this will keep the header
stable while you solder. Make sure the Pi is
powered off!
Place the HAT on top so that the short pins
of the 2x20 header line up with the pads
on the HAT
©Adafruit Industries
Page 11 of 36
And Solder!
Heat up your iron and solder in one
header connection on the right.
Once it is soldered, put down the solder
and reheat the solder point with your iron
while straightening the HAT so it isn't
leaning down
(For tips on soldering, be sure to check out
our Guide to Excellent Soldering (https://
adafru.it/aTk)).
Solder one point on the opposite side of
the connector
©Adafruit Industries
Page 12 of 36
Solder each of the connections for the top
row
©Adafruit Industries
Page 13 of 36
Flip the board around and solder all the
connections for the other half of the 2x20
header
©Adafruit Industries
Page 14 of 36
Check over your work so far, make sure
each solder point is shiny, and isn't
bridged or dull or cracked
Place the 2 pin terminal block first, make
sure the two 'mouths' are facing outwards
Use some tape to stick the terminal down
in place
©Adafruit Industries
Page 15 of 36
Flip the board over, the tape should keep
the terminal block in place
Solder the two big connections, use plenty
of solder!
©Adafruit Industries
Page 16 of 36
Check your work, the connections should
be solid and shiny
Next up we will attach the 2x8 IDC header.
Unlike the 2x20 header, this connector has
a direction!
Notice in the middle there's an outline for
the connector in the middle. On the right it
says HUB75 and on the left of the
connector there is a little 'cutout' shape.
This cutout shape must match up with the
cut out on the connector.
If you solder it in backwards, its not a huge
deal, you can use diagonal cutters to cut
out a notch on the opposite side, but if you
get it right then you will never have to
worry about plugging in your matrix data
cable the wrong way
Place the connector in the slot so that the
notched side is on the left
©Adafruit Industries
Page 17 of 36
Use some tape to hold the IDC connector
in place
Flip the board over, the tape should keep
the connector from falling out
©Adafruit Industries
Page 18 of 36
Solder in all the pins like you did with the
2x20 connector
Check your work! Make sure all the solder
points are clean and not shorted or
cracked or dull
©Adafruit Industries
Page 19 of 36
Flip the board around & solder up the
other half!
Check your work one last time...now
continue to testing!
64x64 Matrices: Solder “E” Jumper
64x64 matrices are supported on the latest “Rev C” HATs only.
Look for the Address E pads located
between the HUB75 connector and Pi
camera cutout.
Melt a blob of solder between the center
“E” pad the the “8” pad just above it (for
64x64 matrices in the Adafruit shop)…or
the “16” pad below (rare, for some thirdparty 64x64 matrices…check datasheet).
©Adafruit Industries
Page 20 of 36
Driving Matrices
OK we're onto the fun part now! Be sure you have completed the Assembly step
before continuing, the soldering is not optional
©Adafruit Industries
Page 21 of 36
Step 1. Plug HAT/Bonnet into Raspberry Pi
Shut down your Pi and remove power. Plug
the HAT or Bonnet on so all the 2x20 pins
go into the GPIO header.
Step 2. Connect Matrix Power cable to
terminal block
Your RGB matrix came with a red & black power cable. One end has a 4-pin MOLEX
connector that goes into the matrix. The other end probably has a spade connector. If
you didn't get a spade connector, you may have to cut off the connector and tin the
wires to plug them into the terminal block
©Adafruit Industries
Page 22 of 36
Either way, unscrew the terminal blocks to
loosen them
©Adafruit Industries
Page 23 of 36
Plug the red wire into the + side, and the
black wire into the - side.
©Adafruit Industries
Page 24 of 36
Step 3. Connect RGB Matrix Data cable to
IDC
The RGB matrix also came with a 2x8 data
cable. Connect one end to the matrix's
INPUT side and the other end to the IDC
socket on the HAT/bonnet.
It wont damage the matrix if you
accidentally get the cable connected to
the output end of the matrix but it wont
work so you might as well get it right first
time!
©Adafruit Industries
Page 25 of 36
If you're using a 64x64 RGB matrix and
either a Bonnet or a Rev C HAT, use your
soldering iron to melt a blob of solder on
the bottom solder jumper so the middle
pad is 'shorted' to 8. (This is compatible
with 64x64 matrices in the Adafruit store.
For 64x64 matrices from other sources,
you might need to use 16 instead, check
the datasheet.)
Step 4. Power up your Pi via MicroUSB
(optional but suggested)
Connect your Raspberry Pi to power via the microUSB cable, just like you normally
would to power it up.
You can power the Pi via the 5V wall plug that is also used for the Matrix but its best
to have it powered seperately
©Adafruit Industries
Page 26 of 36
Step 5. Plug in the 5V DC power for the
Matrix
OK now you can plug in your 5V 2A or 4A
or larger wall adapter into the HAT/bonnet.
This will turn the green LED on but nothing
will display on your matrix yet because no
software is running!
Check that the Matrix plugs are installed
and in the right location
IDC goes into the INPUT side (look for any
arrows, arrows point from INPUT side to
OUTPUT)
Power plug installed, red wires go to VCC,
black wires to GND
©Adafruit Industries
Page 27 of 36
Step 6. Log into your Pi to install and run
software
OK now you are ready to run the Pi software. You will need to get into a command line
via the HDMI monitor, ssh or console cable. You will also need to make sure your Pi is
on the Internet via a WiFi or Ethernet connection.
We have a script that downloads the code and any prerequisite software. It works
with the current Raspbian “Buster” (or earlier “Stretch”) operating system (either the
Lite or Desktop version):
curl https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/main/
rgb-matrix.sh >rgb-matrix.sh
sudo bash rgb-matrix.sh
The LED-matrix library is (c) Henner Zeller h.zeller@acm.org with GNU General Public
License Version 2.0 http://www.gnu.org/licenses/gpl-2.0.txt (https://adafru.it/ewN)
Earlier versions of this guide used our own fork of this library. That’s deprecated now,
but still available (https://adafru.it/ewy)if you have existing code built atop it.
Otherwise, use this installer script and latest code.
When first run, the script will explain its plans and give you the option to cancel.
Of particular note here: any existing installation will be replaced. If there is a directory
called “rpi-rgb-led-matrix” in the current working directory, its contents will be
overwritten. Additionally, a Python module is installed and will replace anything
currently there. If this is a problem, cancel and make a backup. Otherwise, sometimes
reinstalling is exactly what you want.
©Adafruit Industries
Page 28 of 36
Next the script will ask you what kind of adapter you’re using between the Pi and RGB
matrix: either an Adafruit RGB Matrix Bonnet, or RGB Matrix HAT with RTC. If you
select the latter, you’ll also be asked if you want to install additional drivers for the
realtime clock.
Then you’re asked whether you need the absolute best image possible from the LED
matrix, or can accept slightly reduced quality for the sake of simplicity.
The “quality” option comes at a cost. First,
you need to solder a jumper wire between
GPIO4 and GPIO18 on the Bonnet or Hat
board. Also, the normal sound output of
the Raspberry Pi must be disabled. You
can still use a USB sound adapter if
needed, but audio over HDMI or from the
1/8" jack will not be present.
The “convenience” setting requires no changes and sound still works. For many
casual projects this might look good enough. There’s an occasional bit of flicker from
the matrix, that’s all.
If you’re not sure, or if you just want to get started experimenting with your new
gadget, select “convenience” for now. You can make the change and reinstall the
software later if needed.
©Adafruit Industries
Page 29 of 36
The script will confirm your selections and offer one more chance to cancel without
changes.
There’s a lot of software to update, download and install, so it may take up to 15
minutes or so to complete. Afterward, you’ll be asked whether you want to reboot the
system. If you’ve selected to install RTC support (for the Matrix HAT + RTC) or have
made a change in the “quality” vs “convenience” setting, a reboot is required.
All other settings (LED matrix size, number of “chained” matrices and so forth) are
specified at run-time.
Overclocked Raspberry Pi boards may produce visual glitches on the LED matrix.
If you encounter such trouble, first thing to try is to set the Pi to the default (nonoverclocked) speed using raspi-config, then reboot and retest.
Testing the Examples
The installer creates a directory called rpi-rgb-led-matrix , and inside this is a
subdirectory examples-api-use with a few programs we can use to experiment with
the matrix and confirm everything’s working.
All of the examples — and any code using the companion libraries — accept a
common set of command-line switches for specifying the LED matrix size and other
options. Among the more vital options are:
--led-rows= (rows)
Specifies the number of rows (or height or the number of pixels vertically) of your LED
matrix (or matrices, if you have several chained…they all need to be the same size
though). Default value if unspecified is 32. Maximum value with the Adafruit RGB
Matrix HAT + RTC is 32. Maximum with the RGB Matrix Bonnet is 64.
--led-cols= (columns)
Specifies the number of columns (or width or the number of pixels horizontally) of
your LED matrix/matrices. Default value if unspecified is 32.
--led-chain= (chained)
©Adafruit Industries
Page 30 of 36
Specifies the number of matrices in the chain…the output of one connects to the input
of the next. Default value if unspecified is 1.
Here’s how to run one of the examples — a rotating colored square. Because this
code is performing low-level hardware operations, it must be run using the sudo
command:
sudo ./demo -D0 --led-rows=16 --led-cols=32
That’s for a single 32x16 pixel RGB matrix. If you have a different size, change the -led-rows and/or --led-cols values. Add a --led-chain value if multiple
matrices are chained.
There are 12 different examples in the demo program (0 through 11), chosen with -D .
For a full list of the program’s options, just type ./demo .
Depending on your matrix type and Raspberry Pi model, some additional options may
need fine-tuning:
--led-slowdown-gpio= (0…n) Sometimes needed to throttle back the speed when
using a fast Pi. Default is 1.
For Raspberry Pi 3 use a slowdown of 1 to start (use higher values if image still
flickers). For Raspberry Pi 4, use a slowdown of 4. Older Pi models might work with 0,
try it.
--led-rgb-sequence= (RGB order) Some LED matrices may have their red, green
and blue LEDs wired up in a different order…for example, if you need to swap the
green and blue channels, use --led-rgb-sequence=RBG . Default is RGB .
--led-pwm-bits= (1…11) For long matrix chains you’ll probably need to use fewer
PWM bits, sacrificing some color fidelity to improve refresh speed. Default is 11 .
There are still many additional options but they’re increasingly esoteric and might
only be needed with RGB matrices from other sources. For a complete explanation of
these options (and a more in-depth explanation of the options above) see the docume
ntation accompanying hzeller’s code repository (https://adafru.it/kdg).
©Adafruit Industries
Page 31 of 36
The demos kinda run, but I’m seeing weird rectangles and
glitches.
If your Pi is overclocked, or if you’re using a Raspberry Pi 2 or Pi 4, you may need
to dial back the matrix control speed slightly. This can be done with the --ledslowdown-gpio=2 setting. Pi 4 may require larger values, depending on the
matrix…experiment! Conversely, early Raspberry Pis (Model A, B and similar) might
get an improved image by speeding up the matrix code with a value of 0 here.
There are a few additional examples in that directory showing how to write C++
programs to draw to the matrix. Look through the source code and Makefile to see
how this is done and how to link with the rgbmatrix library. And there’s more
documentation in the hzeller repository (https://adafru.it/BhV), including initializing the
matrix size and chain length in your code so it’s not necessary to specify this on the
command line every time.
Using the Python Library
Some Python examples are included in the rpi-rgb-led-matrix/bindings/
python/samples directory. The matrix installer script has already loaded the
prerequisite Python Imaging Library and installed the rgbmatrix module for Python
3 and for Python 2.7 if present (the latest Raspberry Pi OS versions no longer include
Python 2.7, but it can be optionally installed it needed.
Again, more documentation is available in the library author’s repository (https://
adafru.it/BhW), and some of the examples show how to specify the matrix size and
chain length in code rather than command-line selections every time.
While the rgbmatrix module provides its own drawing operations, it can also work
with the Python Imaging Library as an “offscreen canvas” that’s then issued to the
matrix with the SetImage() or SwapOnVSync() function — see the examples with
“image-” in their name.
Core PIL image functions are explained here: The Image Module (https://adafru.it/dvE)
Graphics functions (lines, etc.) are here: The ImageDraw Module (https://adafru.it/dfH)
Reminder: the older Adafruit fork of the RGB matrix library (https://adafru.it/ewy) is still
available if you need it for existing code, but consider this deprecated. For new
projects we recommend the more up-to-date hzeller code installed by the rgbmatrix.sh script!
©Adafruit Industries
Page 32 of 36
Using the RTC
We had a little space and thought a real time clock would be a nice pairing for this
HAT so we tossed on a DS1307 real time clock (RTC). This clock uses a 32.768KHz
crystal and backup battery to let the HAT & Pi keep track of time even when power is
lost and there's no network access. This makes it great for time displays!
A 12mm 3V Lithium Coin Cell (CR1220) is REQUIRED to use the RTC! It will not work
without one! (https://adafru.it/em8)
The rgb-matrix.sh script already installed the necessary software to use the
realtime clock…but you’ll need to set the initial time once. This is explained in the “Sy
nc time from Pi to RTC” section of this DS1307 tutorial (https://adafru.it/lF1) (just that
one section…you can ignore the rest).
HELP!
The matrix looks like it’s trying to work, but the image is
all flickery.
Try using the --led-slowdown-gpio=X command-line setting, where “X” ranges
from 0 (for the very earliest Raspberry Pi models) up to 4 (for the Raspberry Pi 4).
Experiment to find the lowest value that provides a stable image on your system.
©Adafruit Industries
Page 33 of 36
I'm using a Raspberry Pi 2 and things are all not working
right!
Run sudo raspi-config and in the “Overclock” options set the core frequency to
350 MHz or less. Reboot and see if the image is stable. There seems to be an
issue when toggling GPIO too quickly.
Also see the prior note about dialing back the GPIO speed.
The matrix flashes on and off when in use
If you’re interfacing to any 1-wire devices, and if you’ve enabled 1-wire via raspiconfig, you’ll need to use something other than the default pin 4. Pins 19 or 25
make good choices. Look for the line in /boot/config.txt where 1-wire is enabled
and tell it which pin to use:
dtoverlay=w1-gpio gpiopin=19
Tried all these, it still flickers.
Large LED matrices and newer model Raspberry Pis need more power than the
early days. If you’re trying to run everything from a 5V 2 Amp power supply, you
probably need to step up to 4A or better. You can also try powering the Raspberry
Pi from a USB power supply and the matrix (via the HAT or Bonnet) with a DC
supply.
My display has dim red LEDs or has odd output
Check that you have plugged in a good 5V 2A+ (4A+ is best) power supply into the
Bonnet/HAT. The Raspberry Pi's 5V power supply cannot power a matrix, you need
a separate high current supply as well!
©Adafruit Industries
Page 34 of 36
Downloads
Datasheets
• DS1307 Real Time Clock (https://adafru.it/em5)
• MAX4866 5V protection chip (https://adafru.it/em6)
• Fritzing object in the Adafruit Fritzing Library (https://adafru.it/aP3)
• EagleCAD PCB files on GitHub (https://adafru.it/qHc)
Schematic
Click to embiggen
©Adafruit Industries
Page 35 of 36
Fabrication Print
Here's the fabrication print with dimensions in inches. This HAT is compatible with the
Raspberry Pi mechanical HAT specification!
©Adafruit Industries
Page 36 of 36