Final Project — Wireless MIDI Guitar

1. What I Built

The final project is a wireless MIDI guitar made of two custom boards, each built around a Seeed XIAO ESP32-S3, that talk to each other over ESP-NOW.

  • The transmitter is the controller board from Assignment 09. For this project I routed a pocket into the guitar body so the board sits inside the instrument instead of on the bench.
  • The receiver is a new PCB I designed and milled for this project. It listens for the guitar's ESP-NOW messages and forwards them on — as MIDI to a computer, or out to other instruments.

In short: the guitar generates the messages, sends them wirelessly, and the receiver decides where they go.

Two milled PCBs on a wooden surface: at the back, the guitar controller board with an OLED and an LED ring connected by wires; at the front, the new receiver board with an OLED, buttons and a XIAO ESP32-S3
The finished system — the guitar's controller board (back, with the OLED and the LED ring) and the new receiver board I designed for this project (front).

2. Scope — From Sequencer to Receiver

The original plan was a thermally-controlled sequencer, an extension of an earlier idea. Once I started laying it out I found it was too much to finish well in the time I had, so I narrowed the scope to one clear goal: a dedicated wireless receiver for the MIDI guitar, with the link between them running over ESP-NOW.

Cutting the scope was the right call. It gave me a project I could actually fabricate and test end to end — design a board, mill it, route the guitar to hold the controller, and get the two halves talking — instead of a larger idea left half-finished.

3. The Transmitter — Fitting the Board Inside the Guitar

The controller board already worked on the bench from Assignment 09: a XIAO ESP32-S3 reading a time-of-flight sensor, a rotary encoder and a button, driving an OLED and an LED ring. The job here was to get it inside the guitar.

The guitar controller board powered over USB-C, its OLED showing live distance and CC values, next to a SparkFun time-of-flight sensor mounted inside an LED ring
The transmitter on the bench — the OLED shows the live distance reading and the CC values it sends, with the time-of-flight sensor and LED ring alongside.

To do that I routed a pocket into the back of the body so the board would sit flush under the pickguard. I cut it at the Fablab with a drill press and a rotary tool, working out from the existing pickup and control routes.

A red Squier Mustang body on a workbench next to a drill press and a rotary tool, with a freshly routed lighter-coloured pocket cut into the wood
Routing the pocket at the Fablab. The lighter wood is the freshly cut cavity.
The red guitar body with the pickguard removed, showing the routed wood cavities for the pickups, controls and the new electronics pocket
Body with the pickguard off — the new pocket sits between the existing pickup and control routes.
The controller board seated inside the routed pocket in the guitar body, with copper-foil shielding visible on the cavity walls
The board dropped into the pocket. The cavity walls keep the copper-foil shielding from Assignment 09 to cut down on noise.
The guitar body lying flat with the controller board seated flush in its pocket, pickguard set aside
Board seated flush in the body and clearing the pickguard.

4. The Receiver — A New XIAO ESP32-S3 Board

The receiver is the new piece of hardware for this project. I designed it in KiCad around a second XIAO ESP32-S3, as a small standalone unit that sits on the desk and receives from the guitar, with a display, a couple of control buttons and a status LED. My first attempt was a bigger, more ambitious “pedal” version built around a larger 2.8" Newhaven NHD-2.8-240320AF TFT and a thermal camera, with a row of 3.5 mm jacks along the top for the outputs.

KiCad 3D viewer showing the first pedal-version receiver PCB, with a XIAO ESP32-S3 footprint at top-left, a large rectangular opening in the middle for the TFT, and a row of jack footprints across the top
The first “pedal” version in KiCad's 3D view — the large opening is for the 2.8" Newhaven TFT, with the 3.5 mm output jacks along the top and the XIAO ESP32-S3 footprint at top-left.

The Newhaven panel doesn't come up in I2C by default, so to drive it over two wires I had to desolder and resolder a configuration pin on the back of the breakout to select the I2C interface.

