Skip to the content
PCBKitNew board
2 layers134 × 88 mmTulipcc, the printed circuit board in 3D

The Tulip Creative Computer and AMYboard - portable Python synthesizers

Size
134 × 88 mm
Copper layers
2
Thickness
1.6 mm
Parts
103
Nets
115
Pads
444
Tracks, vias
900, 478
Pours
1
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
30 May 2022
Updated
7 Nov 2026

Overview

Tulipcc is an open-source printed circuit board by shorepine, from the shorepine/tulipcc repository on GitHub. It is a 2-layer board of 134 × 88 mm with 103 parts on 115 nets, routed with 900 tracks and 478 vias.

It is built around the ESP32-S3-WROOM-2-N32R8V, FT231XS-R and MIC2875-5.0YMT-T5, with the TPA6110A2DGN, USBLC6-2SC6 and H11L1SR2M among its other parts. Its parts include 36 capacitors, 32 resistors, 13 ICs, 8 connectors and 2 diodes. It belongs with the audio and music boards and the ESP32 boards of this library.

Main components

12

README

README.md

Tulip Creative Computer and AMYboard - portable programmable devices for music, graphics, code and writing

Tulip AMYboard

Welcome to the Tulip Creative Computer (Tulip CC) and AMYboard!

Tulip is a low power and affordable self-contained portable computer, with a touchscreen display and sound. It's fully programmable - you write code to define your music, games or anything else you can think of. It boots instantaneously into a Python prompt with a lot of built in support for music synthesis, fast graphics and text, hardware MIDI, network access and external sensors. Dive right into making something without distractions or complications.

The entire system is dedicated to your code, the display and sound, running in real time, on specialized hardware. The hardware and software are fully open source and anyone can buy one or build one. You can use Tulip to make music, code, art, games, or just write.

AMYboard is a headless (no screen) version of Tulip with more audio capability - audio input, modular 10hp and 10vpp audio, S/PDIF digital audio, CV jacks, SD card. It's based on the Tulip code but focused on music synthesis.

You can now even run Tulip on the web and AMYboard on the web and share your creations with anyone!

Tulip and AMYboard are powered by MicroPython, AMY, and LVGL. The Tulip hardware runs on the ESP32-S3 chip using the ESP-IDF.

shore pine sound systems discord Chat about Tulip on our Discord!

Check out this video!

Tulip, a musical computer based on Micropython

You can use Tulip one of three ways:

If you're nervous about getting or building the hardware, try it out on the web!

Tulip Web

The hardware Tulip CC supports:

  • 8.5MB of RAM - 2MB is available to MicroPython, and 1.5MB is available for OS memory. The rest is used for the graphics framebuffers (which you can use as storage) and the firmware cache.
  • 32MB flash storage, as a filesystem accesible in Python (24MB left over after OS in ROM)
  • An AMY stereo 120-voice synthesizer engine running locally, or as a wireless controller for an Alles mesh. Tulip's synth supports additive and subtractive oscillators, an excellent FM synthesis engine, samplers, karplus-strong, high quality analog style filters, a sequencer, and much more. We ship Tulip with a drum machine, voices / patch app, and Juno-6 editor.
  • Text frame buffer layer, 128 x 50, with ANSI support for 256 colors, inverse, bold, underline, background color
  • Up to 32 sprites on screen, drawn per scanline, with collision detection, from a total of 32KB of bitmap memory (1 byte per pixel)
  • A 1024 (+128 overscan) by 600 (+100 overscan) background frame buffer to draw arbitrary bitmaps to, or use as RAM, and which can scroll horizontally / vertically
  • WiFi, access http via Python requests or TCP / UDP sockets
  • Adjustable display clock and resolution, defaults to 30 FPS at 1024x600.
  • 256 colors
  • Can load PNGs from disk to set sprites or background, or generate bitmap data from code
  • Built in code and text editor
  • Built in BBS chat room and file transfer area called TULIP ~ WORLD
  • USB keyboard, MIDI and mouse support, including hubs
  • Capactive multi-touch support (mouse on Tulip Desktop and Tulip Web)
  • MIDI input and output
  • I2C / Grove / Mabee connector, compatible with many I2C devices like joysticks, keyboard, GPIO, DACs, ADCs, hubs
  • 575mA power usage @ 5V including display, at medium display brightness, can last for hours on LiPo, 18650s, or USB battery pack

