These panels are normally designed for chaining (linking end-to-end into larger displays)…the output of one panel connects to the input of the next, down the line.
With the limited RAM in an Arduino, chaining is seldom practical. Still, it’s necessary to distinguish the input and output connections on the panel…it won’t respond if we’re connected to the wrong socket.
Flip the matrix over so you’re looking at the back, holding it with the two sockets situated at the left and right edges (not top and bottom).
On some panels, if you’re lucky, the sockets are labeled INPUT and OUTPUT (sometimes IN and OUT or similar), so it’s obvious which is the input socket.
If INPUT is not labeled, look for one or more arrows pointing in the horizontal direction (ignore any vertical arrows, whether up or down). The horizontal arrows show the direction data moves from INPUT to OUTPUT — then you know which connector is which.
If no such labels are present, a last option is to examine the plastic shroud around the connector pins. The key (notch) on the INPUT connector will face the outer edge of the panel (not the center).
The arrangement of pins on the INPUT connector varies with matrix size and the batch in which it was produced…
A 32x16 panel uses this pin arrangement. The labels might be slightly different, or the pins might not be labeled at all…but in either case, use this image for reference.
Notice there are four ground connections. To ensure reliable performance, all four should be connected to GND on the Arduino! A solderless breadboard is handy for making this split.
Here’s the layout for 32x32 and 64x32 panels. We’ll call this “Variant A.” Some panels use different labels, but the functions are identical.
The layout is very similar to the 32x16 panel, with pin “D” replacing one ground connection.
This is the layout we’ll be referencing most often.
If you have a 32x32 panel with no pin labels at all, then use this layout.
“Variant B” for 32x32 and 64x32 panels. The wiring is identical to Variant A above, only the labels are different.
Ground pins aren’t labeled, but still need to be connected.
LAT (latch) is labeled STB (strobe) here. R1/G1/B1/R2/G2/B2 are changed to R0/G0/B0/R1/G1/B1…but again, no functional difference, it’s just ink.
Our earliest 32x32 panels had a two-socket design, let’s call it “Variant C.” All the same pin functions are present but the layout is very different.
R/G/B on the upper socket correspond to R1/G1/B1 in Variant A. R/G/B on the lower socket correspond to R2/G2/B2.
All the other signals (A/B/C/D/CLK/LAT/OE) need to be connected to both sockets — e.g. one pin on the Arduino drives both CLK pins, and so forth.
There are two or three methods for connecting a matrix to an Arduino:
- Jumper wires inserted between Arduino headers and a ribbon cable — this works well for testing and prototyping, but is not durable.
- The Adafruit RGB Matrix Shield makes connecting these panels to an Arduino as easy as can be, and is best for permanent installations.
- One could build a proto shield to replicate the pinout of option #2. But given the Matrix Shield’s low cost, this might not be worth the effort nowadays.
These panels are normally run by very fast processors or FPGAs, not a 16 MHz Arduino. To achieve reasonable performance in this limited environment, our software is optimized by tying specific signals to specific Arduino pins. A few control lines can be reconfigured, but others are very specific…you can’t wire the whole thing willy-nilly. The next pages demonstrate compatible wiring…one using the RGB Matrix Shield, the using jumper wires.