Pico/Pico2-based board for playing with synthesizers in CircuitPython.
synthiota_tbish2_demo0.mp4
- "tbish" TB-303 like synth, demo2: https://youtu.be/MjE2wdevc3M
- "tbish" TB-303 like synth, demo1: https://youtu.be/O4a5pk78DVM
Each app's folder has a README with its controls. To install, find the corresponding UF2 in the Releases section and copy the UF2 to the board in BOOT mode. Or look in the app's directory for how to install it.
CircuitPython, in circuitpython/:
polysynth-- two-oscillator subtractive polysynth. The pads are a chromatic keyboard and the pots edit 16 params over 2 pages.wavesynth-- wavetable polysynth. The pads are a scale keyboard, with chords on the top row, and the pots edit 24 params over 3 pages.swarmsynth-- Swarmatron-style drone: eight oscillators on one pitch, fanned apart by the right slider.dronesynth-- eight drone oscillators, each tuned by its own knob, each with its own LFO.dronesynth_wt-- dronesynth with each oscillator at its own place in a shared wavetable.tbish2-- TB-303-style acid bassline with a 16-step sequencer you can edit on the board.tbish-- the original TB-303-style synth, a technology demo with no pattern editing or MIDI in.hwtest-- hardware bring-up tests and the reference pin setup.
Arduino, in arduino/:
wavesynth-- a Mozzi port of the CircuitPython wavesynth, in progress. It serves the CIRCUITPY drive over USB for wavetables and patches.hwtest-- a board test, plus simple mono MIDI synths using M16 and Mozzi.
See Getting to BOOT mode via commandline for another way to install these apps.
The PCBAs come with all SMD parts assembled. The components you will need to supply:
- 1 x Raspberry Pi Pico 2
- 1 x PCM5102 I2S Stereo DAC
- 1 x SH1106 128x64 1.3" SPI OLED
- 2 x PJ320A 3.5mm stereo jack
- 8 x RK09K 10k vertical potentiometer (or similar)
- 1 x EC11 rotary encoder
- 2 x 20-pin 5 mm "short" header socket for Pico (see below)
- 1 x 7-pin 5mm "short" header socket for display (see below)
- 8 x knobs for pots
- 1 x knob for encoder
For the knobs, you can buy knobs off Amazon or you can 3d print them. Some 3D printable knobs I like are these 6mm Vintage Synth Knob.
Before soldering down the PCM5102 DAC, solder bridge the jumpers to be 1L/2L/3H/4L, as in this picture:
The PCM5102 DAC should have standard header pins soldered to it, on the 6-pin header row. For extra stability, you can also solder one of the G pins behind the audio jack.
More inforomation about the PCM5102 can be found in this blog post.
You will also need some headers and header sockets to attach the modules to the PCB. If using the enclosure, the top part expects the header arrangement to be:
- Pico:
- Short socket headers for Pico on synthiota board
- Standard header pins on Pico (Pico H sold w/ these pins soldered)
- OLED display:
- Short socket headers for OLED display on synthio - Standard header pins on OLED display (usually sold w/ these pins soldered) ta board
- PCM5102 I2S DAC
- Standard header pins on PCM5102 I2S DAC board (usually sold w/ these pins soldered)
- I2S DAC w/ header pins is soldered directly to the synthiota board, no socket
When soldering down the jacks and sockets, holding them in place with masking tape or blutack makes things easier. For the Pico header sockets, sticking them into a Pico and hold the Pico onto the board with masking tape or blutack can be helpful.
After soldering everything, the result will look like:
CircuitPython naming. See hwtest/synth_setup_synthiota.py for how they're used.
Encoder
board.GP28- encoder B pinboard.GP27- encoder A pin
ADC input for pots
board.GP26- ADC input for pot knobs
I2S DAC
board.GP22- I2S DAT pin to PCM5102 DACboard.GP21- I2S LCK pin to PCM5102 DACboard.GP20- I2S BCK pin to PCM5102 DAC
Encoder switch
board.GP19- encoder SW pin
NeoPixel LEDs
board.GP18- NeoPixel LEDs pin
UART MIDI In/Out
board.GP17- UART RX pin to MIDI inputboard.GP16- UART TX pin to MIDI output
SPI for display
board.GP13- SPI DC for SH1106 displayboard.GP12- SPI RES for SH1106 displayboard.GP11- SPI MOSI for SH1106 displayboard.GP10- SPI SCK for SH1106 display
Pot mux select
board.GP9- SEL A pin to 4051 mux for pot knobsboard.GP8- SEL B pin to 4051 mux for pot knobsboard.GP7- SEL C pin to 4051 mux for pot knobs
I2C for MPR121 touch sensors
board.GP3- I2C SCL to MPR121 touch sensorsboard.GP2- I2C SDA to MPR121 touch sensors
Free pins: GP0,GP1, GP4,GP5,GP6, GP14,GP15. Feel free to use for other purposes.
If you don't want to hold the BOOT button down while powering on, you can usually get the synthiota board into BOOT mode via the commandline with:
PORT=/dev/cu.usbmodem21301 # the COM port of the Pico
python3 -c "import serial;serial.Serial('$PORT',1200).close()"If you don't want to use Python, one of these should work:
stty -f $PORT 1200 # MacOS
stty -F $PORT 1200 # Linux
To install a UF2 once in BOOT mode, you can do (this flashes and starts the program):
picotool load -x file.uf2Or picotool reboot to reset board.
(if you need, pip3 install pyserial and brew install picotool)
(note most product links are Amazon affiliate links)