I've been working on Tulip on and off for years over many hardware iterations and hope that someone out there finds it as fun as I have, either making things with Tulip or working on Tulip itself. I'd love feedback, your own Tulip experiments or pull requests to improve the system.

Tulip

T-Deck Tulip CC

T-Deck

A new small option: get yourself a T-Deck and install Tulip CC on it directly! Check out our T-Deck page for more detail.

Getting started

Once you've bought a Tulip, opened Tulip Web, built a Tulip or installed Tulip Desktop, you'll see that Tulip boots right into a Python prompt and all interaction with the system happens there. You can make your own Python programs with Tulip's built in editor and execute them, or just experiment on the Tulip REPL prompt in real time.

See the full Tulip API for more details on all the graphics, sound and input functions.

Below are a few getting started tips and small examples. The full API page has more detail on everything you can do on a Tulip. See a more complete getting started page or a music making tutorial as well!

python
# Run a saved Python file. Control-C stops it
cd('ex') # The ex folder has a few examples and graphics in it
execfile("parallax.py")
# If you want to run a Tulip package (folder with other files in it)
run("game")

The Tulip Editor

Tulip ships with a text editor, based on pico/nano. It supports syntax highlighting, search, save/save-as.

python
# Opens the Tulip editor to the given filename. 
edit("game.py")

Editor

Input and user interface

Tulip supports USB keyboard and mice input as well as touch input. (On Tulip Desktop and Web, mouse clicks act as touch points.) It also comes with UI elements like buttons and sliders to use in your applications, and a way to run mulitple applications as once using callbacks. More in the full API.

python
(x0, y0, x1, y1, x2, y2) = tulip.touch()

UI demo

Network

Tulip CC has the capability to connect to a Wi-Fi network, and Python's native requests library will work to access TCP and UDP. We ship a few convenience functions to grab data from URLs as well. More in the full API.

python
# Join a wifi network (not needed on Tulip Desktop or Web)
tulip.wifi("ssid", "password")

# Get IP address or check if connected
ip_address = tulip.ip() # returns None if not connected

# Save the contents of a URL to disk (needs wifi)
bytes_read = tulip.url_save("https://url", "filename.ext")

Music / sound

Tulip comes with the AMY synthesizer, a very full featured 120-oscillator synth that supports FM, PCM, additive synthesis, partial synthesis, filters, and much more. We also provide a useful "music computer" for scales, chords and progressions. More in the full API and in the music tutorial. Tulip's version of AMY comes with stereo sound, which you can set per oscillator with the pan parameter.

python
amy.drums() # plays a test song
amy.send(volume=4) # change volume
amy.reset() # stops all music / sounds playing

https://user-images.githubusercontent.com/76612/215893940-658144b7-0c6f-42e2-9836-bd271597aab3.mov

MIDI

Tulip supports MIDI in and out to connect to external music hardware. You can set up a Python callback to respond immediately to any incoming MIDI message. You can also send messages out to MIDI out. More in the full API and music tutorial.

python
m = tulip.midi_in() # returns bytes of the last MIDI message received
tulip.midi_out((144,60,127)) # sends a note on message
tulip.midi_out(bytes) # Can send bytes or list

Graphics system

The Tulip GPU supports a scrolling background layer, hardware sprites, and a text layer. Much more in the full API.

python
# Set or get a pixel on the BG
pal_idx = tulip.bg_pixel(x,y)

# Set the contents of a PNG file on the background.
tulip.bg_png(png_filename, x, y)

tulip.bg_scroll(line, x_offset, y_offset, x_speed, y_speed)

https://user-images.githubusercontent.com/76612/215895305-7b02ad27-b02a-429a-92ef-f13136e9f9d2.mov

Hardware sprites are supported. They draw over the background and text layer per scanline per frame:

