← PatternflowBreadboard Edition
Open-source LED synthesizer

Patternflow
Breadboard Build Guide

Build the whole thing with no custom PCB — just one snapped-off breadboard power strip and a handful of jumper wires. This guide leads with the picture, because the wiring is the hard part.

⏱ ~1 h 30 min◇ Beginner-friendly⚙ No soldering iron required*
Flash the firmware first

Flashing is fiddly once everything is wired into a tangle of jumpers. Connect the bare ESP32-S3 to your computer via USB-C, visit patternflow.work, and click “Flash Patternflow OS” in the Patterns section (Chrome / Edge desktop). Confirm it boots — then start the build.

Prefer Arduino IDE? See official guide Section 8.2 for board settings and upload steps.

🖨 3D-printed enclosure: Print the case before you start wiring — it takes ~11 hours. STL files and print settings are in the official Build Guide — Sections 2 & 3. A cardboard box with four holes for the encoder shafts works too.

Bill of Materials

No PCB, no SMD parts, no soldering iron. Everything plugs together with Dupont jumper wires.

QtyItemSpec / Notes
ESP32-S3 DevKitCN16R8 (16 MB Flash, 8 MB PSRAM), 44-pin, 25.4 mm header spacing. PSRAM required.
HUB75E LED matrix128×64 px, P2.5, 320×160 mm. Driver IC must be 74HC595, FM6126A, or FM6124. Ships with ribbon cable + power cable — both used as-is.
Rotary encoder (EC11)5-pin, with click-switch. Recommended: PEC11R-4220F-S0024. Any click-capable EC11 works — the cheap AliExpress 5-packs are fine.
Breadboard power railSnap the +/− rail strip off any standard breadboard. Only this strip is used — the main breadboard body is not needed.
~40×Dupont jumper wiresMix of M–F and M–M. 20 cm length recommended. Color-coded packs help but any color works.
USB cable (sacrificial)Any USB cable — will be cut and stripped for 5 V power input.
Power bankAny standard USB power bank that fits inside the enclosure.
+Tools & extrasHot-glue gun, wire strippers, enclosure (3D-printed or cardboard — see note below).
⚠️ Panel compatibility: Panels with FM6363C / FM6373C driver ICs (“3840 Hz” / “needs a receiving card”) will not work. Stick with 74HC595 / FM6126A / FM6124 panels. Full compatibility details →
🛒 Sourcing tips
LED Matrix — AliExpress ↗ (affiliate link — purchasing through this link supports Patternflow development at no extra cost. Even if you buy a different item through this link, the commission helps. Thank you!)
ESP32-S3 — Buy a genuine Espressif module. AliExpress clones can have cold-boot issues.
Rotary encoders — Cheap AliExpress encoders break easily. Get PEC11R-4220F-S0024 or equivalent from Mouser / DigiKey for reliability.

* No soldering required if your encoders accept Dupont leads. You will strip two power leads (USB + panel power) — a hot-glue joint is enough.

The one diagram to keep open

Master wiring map

Everything in its real place: four encoders in a square on the left, the ESP32-S3 in the middle (USB at top), the HUB75E lying on its side on the right with pin 1 at the top-right, and the power rail running along the bottom.

ENCEncoder 1ENCEncoder 2ENCEncoder 3ENCEncoder 4ROTARY ENCODERSESP32HUB75E2×8 Pin HeaderBREADBOARDSignal JumpersGND JumpersSignal JumpersGND Jumpers5V / GND Jumpers

Build Steps

1

Prep, mount, & connect encoder grounds

Plug a short jumper onto every pin of all four encoders first — any length you have on hand is fine. Fix the encoders into the enclosure so they can’t twist while you work, placing them in a square: ENC1 top-left, ENC2 top-right, ENC3 bottom-left, ENC4 bottom-right (holding each with the 3-pin side on the left, 2-pin side on the right).

