Our project is a fully-custom MIDI microcontroller that we designed on a PCB. The system integrates a key-switch matrix, a DAC-based audio output chain, and several user controls into a board powered over USB-C. Using an ESP32-S3 microcontroller, the device supports real-time audio sensing, MIDI note generation, and sound synthesis, allowing for direct integration with DAWs or standalone operation through the connected speaker.
We developed this end-to-end from designing, fabricating, assembling, and testing the PCB.
Our project centers on building a functional MIDI-capable synthesizer controller implemented entirely on a custom-etched PCB. We used KiCad for several of our steps, including schematic design, symbol and footprint selection, and routing. Particular attention was given to proper grounding strategy, the ESP32-S3 antenna keep-out region, decoupling placement, and controlled power regulation for our DAC and amplifier subsystems.
At the core of our board is the ESP32-S3-WROOM-1, which manages all digital communication buses and user interface inputs. The microcontroller continuously scans the mechanical key-switch matrix, arranged in row–column format with diode isolation, to detect key presses. Each detected input is converted into the appropriate MIDI message (Note On/Note Off), allowing the device to behave like a standard MIDI controller when connected to a computer via USB-C.
In addition to key input, the board a couple sensing features:
Keycaps and switches to produce notes and special effects
A slide potentiometer to control volume
Switch to allow selecting between the “MIDI” and “SYNTH” modes
For audio output, the system uses an MCP4725 DAC to generate analog signals over I²C. This signal is routed into a PAM8302/ MAX98357 amplifier and ultimately drives the onboard AS04504PR-WP speaker.
Sensing: Our board reads user input through the mechanical 2 x 6 key-switch matrix scanned by the ESP32-S3
Compute: The ESP32-S3-WROOM-1 handles matrix scanning, interprets user controls, processes microphone data, and generates MIDI or synthesized audio. It manages I²C communication with the DAC while also supporting USB MIDI over the USB-C interface.
Power Management: Receives 5V from the USB-C connector and regulates it to 3.3V using the LD1117 LDO. Decoupling capacitors and protection components are also included to deliver stable power to the microcontroller, DAC, and amplifier circuits.
Output: Produces audio through the MCP4725 DAC and PAM8302/MAX98357 amplifier chain, driving the speaker for sound output. Alternatively, the device sends USB MIDI messages directly to a computer or DAW for external sound generation.
Sensing: Keyboard Switches, Mode Toggle Switch, Slide Potentiometer
2. Compute: ESP32-S3-WROOM-1
3. Power: Voltage Regulator, USB-C Input, Capacitors
4. Output: DAC Amplifier, Speaker
USB Recepticle
ESP-32
Power Supply
Mechanical Key-Switch Matrix
Speaker and Power Amplifier
Potiometer Continuous Input
Mode Toggle/LED Status
Project Flow:
User presses a key → matrix scanning detects it
ESP32 interprets the input → decides MIDI action or synthesizes audio depending on Mode Switch
Audio samples transmitted via I²S → MAX98357A amplifier
Amplified signal → drives speaker for local sound output
MIDI data via USB-C → computer/DAW for external sound generation
Power path (USB-C → LDO → 3.3V) supports the entire board with for stable power input