python
(w, h, bytes) = tulip.sprite_png("filename.png", mem_pos)

...

# Set a sprite x and y position
tulip.sprite_move(12, x, y)

https://user-images.githubusercontent.com/76612/215896311-fc0823aa-44bc-4305-85db-a6773db11a98.mov

Tulip World

Still very much early days, but Tulip supports a native chat and file sharing BBS called TULIP ~ WORLD where you can hang out with other Tulip owners. You're able to pull down the latest messages and files and send messages and files yourself. More in the full API.

python
import world
world.post_message("hello!!") # Sends a message to Tulip World. username required. will prompt if not set
world.upload(filename) # Uploads a file to Tulip World. username required
world.ls() # lists most recent unique filenames/usernames

How to build, compile and help develop Tulip

shore pine sound systems discord Chat about Tulip on our Discord!

Two important development guidelines if you'd like to help contribute!

  • Be nice and helpful and don't be afraid to ask questions! We're all doing this for fun and to learn.
  • Any change or feature must be equivalent across Tulip Desktop and Tulip CC. There are of course limited exceptions to this rule, but please test on hardware before proposing a new feature / change.

Have fun!

Tulip

Parts

103
QtyValueFootprintReferences
110.1uFtulipcc_footprint_lib:C_0805_2012C1, C4, C8, C9, C11, C13, C15, C17, C26, C27, C30
910Ktulipcc_footprint_lib:R_0805_2012R1, R2, R11, R14, R27, R28, R30, R31, R32
6PCB Test Pointtulipcc_footprint_lib:TEST_POINTTP1, TP2, TP3, TP4, TP5, TP6
522uFtulipcc_footprint_lib:C_1210_3225C2, C32, C33, C34, C35
54.7uFtulipcc_footprint_lib:C_0805_2012C3, C5, C29, C31, C36
410uFtulipcc_footprint_lib:CAP_WE_865060340001C12, C14, C16, C28
42.2uFtulipcc_footprint_lib:C_0805_2012C18, C19, C22, C23
3220uFtulipcc_footprint_lib:CAP_WE_865060345007C10, C21, C25
3470Rtulipcc_footprint_lib:R_0805_2012R13, R22, R23
3SJ2-35863B1tulipcc_footprint_lib:CON_CUI_SJ2-35863B1-SMTJ4, J6, J7
20.47uFtulipcc_footprint_lib:C_0805_2012C20, C24
20Rtulipcc_footprint_lib:R_0805_2012R15, R16
2100Ktulipcc_footprint_lib:R_0805_2012R5, R6
22.4Ktulipcc_footprint_lib:R_0805_2012R3, R4
2217179-0001tulipcc_footprint_lib:USB-C_Molex_217179-0001J3, J5
222Ktulipcc_footprint_lib:R_0805_2012R24, R25
227Rtulipcc_footprint_lib:R_0805_2012R7, R8
233Ktulipcc_footprint_lib:R_0805_2012R21, R26
247pFtulipcc_footprint_lib:C_0805_2012C6, C7
25.1Ktulipcc_footprint_lib:R_0805_2012R9, R10
256Ktulipcc_footprint_lib:R_0805_2012R19, R20
2USBLC6-2SC6tulipcc_footprint_lib:SOT-23-6U3, U7
110Rtulipcc_footprint_lib:R_0805_2012R18
1120Rtulipcc_footprint_lib:FB_0805_2012FB1
11734709-4tulipcc_footprint_lib:TE_1734709-4J2
11734827-2tulipcc_footprint_lib:TE_17348272J8
11N4148WStulipcc_footprint_lib:D_SOD-323D1
11uHtulipcc_footprint_lib:IND_VD_IFSC-1515AH-01L1
1220Rtulipcc_footprint_lib:R_0805_2012R12
12Ktulipcc_footprint_lib:R_0805_2012R29
133Rtulipcc_footprint_lib:R_0805_2012R17
1B340AE-13tulipcc_footprint_lib:D_SMAD2
1DMP3099Ltulipcc_footprint_lib:SOT-23-3Q1
1ESP32-S3-WROOM-2-N32R8Vtulipcc_footprint_lib:ESP32-S3-WROOM-2U1
1FT231XStulipcc_footprint_lib:SSOP-20_3.9x8.7mm_P0.635mmU4
1H11L1SR2Mtulipcc_footprint_lib:PDIP6-SMDU6
1JS102011JAQNtulipcc_footprint_lib:CK_JS102011JAQNSW1
1LOGOLOGOG***
1MAX17048Gtulipcc_footprint_lib:TDFN-8-1EP_2x2mm_P0.5mm_EP0.8x1.2mmU11
1MBT3904DW1T1Gtulipcc_footprint_lib:SOT-363_SC-70-6U2
1MCP73832tulipcc_footprint_lib:SOT-23-5U10
1MIC2005A-2YM5-TRtulipcc_footprint_lib:SOT-23-5U5
1MIC2875-5.0YMTtulipcc_footprint_lib:UDFN-8-1EP_2x2mm_P0.5mm_EP0.7x1.3mm_1U13
1PCM5101A-Q1tulipcc_footprint_lib:TSSOP-20_4.4x6.5mm_P0.65mmU8
1RK10J12R0A0Btulipcc_footprint_lib:ALPS_RK10J12R0A0BVR1
1TPA6110A2DGNtulipcc_footprint_lib:HVSSOP-8-1EP_3x3mm_P0.65mm_EP1.57x1.89mmU9
1TPS7A4533DCQRtulipcc_footprint_lib:SOT-223-6U12
1XF2M-4015-1Atulipcc_footprint_lib:OMRON_XF2M-4015-1AJ1