Next, snap the +/− rail off the side of a breadboard — that little strip is the only breadboard you need. Pull just the ground wires out from the encoders (labeled GND on the left and right sides of each encoder) and land them all on the ground () rail of the breadboard. Leave the signal legs hanging; they go straight to the ESP32 later.

+BREADBOARDENC1GNDGNDENC2GNDGNDENC3GNDGNDENC4GNDGND

↑ Ground (GND) pins on both sides of all four rotary encoders land on the Ground () rail of the breadboard.

Encoders mounted with GND wires connected to the breadboard rail

↑ Encoders fixed, GND wires on the − rail.

2

ESP32 ↔ HUB75E (the colored numbers)

This is the big one — do it next while your wires are still tidy. If your ribbon of long jumpers is fresh, peel it into strips of 8 and only separate the very ends; the bundle stays neat. Go one row at a time: connect the red numbers (1→8) first, then the blue numbers (1→6). The two Ground pins (GND) on the bottom row connect directly to the ground () rail on the breadboard—you can plug them into any available holes along the ground column.

HUB75EESP32+GNDGNDBREADBOARD123456781GND23456GND3V33V3RSTIO4IO5IO6IO7IO15IO16IO17IO18IO8IO3IO465IO9IO10IO114IO125IO134IO1485VGNDGNDTXRXIO1IO27IO421IO411IO402IO392IO383IO37IO36IO35IO0IO45IO486IO476IO213IO20IO19GNDGND

↑ U1 (ESP32-S3) on the left, and J1 (HUB75E) on the right. Wire the pins that share the same color-coded labels (e.g. R1, B1, A, B...).

ESP32-S3 connected to the HUB75E LED matrix via ribbon cable

↑ ESP32-S3 with HUB75E jumpers connected.

3

Encoder signals → ESP32

Now land the signal legs you left hanging. Work by signal type, not by encoder — all four A’s, then all four B’s, then all four SW’s. The pins sit together on the board that way, so the wiring stays orderly. (Bonus: the four A’s land on consecutive pins 4·5·6·7.)

ESP323V33V3RSTIO41AIO52AIO63AIO74AIO152SIO163BIO173SIO184BIO81BIO3IO46IO91SIO102BIO11IO12IO13IO145VGNDGNDTXRXIO14SIO2IO42IO41IO40IO39IO38IO37IO36IO35IO0IO45IO48IO47IO21IO20IO19GNDGNDSW1ENC1A1ACGNDB1BS11SS2GNDSW2ENC2A2ACGNDB2BS12SS2GNDSW3ENC3A3ACGNDB3BS13SS2GNDSW4ENC4A4ACGNDB4BS14SS2GND

↑ Four rotary encoders on the left, and ESP32 on the right. Wire the signal channels (A, B, SW) to their matching colored tags (e.g. 1A, 2A...).

All encoder signal wires routed routed into the case alongside the LED panel

↑ Encoder A, B, SW wires all connected.

4

Power it

Strip the LED panel’s thick power leads and strip any spare USB cable. Twist each onto a jumper — red to +, black to — and push them into the rail. The ESP32’s own 5V and GND pins tie into the same two rails, so one 5 V supply feeds everything. A dab of hot glue keeps the bare joints from slipping.

+BREADBOARDESP325VGND5V USB SUPPLYHUB75E POWER INPUT5V JointGND Joint
Stripped USB and LED panel power wires being twisted onto jumpers

↑ Power leads stripped and twisted onto jumpers.

5

Close the case

Tuck the rail and the wire bundles down, seat the LED panel against the front window, and put the lid on. Plug in the supply — the matrix should light up and the encoders should respond. That’s a full Patternflow with zero custom hardware.

Tuck wires flat.

Tuck wires flat.

Put the lid on.

Put the lid on.

Plug in power bank.

Plug in power bank.

It's alive! 🎉

It's alive! 🎉

📖 Official Build Guide — For 3D printing, case bonding, PCB assembly, known issues, and troubleshooting, see the full guide:
github.com/engmung/Patternflow — BUILD_GUIDE.md ↗