ESP32 SmartMatrix - How to use external latch for single 64x32 Matrix to use fewer IO Pins

Hey there,

i use an ESP32-DevKit-C board and the default wiring (GPIOPINOUT == ESP32_FORUM_PINOUT in MatrixHardware_ESP32_V0.h to hook up my single 64x32 RGB-Matrix with default HUB75 connector just fine and without any issues.

Now, as my project continues to grow, i hit the problem that i ran out of free IO pins and search a way to decrease the amount of used IOs and hit some options in the EPS32 port wiki but unfortunately i do not understand everything and have some questions left.

I read this block (Quoted from ESP32 Port · pixelmatix/SmartMatrix Wiki · GitHub):

Look at the MatrixHardware_ESP32_V0.h and other MatrixHardware_ESP32* header files for other hardware options, including some easily assembled THT boards with level shifters meant for driving LED strips, but possible to wire up to a HUB75 connector. This kit on Tindie (also available assembled) is an option to connect up an ESP32 to a panel - though note it doesn’t have 5V level shifters.

Some panels won’t work with the 3.3V levels output by the ESP32, and you’ll need 5V level shifting buffers like the SmartLED Shield designs use.
Additionally, the shields have some other features that make them preferable to using just an ESP32 (and optionally level shifting buffers):

  • The 5x ADDX lines are output using the RGB data lines and stored using an external latch, freeing up more pins on the ESP32
  • With the addition of the external latch, there are only 8 bits of data to output via I2S, and so each clock cycle’s data fits into a uint8_t instead of uint16_t. With the I2S peripheral in 8-bit mode instead of 16-bit mode, the amount of RAM used to store refresh buffers is cut in half
  • Wiring is so much easier

I’m looking at the second block and the first bullet point: My panel works fine with the 3.3V logic signals from the ESP32, so now I’m only interested in the part with freeing up some IOs by using an external latch for the RGB data lines.
The SmartLEDShield-ESP32-THT, or the SMT one, should do the trick, but they also contain the level shifting and stuff.

I wondered, can i reduce the shield to a minimum and use only the external latch to archive the freeing up of IOs and “ignore” the other stuff provided by the shield. I’m fine with soldering a custom board together ^^
Also looking again at the MatrixHardware_ESP32_V0.h file, what is meant by the HUB75_ADAPTER_LATCH_BREADBOARD_PINOUT as GPIOPINOUT? For me this read like an prototyping option of just using a latch on a breadboard, so just like that what i want to archive ;).

So, to sum up:
Do you have some ideas of driving the matrix with an external latch to use less IOs? What hardware and software changes do i need to do this?

Greetings from Germany (sorry for any spelling issues)