郁金香创意计算机与 AMYboard - 用于音乐、图形、代码和写作的便携式可编程设备

欢迎使用郁金香创意计算机(Tulip CC)和 AMYboard!
Tulip 是一款低功耗、价格实惠的自包含便携式计算机,配备触摸屏显示和声音。它完全可编程——你编写代码来定义你的音乐、游戏或你能想到的任何其他东西。它瞬间启动进入 Python 提示符,内置大量对音乐合成、快速图形和文本、硬件 MIDI、网络访问和外部传感器的支持。无需分心或复杂操作,直接开始创作。
整个系统专用于你的代码、显示和声音,在专用硬件上实时运行。硬件和软件完全开源,任何人都可以 购买一台 或 自行组装一台。你可以使用 Tulip 制作音乐、编程、艺术、游戏,或者只是写作。
AMYboard 是 Tulip 的无头(无屏幕)版本,具有更多的音频功能——音频输入、模块化 10hp 和 10vpp 音频、S/PDIF 数字音频、CV 插孔、SD 卡。它基于 Tulip 代码,但专注于音乐合成。
你现在甚至可以 在网络上运行 Tulip 和 在网络上运行 AMYboard,并与任何人分享你的创作!
Tulip 和 AMYboard 由 MicroPython、AMY 和 LVGL 提供支持。Tulip 硬件运行在 ESP32-S3 芯片上,使用 ESP-IDF。
- 获取 Tulip,来自我们的朋友 Makerfabs,仅需 59 美元
- 获取 AMYboard,来自我们的朋友 Makerfabs,仅需 29.90 美元
- 刚入手 Tulip CC?查看我们的入门指南!
- 刚入手 AMYboard?查看我们的入门指南!
- 想用 Tulip 制作音乐?查看我们的音乐教程
- 查看完整的 Tulip API
- 在网页上试用 Tulip!
查看这个视频!
你可以使用 Tulip 的三种方式之一:
- Tulip 既可作为 现成或 DIY 硬件项目 (Tulip CC)
- Tulip 在网页上运行,具备(几乎)所有相同的功能。
- Tulip 还可以作为 Mac 或 Linux(或 Windows 中的 WSL)的原生应用运行,即 Tulip Desktop
如果你担心获取或构建硬件,在网页上试试吧!
硬件 Tulip CC 支持:
-
8.5MB 的 RAM - 2MB 可供 MicroPython 使用,1.5MB 可供操作系统内存使用。其余部分用于图形帧缓冲区(可用作存储)和固件缓存。
-
32MB 闪存存储,作为可在 Python 中访问的文件系统(ROM 中的操作系统占用后剩余 24MB)
-
一个本地运行的 AMY 立体声 120 通道合成器引擎,或作为 Alles 网格的无线控制器。Tulip 的合成器支持加法和减法振荡器、出色的 FM 合成引擎、采样器、Karplus-Strong、高质量模拟风格滤波器、音序器以及更多功能。我们随 Tulip 附带了鼓机、音色/补丁应用和 Juno-6 编辑器。
-
文本帧缓冲区层,128 x 50,支持 256 色的 ANSI 支持,包括反色、粗体、下划线和背景色
-
屏幕上最多 32 个精灵,按扫描线绘制,具有碰撞检测功能,来自总共 32KB 的位图内存(每像素 1 字节)
-
一个 1024(+128 过扫描)x 600(+100 过扫描)的背景帧缓冲区,用于绘制任意位图或用作 RAM,并且可以水平/垂直滚动
-
WiFi,通过 Python requests 或 TCP / UDP 套接字访问 http
-
可调节的显示时钟和分辨率,默认为 1024x600 下的 30 FPS。
-
256 种颜色
-
可以从磁盘加载 PNG 以设置精灵或背景,或从代码生成位图数据
-
内置代码和文本编辑器
-
内置名为 TULIP ~ WORLD 的 BBS 聊天室和文件传输区域
-
支持 USB 键盘、MIDI 和鼠标,包括集线器
-
支持电容式多点触控(适用于 Tulip Desktop 和 Tulip Web 的鼠标)
-
MIDI 输入和输出
-
I2C / Grove / Mabee 连接器,兼容许多 I2C 设备,如摇杆、键盘、GPIO、DAC、ADC、集线器
-
5V 下功耗为 575mA(含显示屏),在中等屏幕亮度下,使用 LiPo、18650 或 USB 电池组可续航数小时
多年来,我断断续续地在许多硬件迭代上开发 Tulip,希望有人能像我一样享受它,无论是用 Tulip 制作东西,还是参与 Tulip 本身的开发。我非常期待收到反馈、你们自己的 Tulip 实验或用于改进系统的 pull requests。

