Schematik build
ESP32 RGB Matrix Display
Schematik
Published August 4, 2026 · Updated August 4, 2026

This project builds a 64x32 RGB LED matrix display driven by an ESP32 microcontroller. The display uses the HUB75 protocol, a standard interface for addressable LED panels that allows the ESP32 to control thousands of individual pixels with smooth color mixing and animation capabilities.
The guide provides a complete wiring diagram showing how to connect the HUB75 signals directly to ESP32 GPIO pins, a full parts list, and step-by-step assembly instructions. Included firmware demonstrates text rendering and pixel-level control, giving makers a foundation for building custom displays, information dashboards, or interactive art installations.
Wiring diagram
Interactive · read-only
Pan and zoom to explore the wiring. Remix the project to edit it in your own workspace.
Parts list
Bill of materials| Component | Qty | Notes |
|---|---|---|
| 64x32 RGB LED Matrix - 5mm pitch64 × 32, HUB75, 1/16 scan | 1 | 2048-pixel RGB LED matrix panel, 64x32 at 5 mm pitch, with dual IDC connectors for chaining. Requires 13 digital pins and a 5V supply; designed for video wall applications. |
| Regulated 5 V 4 A DC power supply5 V, 4 A minimum | 1 | Isolated regulated 5 V DC supply for the HUB75 panel and level shifters. Use a supply rated at least 4 A, with an appropriate terminal adapter for the panel's 5 V input. |
Assembly
4 stepsIdentify the panel input
With all power disconnected, place the Waveshare matrix face down and locate the HUB75 connector marked IN. Use only this connector for the single 64×32 panel; do not use OUT.
- Tip: Keep the ribbon cable’s stripe and the panel’s pin-1/arrow marking aligned.
- Tip: Follow the signal labels printed on the panel instead of relying on connector orientation.
- ⚠ Never connect or remove the HUB75 ribbon cable while the panel or ESP32 is powered.
Wire HUB75 signals directly to the ESP32
Connect the panel HUB75 IN signals directly to the ESP32: R1→GPIO25, G1→GPIO26, B1→GPIO27, R2→GPIO14, G2→GPIO13, B2→GPIO32, A→GPIO33, B→GPIO4, C→GPIO16, D→GPIO17, CLK→GPIO18, LAT→GPIO23, and OE→GPIO19. Connect every HUB75 GND pin to ESP32 GND.
- Tip: Keep the signal wiring short and label each wire.
- Tip: The 64×32 1/16-scan panel does not use HUB75 row-address E.
- ⚠ This direct connection relies on the specific panel accepting 3.3 V ESP32 logic. If the display is unstable, dim, shows wrong colors, or does not respond, reinstall a proper 5 V-tolerant level buffer.
Connect the dedicated panel power
Connect the regulated supply’s +5 V and GND directly to the matrix panel’s dedicated power input using adequately sized wire. Connect the supply GND to ESP32 GND so the direct signal connections have a shared reference.
- Tip: Use a regulated 5 V supply rated for at least 4 A.
- Tip: Verify polarity with a multimeter before connecting the panel.
- ⚠ Do not power the matrix through the ESP32 USB cable, ESP32 5 V/VIN pin, or breadboard power rails.
- ⚠ Do not connect the panel’s 5 V rail to any ESP32 GPIO or 3.3 V pin.
Inspect before power-up
Confirm the ribbon cable is on the panel’s IN connector, all grounds are common, +5 V and GND are not reversed, and each direct GPIO connection matches the listed HUB75 label. Power the ESP32 by USB and the panel from its dedicated 5 V supply.
- Tip: The first display should read “WAVESHARE HUB75” and “ESP32 READY” with a colored line at the bottom.
- Tip: Use Schematik’s Deploy button to flash the included firmware.
- ⚠ If the panel remains dark or erratic, turn off both supplies before changing wiring.
Pin assignments
Board wiring reference| Pin | Connection | Type |
|---|---|---|
| EXT | panel_supply AC_IN → Certified mains outlet using the supply's provided AC lead | power |
| GND | panel_supply GND | ground |
| GND | matrix_64x32 GND | ground |
| 5V | panel_supply +5V | power |
| 5V | matrix_64x32 VCC | power |
| GPIO 25 | matrix_64x32 R1 | digital |
| GPIO 26 | matrix_64x32 G1 | digital |
| GPIO 27 | matrix_64x32 B1 | digital |
| GPIO 14 | matrix_64x32 R2 | digital |
| GPIO 13 | matrix_64x32 G2 | digital |
| GPIO 32 | matrix_64x32 B2 | digital |
| GPIO 33 | matrix_64x32 A | digital |
| GPIO 4 | matrix_64x32 B | digital |
| GPIO 16 | matrix_64x32 C | digital |
| GPIO 17 | matrix_64x32 D | digital |
| GPIO 18 | matrix_64x32 CLK | digital |
| GPIO 23 | matrix_64x32 LAT | digital |
| GPIO 19 | matrix_64x32 OE | digital |
Firmware
ESP32#include <Arduino.h>
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
// Forward declarations
void drawStartupScreen();
constexpr int PANEL_RES_X = 64;
constexpr int PANEL_RES_Y = 32;
constexpr int PANEL_CHAIN = 1;
// Direct ESP32-to-HUB75 connections.
constexpr int R1_PIN = 25;
constexpr int G1_PIN = 26;
constexpr int B1_PIN = 27;
constexpr int R2_PIN = 14;
constexpr int G2_PIN = 13;
constexpr int B2_PIN = 32;
constexpr int A_PIN = 33;
constexpr int B_PIN = 4;
constexpr int C_PIN = 16;
constexpr int D_PIN = 17;
constexpr int CLK_PIN = 18;
constexpr int LAT_PIN = 23;
constexpr int OE_PIN = 19;
HUB75_I2S_CFG::i2s_pins panelPins = {
R1_PIN, G1_PIN, B1_PIN, R2_PIN, G2_PIN, B2_PIN,
A_PIN, B_PIN, C_PIN, D_PIN, -1,
LAT_PIN, OE_PIN, CLK_PIN
};
HUB75_I2S_CFG matrixConfig(PANEL_RES_X, PANEL_RES_Y, PANEL_CHAIN, panelPins);
MatrixPanel_I2S_DMA *matrix = nullptr;
void drawStartupScreen() {
matrix->fillScreen(matrix->color565(0, 0, 0));
matrix->setTextWrap(false);
matrix->setTextSize(1);
matrix->setTextColor(matrix->color565(255, 60, 20));
matrix->setCursor(1, 2);
matrix->print("WAVESHARE HUB75");
matrix->setTextColor(matrix->color565(30, 190, 255));
matrix->setCursor(8, 13);
matrix->print("ESP32 READY");
for (int x = 0; x < PANEL_RES_X; ++x) {
const uint16_t color = matrix->color565((x * 4) % 256, 255 - (x * 4), 120);
matrix->drawPixelRGB565(x, 28, color);
matrix->drawPixelRGB565(x, 29, color);
}
}
void setup() {
matrixConfig.clkphase = false;
matrix = new MatrixPanel_I2S_DMA(matrixConfig);
matrix->begin();
matrix->setBrightness8(64);
drawStartupScreen();
}
void loop() {
// DMA maintains the display refresh; no redraw is necessary for this static screen.
delay(1000);
}“Deploy to device” opens this project in Schematik, where you can flash it to your board over USB.
Project files
Shared by the authorRemix this project
Make it yours in one click
Open a full copy of this project in your own Schematik workspace — diagram, code, parts, and assembly steps included. Swap the sensor, add features, or redesign the whole thing with AI. The author's original stays untouched.