Questions

How big is the Tulipcc PCB?

It measures 134 × 88 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Tulipcc use?

103 parts, built around the ESP32-S3-WROOM-2-N32R8V, FT231XS-R, MIC2875-5.0YMT-T5 and TPA6110A2DGN. 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 Tulipcc KiCad files?

From the shorepine/tulipcc repository on GitHub, at the commit this page was made from: the board is docs/pcbs/tulip4_board_v4r9/tulipcc.kicad_pcb and its schematic docs/pcbs/tulip4_board_v4r5/tulip4r3/tulip4r3.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Tulipcc design in my own project?

Its repository states no licence, so its author keeps all rights: ask shorepine before reusing the design.

Similar boards

  • 4 layers75 × 59.2 mmData logger, the printed circuit board in 3D

    Data logger

    Mutzi1211/Wasserrakete

    Ein Überblick über alle Projektbestandteile – von CAD über Code bis zu Anforderungen und Abgaben.

    65 parts1
  • 4 layers100 × 100 mmPROJECT VD KICAD, the printed circuit board in 3D

    PROJECT VD KICAD

    anhbuianhanhbaba-ui/MY_KICAD_PROJECT

    104 parts
  • 4 layers228 × 115.4 mmOcxPrototype, the printed circuit board in 3D

    OcxPrototype

    ocxpke/ocx

    Open Computer Experience

    126 partsCERN-OHL-S-2.0
  • 2 layersAtmel sam3x8, the printed circuit board in 3D

    Atmel sam3x8

    JGilcreast/MetalHead

    An opensource firmware and software drop-in replacement for the 85V Automatic Stirrup Bender by CRS Specialties Inc. ...short story behind the name...

    102 parts
  • 4 layers131.3 × 72.4 mmAGBM-02 AA 1-1, the printed circuit board in 3D

    AGBM-02 AA 1-1

    AnasSarkiz/Game-Boy-Enhance

    AGBM-02 tscircuit adaptation — routing-disabled placement work in progress

    245 parts
  • 4 layers144 × 168 mmSoundpad economy, the printed circuit board in 3D

    Soundpad economy

    willemOH/soundpad

    Soundpad: tactile audio sampler instrument and sound sketchpad

    184 parts
  • 4 layers327.6 × 186.9 mmPower Supplies, the printed circuit board in 3D

    Power Supplies

    joshieyu/DigitalAudioMixer

    261 parts1