I'm using an ESP32-S3 WROOM 1 N16 R8, a P10 RGB HUB75 32*16 1/4 scan panel, and an external 5-volt power supply with common ground. I'm using the ESP32 HUB75 MatrixPanel DMA library, and also tried the P10 fixed fork. The panel isn't working correctly, and I've been troubleshooting for a while. I've checked the wiring several times and tried different library settings, but I still can't get the display to work properly. Could someone please help me with the proper GPIO pin configuration for an ESP32-S3 with a P10 RGB HUB75 32 * 16 1/4 scan panel, correct wiring between them, any required library settings, and a working example sketch or test code?
Also, for the HUB75 address pins, should pins A, B, C, and D all be connected to the ESP32, or should any be tied to GND or left unconnected? If anyone has a working wiring diagram or pin mapping, I'd really appreciate it.
Thank you for your reply. I'm using a 5 volt 40 amp power supply for the LED panel and ESP32. My main code isn't working yet, so I tried a simple test sketch that cycles red, green, and blue every second. But even that doesn't work on my panel. Could you share a known working test sketch including the GPIO pin configuration and wiring for this type of panel? Any example known to work with this panel would be greatly appreciated.
As the ESP32 is a 3.3VDC device, there had better be either a second 3.3VDC PSU or a level converter; otherwise, the ESP32 may be toast.
As far as a test sketch, start with the blink sketch. That will verify the health of the ESP32. From there, add pin and code incrementally to verify all the LEDs work.
Two places to look for example code are (1) the library you are using and (2) this forum (search on "P10 RGB HUB75"). Not all topics on this forum are "solved" but it a good place to search.
Also, the manufacturer of the panel should have some kind of support or bulletin board question/answer forum. And finally, the internet... lots of good stuff mixed in with the bad stuff.
There could be several reasons for this. The most likely one is that most so-called "4-scan" panels use non-standard pixel mapping—meaning the pixels aren't arranged in simple horizontal rows but in various zigzag patterns. You need to configure the library specifically for your panel.
Additionally, your panel might use a non-standard row driver.
If you are using an ESP32-HUB75-MatrixPanel-DMA library, I can help you. I recommend first reading discussion #622 and then opening an issue on the library's GitHub repository.
This panel can also be run on other boards—STM32 and RP2040.
I'm using an ESP32-S3 dual USB-C WROOM-1 N16R8.
Panel, P10 RGB 35354S 32 by 16 exterior, marked HUB75-D, back label P10 RGB 3535 4S 3.0, and one of the driver ICs is labeled DP5125D.
Library, ESP32-HUB75 MatrixPanel DMA Display by Mr. Codetastic version3.0.14.
Wiring, R1 to GPIO4, G1 to 5, B1 to 6, R2 to 7, G2 to 15, B2 to 16, A to 17, B to 18, C to11, D not connected, CLK to 8, LAT to 9, OE to 10, and common ground connected.
Power supply 5V 40A.
When I run the simple test sketch that cycles red, green, blue, and white, only two horizontal lines in the upper part change color correctly. The rest of the panel mostly stays off, sometimes shows garbled or random colors, or it freezes.
I'll compare my code with the library examples, read discussion number622 on the library's GitHub, and investigate whether this panel needs a custom pixel mapping or row driver configuration. If anyone has experience with this specific panel or the DP5125D driver IC, I'd really appreciate any advice or recommended configuration.
Your problems aren't related to the 5135 driver, so you don't need to look for people with that driver.
First, you need to determine the type of multiplexer on the panel. Look carefully and write down what other chips are present on the matrix. If you post a clear photo of the back of the panel, I can show you which chips to check.
This list contradicts the code you posted above. Specifically, pin C isn't connected in your code, but it's listed here. Please only post the settings you actually use, otherwise I won't be able to help you.
To be honest with you guys, I'm still learning coding so I try different ways to make my panel work so to clarify, I always change the pins based on my code and I've seen different pin setups used by different people online. So I'm trying different pin combinations to see if the panel works or not
#include "ESP32-VirtualMatrixPanel-I2S-DMA.h"
// Custom class to remap pixels for your 1/4-scan (4S) panel
// VARIANT 2: swapped if/else branches vs. the standard board707 formula.
// Try this if the standard formula (top ok / bottom garbled) didn't work.
class EightPxBasePanel : public VirtualMatrixPanel {
public:
using VirtualMatrixPanel::VirtualMatrixPanel;
protected:
VirtualCoords getCoords(int16_t x, int16_t y);
};
inline VirtualCoords EightPxBasePanel::getCoords(int16_t x, int16_t y) {
coords = VirtualMatrixPanel::getCoords(x, y);
if (coords.x == -1 || coords.y == -1) {
return coords;
}
uint8_t pxbase = 8; // pixel base for 32x16 1/4 scan
// --- swapped branches vs. the original formula ---
if ((coords.y & 4) == 0) {
coords.x = (coords.x / pxbase) * 2 * pxbase + 7 - (coords.x & 0x7);
} else {
coords.x += ((coords.x / pxbase) + 1) * pxbase;
}
coords.y = (coords.y >> 3) * 4 + (coords.y & 0b00000011);
return coords;
}
// Panel configuration
#define PANEL_RES_X 32
#define PANEL_RES_Y 16
#define NUM_ROWS 1
#define NUM_COLS 1
#define VIRTUAL_MATRIX_CHAIN_TYPE CHAIN_TOP_RIGHT_DOWN
MatrixPanel_I2S_DMA *dma_display = nullptr;
EightPxBasePanel *FourScanPanel = nullptr;
void setup() {
Serial.begin(115200);
delay(250);
Serial.println("1/4 Scan Panel Test - Variant 2 (swapped branches)");
// Your ESP32-S3 pins (A and B only - this panel has just 2 address lines)
HUB75_I2S_CFG::i2s_pins _pins = {
4, // R1
5, // G1
6, // B1
7, // R2
15, // G2
16, // B2
17, // A
18, // B
-1, // C (not present on this panel)
-1, // D (not present on this panel)
-1, // E (not used)
8, // CLK
9, // LAT
10, // OE
};
HUB75_I2S_CFG mxconfig(
PANEL_RES_X * 2, // DO NOT CHANGE - required by the remap trick
PANEL_RES_Y / 2, // DO NOT CHANGE
NUM_ROWS * NUM_COLS,
_pins
);
mxconfig.clkphase = false; // flip to true if colors/columns look shifted
dma_display = new MatrixPanel_I2S_DMA(mxconfig);
dma_display->setBrightness8(90);
if (!dma_display->begin())
Serial.println("!!! I2S memory allocation failed !!!");
dma_display->clearScreen();
delay(500);
FourScanPanel = new EightPxBasePanel(
(*dma_display), NUM_ROWS, NUM_COLS, PANEL_RES_X, PANEL_RES_Y,
VIRTUAL_MATRIX_CHAIN_TYPE
);
}
void loop() {
FourScanPanel->fillScreen(FourScanPanel->color565(255, 0, 0));
delay(2000);
FourScanPanel->fillScreen(FourScanPanel->color565(0, 255, 0));
delay(2000);
FourScanPanel->fillScreen(FourScanPanel->color565(0, 0, 255));
delay(2000);
FourScanPanel->fillScreen(FourScanPanel->color565(255, 255, 255));
delay(2000);
}```
I saw that thread and tried it, but got the same result. I also tried several other methods, but ran into the same issue at this point I'm giving up on this panel i spent a lot of time trying to make it work but I don't think it's worth it to keep trying.
Thanks for everyone's time and support.
@dawxdaw
Do not stop now.
Your all attempts failed because you didn't know a right way to do it.
I am ready to help you. I have extensive experience and have already helped people set up and launch dozens of similar panels.
All that's required of you is to simply do what I say.
To save our time while you answer about the chip I mentioned above, I'll tell you what you need to do next.
Download the library example called Pixel_Mapping_Test and prepare to run it on your panel.
Don't change anything in the code except for setting the pins if the default connection doesn't suit you. However, it's best to use the ESP32-S3 default pins defined in the library.
Please note that you must specify all of the ABCD pins al least up to D and actually connect them to your panel in accordance with the numbers specified in the config.
I tried the Pixel Mapping Test example with the default ESP32 S3 pin mapping and didn't change anything else. I'm seeing the same result. Only the lower half shows a single blue line pattern for about 5 seconds, then it goes black for 5 seconds, then repeats. I can't upload the video