Skip to the content
PCBKitNew board
2 layers63.5 × 44.4 mmMidi bff, the printed circuit board in 3D

QTPy MIDI BFF

Size
63.5 × 44.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
18
Nets
32
Pads
108
Tracks, vias
111, 0
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
31 Jul 2022
Updated
16 Jul 2026

Overview

Midi bff is an open-source printed circuit board by todbot, from the todbot/qtpy_midibff repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 63.5 × 44.4 mm with 18 parts on 32 nets, routed with 111 tracks and 0 vias.

It is built around the H11L1 and DIN-504. Its parts include 5 connectors, 4 resistors, 3 ICs, 1 capacitor and 1 diode. It belongs with the audio and music boards of this library.

Main components

2

README

README.md

qtpy_midibff

QTPy MIDI BFF — a small MIDI interface board for QTPy / Xiao class boards (RP2040 or compatible). The board breaks out the host MCU's hardware UART to standard MIDI IN and MIDI OUT jacks (TRS or 5-pin DIN).

Hardware

The PCB is meant for easy assembly using only through-hole components. It is essentialy a QTPy "doubler" with a standard MIDI In and MIDI Out circuit, with a 4-pin I2C header for a standard OLED display (usually 128x32 SSD1306).

Assembling

Coming soon.

Arduino sketches

Requires arduino-pico board core.

Set Tools > USB Stack: Adafruit TinyUSB before uploading any sketch.

Libraries needed (Arduino Library Manager):

midi_interface — USB-MIDI ↔ UART-MIDI bridge

arduino/midi_interface/

Forwards all MIDI between USB and UART in both directions. Includes scaffolding to filter or transform messages — uncomment the examples or add your own:

  • Drop realtime messages (clock, active sensing, etc.)
  • Transpose notes on a channel
  • Remap channels
text
arduino-cli compile \
  --fqbn rp2040:rp2040:adafruit_qtpy:usbstack=tinyusb \
  arduino/midi_interface

SysEx messages up to 127 bytes are forwarded. See the source for notes on larger SysEx.

midi_interface_oled — bridge with OLED display

arduino/midi_interface_oled/

Same bridge as midi_interface, with a 128x32 SSD1306 I2C OLED that displays each incoming message. Realtime messages (clock, active sensing) are forwarded but not shown, to avoid flicker.

text
arduino-cli compile \
  --fqbn rp2040:rp2040:adafruit_qtpy:usbstack=tinyusb \
  arduino/midi_interface_oled

midi_interface_msc — bridge with USB flash drive and config file

arduino/midi_interface_msc/

Extends midi_interface_oled with a USB Mass Storage device backed by the RP2040's internal flash (the filesystem partition). The drive contains a config.json file that controls runtime behaviour — no recompile needed to change settings.

json
{
  "name": "MIDI BFF",
  "manufacturer": "todbot",
  "filter_realtime": false,
  "transpose": 0
}

Edit config.json on the drive, eject it, then reset the board to apply the new settings. The filter_realtime and transpose fields are applied in both directions.

Requires a board Flash Size setting that includes a 1MB filesystem partition. Compile commands for each supported board:

text
# QTPy RP2040 (8MB flash)
arduino-cli compile \
  --fqbn rp2040:rp2040:adafruit_qtpy:usbstack=tinyusb,flash=8388608_1048576 \
  arduino/midi_interface_msc

# Xiao RP2040 (2MB flash)
arduino-cli compile \
  --fqbn rp2040:rp2040:seeed_xiao_rp2040:usbstack=tinyusb,flash=2097152_1048576 \
  arduino/midi_interface_msc

midi_interface_simple — simplified bridge for learners

arduino/midi_interface_simple/

Same USB-MIDI ↔ UART-MIDI bridge with the same filter/transform scaffolding, but with SysEx handling and advanced notes removed. A good starting point if you just want to read and modify the forwarding logic without the extra complexity.

text
arduino-cli compile \
  --fqbn rp2040:rp2040:adafruit_qtpy:usbstack=tinyusb \
  arduino/midi_interface_simple

CircuitPython sketches

Requires CircuitPython 9+ firmware on the board.

Libraries needed:

  • tmidi — copy tmidi.py to /lib/ on your device or install with circup tmidi
  • adafruit_ssd1306 — install with circup install adafruit_ssd1306 (OLED sketches only)

midi_interface — USB-MIDI ↔ UART-MIDI bridge

circuitpython/midi_interface/