T-Deck Tulip CC

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.
快速入门
一旦你购买了 Tulip、打开了 Tulip Web、构建了 Tulip 或 安装了 Tulip Desktop,你会发现 Tulip 直接启动进入 Python 提示符,所有与系统的交互都在那里进行。你可以使用 Tulip 内置的编辑器编写自己的 Python 程序并执行它们,或者直接在 Tulip REPL 提示符上实时进行实验。
查看完整的 Tulip API 以获取更多关于所有图形、声音和输入函数的详细信息。
以下是一些入门提示和小示例。完整 API 页面提供了有关在 Tulip 上可执行的所有操作的更多详细信息。查看更完整的入门页面 或 音乐制作教程 !
# 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")
Tulip 编辑器
Tulip 附带一个基于 pico/nano 的文本编辑器。它支持语法高亮、搜索、保存/另存为。
# Opens the Tulip editor to the given filename.
edit("game.py")

输入与用户界面
Tulip 支持 USB 键盘和鼠标输入以及触摸输入。(在 Tulip Desktop 和 Web 上,鼠标点击作为触摸点。)它还提供了按钮和滑块等 UI 元素供您在应用程序中使用,以及一种使用回调同时运行多个应用程序的方式。更多详情请参阅 完整 API。
(x0, y0, x1, y1, x2, y2) = tulip.touch()

网络
Tulip CC 具备连接 Wi-Fi 网络的能力,Python 原生的 requests 库可用于访问 TCP 和 UDP。我们还提供了一些便捷函数,用于从 URL 获取数据。更多详情请参阅 完整 API。
# 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")
音乐 / 声音
Tulip 内置了 AMY 合成器,这是一款功能非常齐全的 120 振荡器合成器,支持 FM、PCM、加法合成、分音合成、滤波器以及更多功能。我们还提供了一个实用的“音乐计算机”,用于处理音阶、和弦与和弦进行。更多详情请参阅 完整 API 和 音乐教程。 Tulip 版本的 AMY 支持立体声,您可以通过 pan 参数为每个振荡器进行设置。
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 支持 MIDI 输入和输出,以便连接外部音乐硬件。您可以设置一个 Python 回调函数,以立即响应任何传入的 MIDI 消息。您还可以向 MIDI 输出发送消息。更多详情请参阅 完整 API 和 音乐教程。
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
图形系统
Tulip GPU 支持滚动背景层、硬件精灵和文本层。更多详情请参阅完整 API。
# 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
支持硬件精灵。它们按每帧每扫描线绘制在背景和文本层之上:
(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
目前仍处于非常早期的阶段,但 Tulip 支持一个名为 TULIP ~ WORLD 的原生聊天和文件共享 BBS,你可以在那里与其他 Tulip 用户交流。你可以拉取最新的消息和文件,也可以自己发送消息和文件。更多详情请参阅 完整 API。
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
如何构建、编译并协助开发 Tulip
- 获取 Tulip!
- 构建你自己的 Tulip Creative Computer,提供四种不同的选项。
- 如何编译和刷写 Tulip 硬件
- 如何运行或编译 Tulip Desktop
- 完整的 Tulip API
- 提交任何代码问题或拉取请求!
如果你愿意帮助贡献,这里有两条重要的开发准则!
- 保持友善和乐于助人,不要害怕提问!我们做这些都是为了乐趣和学习。
- 任何更改或功能必须在 Tulip Desktop 和 Tulip CC 上保持一致。当然,这条规则有一些有限的例外,但在提出新功能/更改之前,请务必在硬件上进行测试。
玩得开心!

在我们的 Discord 上讨论 Tulip!