Close-up of the back of a green Newhaven NHD-2.8-240320AF TFT breakout board, with reworked solder near the ribbon connector where the interface-select pin was changed
Reworking the back of the Newhaven NHD-2.8-240320AF — desoldering and resoldering the interface-select pin to put the display into I2C mode.
Breadboard prototype of the pedal-version receiver: a XIAO ESP32-S3 and a SparkFun breakout wired to a large TFT display with many jumper wires
Breadboard prototype of the pedal version — the XIAO ESP32-S3 driving the big Newhaven TFT.

That first board didn't work out. I burned some of the components on it, and between the big screen and the extra 3.5 mm jacks there was a lot to populate and rework, so it was fiddly to work with. I simplified: I dropped the 3.5 mm jacks and the thermal camera, and swapped the Newhaven TFT for the same SSD1306 OLED I already used in the guitar — fewer parts, and a display I'd already gotten working. The Newhaven screen and the thermal camera went back to the Fablab, since the simpler receiver didn't need them. That left me with the redesigned receiver below.

KiCad PCB editor showing the redesigned receiver layout, with red copper traces routed on a single-sided board, M2 mounting holes in the corners, the XIAO ESP32-S3 footprint, a rotary encoder, two buttons and the display and sensor footprints
The redesigned receiver in KiCad's layout editor — single-sided routing with the XIAO ESP32-S3, the SSD1306 header, a rotary encoder and two buttons, and no more 3.5 mm jacks.
KiCad 3D render of the redesigned receiver board: a tall SSD1306 OLED module on the left, a rotary encoder in the middle, a XIAO ESP32-S3 with a USB-C port at top-right, and two large push-buttons at bottom-right
The same board in KiCad's 3D view — the SSD1306 OLED at left, a rotary encoder, two push-buttons and the XIAO ESP32-S3 (top-right, with its USB-C port). No big TFT cut-out and no 3.5 mm jacks.

With the simpler layout settled I milled the board on the Roland SRM-20 at the Fablab.

The Roland SRM-20 desktop mill cutting a copper-clad board, with copper dust over the surface
Milling the receiver board on the SRM-20.
Isolation routing the receiver board on the SRM-20.
Close-up of the receiver board being milled, the isolation traces showing as light lines in the copper
The receiver's traces taking shape in the copper.
Two copper boards in a clear tray: the freshly milled bare receiver board on the left and the populated guitar controller board on the right
Both boards in copper — the freshly milled receiver (left) and the populated controller board (right).

5. Linking the Two Boards over ESP-NOW

The two boards are joined with ESP-NOW, a peer-to-peer protocol built into the ESP32. It is connectionless and does not need a WiFi network or a router — each board only needs the other's MAC address to send short messages directly, with low latency. I first tried ESP-NOW in Assignment 10, and this project is where it earns its place.

The flow is one direction, guitar to receiver:

  1. The guitar reads its sensor and controls and packs the values into a small message.
  2. It sends that message over ESP-NOW to the receiver's MAC address.
  3. The receiver gets the message and turns it back into MIDI.
  4. The receiver routes that MIDI out — to a computer over USB, or on to connected instruments.

Splitting the work this way keeps the guitar simple — it only has to sense and send — and puts all the routing decisions on the receiver, which is the part that talks to the rest of the setup.

6. The Full System

Together the two boards make the wireless link work: the guitar on one side, the receiver on the other, and ESP-NOW carrying the messages between them so the receiver can hand them off to the computer or to instruments.

Walkthrough of the project — the transmitter and receiver, and the messages passing between them.

7. Reflection

The thing I'm most glad about is cutting the scope early. Trading the sequencer for a focused receiver gave me a project that goes from board design all the way to a working wireless link, rather than a bigger idea I couldn't finish.

What's left is mostly finishing work: an enclosure for the receiver, the larger TFT interface, and cleaning up the firmware on both ends. The hardware is in place and the two boards talk to each other, which was the goal for the final project.