Tulip Creative Computer

A portable, self-contained computer powered by the ESP32-S3 and MicroPython, designed for music synthesis, graphics, and coding. It features a dedicated 120-voice synthesizer engine, multi-layer GPU support, and integrated LVGL for user interface elements. The system boots directly into a Python prompt, providing a distraction-free environment for creative programming.

Tulip Creative Computer

Overview

The Tulip Creative Computer (Tulip CC) is a portable, programmable device designed for musicians, artists, and coders. Unlike traditional general-purpose computers, Tulip is a dedicated environment that boots instantaneously into a MicroPython prompt. It provides a distraction-free space where the entire system is dedicated to the user’s code, display, and sound in real-time.

Tulip is built on the ESP32-S3 microcontroller and leverages the ESP-IDF framework. It is available as a hardware device, but it also offers high portability through Tulip Desktop (running on Mac, Linux, or WSL) and a web-based version that runs in modern browsers.

Technical Architecture

The hardware implementation of Tulip CC is robust for an embedded system, featuring:

  • Processor: ESP32-S3 chip.
  • Memory: 8.5MB of RAM, with 2MB dedicated to MicroPython and 1.5MB for OS memory. The remaining RAM is utilized for graphics framebuffers and firmware caching.
  • Storage: 32MB of flash storage, providing a 24MB filesystem accessible directly via Python.
  • Display: Supports a 1024x600 resolution display with capacitive multi-touch.

Graphics and Sound Engines

At the heart of Tulip’s creative capabilities are its specialized graphics and sound engines. The GPU supports three distinct layers that are drawn per scanline:

  1. Text Layer: A 128x50 buffer with ANSI support for 256 colors and various text styles.
  2. Sprite Layer: Supports up to 32 hardware sprites with collision detection.
  3. Background Layer: A large 1024x600 buffer for arbitrary bitmaps that supports horizontal and vertical scrolling.

For audio, Tulip integrates the AMY synthesizer engine. AMY is a 120-voice stereo synthesizer capable of additive and subtractive synthesis, FM synthesis, Karplus-Strong string modeling, and PCM sampling. It includes high-quality analog-style filters and a sequencer, making Tulip a powerful standalone musical instrument.

Programming Environment

Programming on Tulip is done entirely in Python. The system provides a built-in text editor based on pico/nano, featuring syntax highlighting and search capabilities. Users can interact with the hardware through a comprehensive API that covers everything from MIDI I/O and WiFi networking to low-level pixel manipulation.

# Example: Playing a sound with the AMY synth
import amy
amy.drums() # Plays a test drum pattern
amy.send(volume=4) # Adjust system volume

# Example: Drawing to the background
import tulip
tulip.bg_pixel(100, 100, 255) # Set a pixel at x=100, y=100 to color 255

Connectivity and Ecosystem

Tulip is designed to play well with other hardware. It includes MIDI input and output for connecting to external synths or controllers, and a Grove/Mabee I2C connector for external sensors, joysticks, or DACs. For networking, Tulip uses the ESP32’s WiFi capabilities, allowing users to make HTTP requests or use TCP/UDP sockets.

One of the most unique features of the ecosystem is Tulip World, a native BBS (Bulletin Board System) chat room and file transfer area. This allows Tulip users to share code, messages, and creations directly from their devices, fostering a community of creative coders.