m60 Split — 5×12 Split LEGO Keyboard
Status: Tested & Verified
5×12 Split (2× 5×6)
2× STM32F401 / F411 BlackPill
Dual Encoders + RGB Underglow
QMK

An ergonomic 5×12 split ortholinear keyboard mounted on two 16×16 LEGO baseplates, featuring dual rotary encoders (one per half) and addressable RGB underglow.
Status: Tested All OK
* [x] Gerbers designed
* [x] Firmware
* [x] Breadboard tested
* [x] Gerbers printed
* [x] Board tested
Features
- Layout: 5×12 split (two 5×6 halves, 60 keys total)
- Controllers: 2× WeAct
STM32F401(Rev 1) orSTM32F411(Rev 2) BlackPill - Peripherals: 1× rotary encoder per half, RGB underglow strip, 4× status LEDs
- Interconnect: Direct 3-wire serial cable via angled 3-pin JST XH 2.54 mm connectors
- Firmware: QMK with TinyUF2 bootloader support
Renders & PCBs
Left & Right Printed PCBs

KiCad Left & Right Layout

3D Render (Left Half)

BOM
- 2× WeAct
STM32F401(orSTM32F411) BlackPill boards with headers - 2× 40-pin DIL/DIP sockets
- 60×
1N4148signal diodes (DO-35 through-hole) - 60× 5-pin Cherry MX–compatible switches
- 2× EC11 rotary encoders
- Resistors:
- 3× 4.7 kΩ (
R1andR2on left half;R1on right half) - 2× 100 kΩ (
R5on left half;R4on right half) - 4× 220 Ω LED resistors (
R3,R4on left half;R2,R3on right half — adjust to match LED color/brightness)
- 3× 4.7 kΩ (
- 4× status indicator LEDs
- 2× angled 3-pin JST XH 2.54 mm connectors (plus matching direct, non-crossed interconnect cable)
- Optional: 2× additional 3-pin JST connectors and 3-pin addressable LED strips
- 2× LEGO 16×16 baseplates and perimeter plates/bricks
Case & Assembly
- LEGO Enclosure: See the m65 Case & Thickness section for LEGO plate stacking details.
- Soldering & Build: Follow the step-by-step Assembly Guide.
Gerbers & KiCad
Production-ready Gerbers for JLCPCB:
Full KiCad project files are available in m-lego/m60_split on GitLab (shared footprints in m-lego/m65).
Firmware
Ensure both BlackPill boards are flashed with the TinyUF2 bootloader.
Rev 1 (`STM32F401`)
Download prebuilt UF2: mlego_m60_split_rev1_default.uf2
git clone --recurse-submodules -b mlego https://github.com/qmk/qmk_firmware.git qmk-alin
cd qmk-alin
qmk compile -kb mlego/m60_split/rev1 -km default
Rev 2 (`STM32F411`)
Download prebuilt UF2: mlego_m60_split_rev2_default.uf2
git clone --recurse-submodules -b mlego https://github.com/qmk/qmk_firmware.git qmk-alin
cd qmk-alin
qmk compile -kb mlego/m60_split/rev2 -km default
Pinout Reference
- Left Half:
- Columns:
B14,A10,A15,B3,B4,B5 - Rows:
B0,A6,A7,B1,A5
- Columns:
- Right Half:
- Columns:
B0,A3,A2,A1,B7,B5 - Rows:
B1,A4,A5,A6,A7
- Columns:
- Encoders:
Pad_A = A0,Pad_B = A8 - Split Communication:
SPLIT_HAND_PIN = B9,SERIAL_USART_TX_PIN = B6
| Indicator / RGB | Pin |
|---|---|
NUM_LOCK |
B12 |
CAPS_LOCK |
C13 |
SCROLL_LOCK |
B13 |
RGB_DI |
B15 |
Community Builds
Builds by Seth (u/modularsynth123456):