Forwards all MIDI between USB and UART in both directions. Same filter/transform scaffolding as the Arduino version — uncomment the examples or add your own:

  • Drop realtime messages (clock, active sensing, etc.)
  • Transpose notes on a channel
  • Remap channels

SysEx messages up to 127 bytes are forwarded. Increase the sysex_buf_* bytearray sizes in the source to raise the limit.

Copy code.py to the root of your device, or copy the whole midi_interface/ folder and rename code.py to suit.

midi_interface_oled — bridge with OLED display

circuitpython/midi_interface_oled/

Same bridge as midi_interface, with a 128x32 SSD1306 I2C OLED that displays each incoming message. Realtime messages are forwarded but not shown, to avoid flicker. The sketch continues as a plain MIDI bridge if no display is connected.

Copy code.py to the root of your device, or copy the whole midi_interface_oled/ folder and rename code.py to suit.

Hardware

Schematic and PCB in schematics/midi_bff/ (KiCad).

Parts

18
QtyValueFootprintReferences
4MountingHoleMountingHole:MountingHole_2.5mmH1, H2, H3, H4
2DIN-504easyeda2kicad:CONN-TH_DIN-504-M10CN1, CN2
2PJ-320A-4P DIPeasyeda2kicad:AUDIO-TH_PJ-320A-4P-DIPJ1, J2
2~todbot_stuff:QTPY-DIPU1, U2
110Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1
1100nCapacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mmC1
11N4148Diode_THT:D_DO-34_SOD68_P7.62mm_HorizontalD1
1200Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR3
133Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR2
14.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR4
1H11L1Package_DIP:DIP-6_W7.62mm_Socket_LongPadsU3
1OLED-128x32kleeb-display:OLED-128x32J3

Questions

How big is the Midi bff PCB?

It measures 63.5 × 44.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Midi bff use?

18 parts, built around the H11L1 and DIN-504. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Midi bff KiCad files?

From the todbot/qtpy_midibff repository on GitHub, at the commit this page was made from: the board is schematics/midi_bff/midi_bff.kicad_pcb and its schematic schematics/midi_bff/midi_bff.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Midi bff design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers135.3 × 78.4 mmMseq, the printed circuit board in 3D

    Mseq

    MF-Room/mseq_pcb

    KiCad 10 hardware design for MSeq embedded, the microcontroller implementation of the MSeq MIDI sequencer.

    93 parts1CERN-OHL-S-2.0
  • 2 layers36 × 32 mmA1200KB DIN5, the printed circuit board in 3D

    A1200KB DIN5

    steveed/a1200kb-external-case

    Some ideas for using an external Amiga keyboard with an A1200 in a desktop or tower case.

    12 parts1
  • 4 layers60 × 94 mmDaisySeedPedal125b, the printed circuit board in 3D

    DaisySeedPedal125b

    bkshepherd/DaisySeedProjects

    A collection of hardware and software projects based around the Electro-Smith Daisy Seed

    80 parts559MIT
  • 2 layers245.2 × 100 mmV5 main, the printed circuit board in 3D

    V5 main

    zynthian/zynthian-hw

    Zynthian hardware stuff: PCBs, schemes, parts specifications, pin assignment, ...

    160 parts156
  • 2 layers64.3 × 56 mmMt32-pi midi hat, the printed circuit board in 3D

    Mt32-pi midi hat

    chris-jh/mt32-pi-midi-hat

    A Raspberry Pi Midi Hat for the project mt32-pi by Dale Whinham (https://github.com/dwhinham/mt32-pi)

    22 parts139GPL-3.0
  • 2 layers100 × 100 mmYM2612 MIDI SMD, the printed circuit board in 3D

    YM2612 MIDI SMD

    superjoebob/genny

    YM2612/SN76489 Virtual Instrument

    112 parts96
  • 2 layers152.4 × 68.6 mmPico test synth2, the printed circuit board in 3D

    Pico test synth2

    todbot/pico_test_synth

    Simple board to help make synths with Raspberry Pi Pico/Pico2 and PCM5102 I2S DAC

    55 parts57MIT
  • 2 layers51.3 × 96.2 mmMinisynth32, the printed circuit board in 3D

    Minisynth32

    grantek/minisynth32

    A 3D-printable MIDI synthesiser inspired by the Roland MT-32 and clumsyMIDI, and powered by the mt32-pi MT-32 emulator.

    32 parts45CC-BY-SA-4.0