HUB75 Wiring Guide
Physical wiring, panel arrangement, and the settings that let one firmware drive panels it was not built for.
Settings, Not Solder
| Setting | Use it when |
|---|---|
| RGB channel order | Colours are wrong β orange looks pink, sky looks teal, yellow looks violet |
| Panel driver chip | The panel stays blank or ghosts (some panels need an FM6126A/ICN2038S-style init) |
| Custom pin map | You wired to different GPIOs, or colours are wrong on only one half of the panel |
| Panel arrangement | Which panels you attached β see Panel Arrangement |
The tab also carries a test pattern (three bars labelled R, G and B) and a restore built-in wiring button. Both work in setup (AP) mode, so a panel left dark by a bad setting can always be recovered without a USB cable.
The Pin Map
There is one pin map, and it is the MatrixPortal's. Those GPIOs are fixed in the MatrixPortal's PCB, and the firmware ships them as its compiled default for both boards β so a generic ESP32-S3 wired to match behaves identically, and any HUB75 tutorial or rainbow cable works on either.
MatrixPortal ESP32-S3
Nothing to wire. Plug the panel's cable into the built-in HUB75 connector.
ESP32-S3 N8R2 DevKit (Generic)
Wire to the table below, pin for pin. Cable colours are the common rainbow-ribbon convention and repeat down the run β trust the HUB75 label, not the colour, if a cable disagrees.
| # | Color | HUB75 | GPIO |
|---|---|---|---|
| 1 | Brown | R1 | 42 |
| 2 | Orange | G1 | 41 |
| 3 | Yellow | B1 | 40 |
| 4 | Green | GND | GND |
| 5 | Blue | R2 | 38 |
| 6 | Purple | G2 | 39 |
| 7 | Gray | B2 | 37 |
| 8 | White | E | 21 |
| 9 | Black | A | 45 |
| 10 | Red | B | 36 |
| 11 | Orange | C | 48 |
| 12 | Yellow | D | 35 |
| 13 | Green | CLK | 2 |
| 14 | Blue | LAT | 47 |
| 15 | Purple | OE | 14 |
| 16 | White | GND | GND |
Standard HUB75 Pinout Reference
Top Row (Pins 1-8):
ββββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ
β R1 β G1 β B1 βGND β R2 β G2 β B2 β E β
ββββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ
Bottom Row (Pins 9-16):
ββββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ¬βββββ
β A β B β C β D βCLK βLAT β OE βGND β
ββββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ΄βββββ Wrong Colours Are a Setting, Not a Rewire
The six colour pins β R1 G1 B1 R2 G2 B2 β carry no meaning in the wire. Which colour arrives on which pin is decided by the RGB channel order, a setting on the Hardware tab. So if your colours come out wrong, do not unplug anything: change the order and reboot.
What "wrong" looks like: orange renders pink, sky renders teal, yellow renders violet β the image is sharp and correctly positioned, only the hues are off.
- Hardware β Test pattern. Three bars labelled R, G and B.
- If a letter sits on the wrong colour, pick the order that matches what you see.
- Save and reboot. Repeat if needed β there are only six permutations, and the test pattern identifies the right one immediately.
This is also why the two boards need no separate wiring: the MatrixPortal's connector happens to present green and blue transposed, so its default order is RBG where the generic board's is RGB. Same pins, different label β and both are just the factory value of a setting you can change.
Which setting fixes which problem
| What you see | Fix |
|---|---|
| Colours wrong, whole panel consistently | RGB channel order. One permutation, six options, test pattern identifies it in seconds |
| Colours wrong on the top half only, or bottom only | Custom pin map β swap those two GPIO values |
| Blank, garbled, half-lit, or interleaved rows | Not a colour fault. Check the address/control wiring (A B C D E, CLK, LAT, OE), the panel arrangement, and the panel driver chip |
Panel Arrangement
Which panels you attached is a setting, on the Hardware tab, applied on reboot. One firmware drives all three arrangements.
| Setting | Panels | Pixels |
|---|---|---|
| 128Γ32 β 2Γ 64Γ32 panels, chained | 2Γ 64Γ32 side by side | 128Γ32 |
| 128Γ64 β 4Γ 64Γ32 panels, 2Γ2 grid | 4Γ 64Γ32 in a 2Γ2 serpentine | 128Γ64 |
| 128Γ64 β 2Γ 64Γ64 chained, or one 128Γ64 module | 2Γ 64Γ64 side by side, or a single 128Γ64 module | 128Γ64 |
A single 128Γ64 module uses the 2Γ 64Γ64 setting
If your display is one 128Γ64 module with a single HUB75 connector rather than two chained 64Γ64 panels, choose the 2Γ 64Γ64 chained, or one 128Γ64 module setting. There is no separate option, and none is needed β the driver only ever uses the panel width and the chain length multiplied together, and both descriptions give 128 pixels per row. The only physical difference is the cabling: one connector instead of two with a ribbon between them.
One exception is worth knowing about, and it is scan type rather than panel count: a minority of 128Γ64 modules use a non-standard internal scan map (typically 1/16-scan "outdoor" panels) and need a remap this firmware does not currently apply. You cannot identify these from the pixel dimensions. The symptom is distinctive β interleaved or garbled rows, where the image is there but shredded.
Panel Chain Order
The two chained arrangements β 2Γ 64Γ32 and 2Γ 64Γ64 β put the panels side by side. Getting the order right matters: reversing them causes a split or mirrored image. (The 2Γ2 grid chains in a serpentine instead, and a single 128Γ64 module has no chain at all.)
Back of panels (facing you)
ββββββββββββββββ ββββββββββββββββ
β Panel 1 β β Panel 2 β
β β β β
β IN βββ OUT ββΌβββββΌβ IN OUT β
ββββββββββββββββ ββββββββββββββββ
β²
β HUB75 cable
β
[Controller Board] - Connect the controller's HUB75 output to Panel 1 IN (left panel, viewed from behind)
- Connect Panel 1 OUT to Panel 2 IN using a short HUB75 ribbon cable
- Panel 2 OUT is unused
Power Connections
SpojBoard draws 0.3-0.7A during normal operation, with transient peaks up to 1.6A during WiFi connection, OTA updates, or boot.
MatrixPortal S3
- Connect panels to MatrixPortal's screw terminals (5V/GND)
- Connect USB-C to MatrixPortal (5V 2A+ adapter)
- USB-C powers both MatrixPortal and panels via screw terminals
ESP32-S3 N8R2
- LED panels require their own 5V power supply (2A+ minimum) via screw terminals
- The same PSU can also power the ESP32-S3 (connect to ESP32's 5V/GND pins)
- Or power ESP32 separately via USB (ensure common GND with panels)
Power Topology Comparison
MatrixPortal S3 (Serial)
USB-C β MatrixPortal β Panels
(passes power through) USB-C powers the board, which passes power to panels via screw terminals.
ESP32-S3 N8R2 (Parallel)
ββ ESP32-S3
PSU 5V ββ€
ββ Panels ESP32-S3 cannot pass through enough current. PSU powers both in parallel.
Power Supply Recommendations
| Supply | Rating | Suitability |
|---|---|---|
| USB-C Wall Adapter | 5V 2A (10W) | β Adequate |
| USB-C Wall Adapter | 5V 3A (15W) | β Recommended |
| USB-C Wall Adapter | 5V 1A (5W) | β Insufficient |
| Screw Terminal PSU | 5V 2-3A | β For ESP32-S3 N8R2 |
Why Lower Than Specs?
Published HUB75 specs cite 4-6A at full brightness with all white LEDs. SpojBoard's real-world usage is much lower:
- Text displays use far fewer LEDs than solid colors
- Mixed colors draw less than white
- Default brightness (90/255 = 35%) reduces power
- Most pixels are black (off) in typical display
Troubleshooting
Colors are wrong
Do not rewire. Go to Hardware β Test pattern and change the RGB channel order β see Wrong Colours Are a Setting above. Only if the colours are wrong on one half of the panel is a pin change involved, and that is the custom pin map, still a setting.
Panel doesn't light up, or is scrambled
- Check the panel arrangement on the Hardware tab matches the panels you actually attached β two of the three options are 128Γ64
- Try a different panel driver chip; some panels need an FM6126A/ICN2038S-style init before they show anything
- On 64-high panels, confirm the E line is wired β without it the top and bottom halves show the same content
- Check panel has separate 5V power connected
- Verify GND connection between ESP32 and panel
- Check all 16 signal wires connected
Flickering or artifacts
- Ensure common ground between ESP32 and panel
- Check for loose connections
- Verify power supply provides sufficient current