shorepine/tulipcc
GitHub: shorepine/tulipcc
一款基于 ESP32-S3 和 MicroPython 的开源便携式创意计算机,集成了音乐合成、图形显示和代码编写功能,专注于让用户即开即用地进行艺术与音乐创作。
Stars: 950 | Forks: 62
# Tulip Creative Computer 和 AMYboard - 用于音乐、图形、代码和写作的便携式可编程设备


欢迎使用 Tulip Creative Computer (Tulip CC) 和 AMYboard!
Tulip 是一款低功耗且经济实惠的独立便携式计算机,配备触摸屏和声音。它是完全可编程的 - 你可以通过编写代码来定义你的音乐、游戏或任何你能想到的东西。它会瞬间启动进入 Python 提示符,并内置了大量对音乐合成、快速图形和文本、硬件 MIDI、网络访问和外部传感器的支持。直接投入创作,没有任何干扰或复杂性。
整个系统专用于你的代码、显示和声音,在专用硬件上实时运行。硬件和软件完全是开源的,任何人都可以[购买一个](https://tulip.computer/)或[构建一个](docs/tulip_build.md)。你可以使用 Tulip 来制作音乐、编写代码、进行艺术创作、玩游戏,或者仅仅是写作。
[AMYboard](https://amyboard.com) 是 Tulip 的无头(无屏幕)版本,具有更强大的音频功能 - 音频输入、模块化 10hp 和 10vpp 音频、S/PDIF 数字音频、CV 插孔、SD 卡。它基于 Tulip 的代码,但专注于音乐合成。
你甚至现在就可以[在网络上运行 Tulip](https://tulip.computer/run)和[在网络上运行 AMYboard](https://amyboard.com/editor),并与任何人分享你的作品!
Tulip 和 AMYboard 由 [MicroPython](https://micropython.org)、[AMY](https://github.com/shorepine/amy) 和 [LVGL](https://lvgl.io) 提供支持。Tulip 硬件使用 [ESP-IDF](https://github.com/espressif/esp-idf) 在 ESP32-S3 芯片上运行。
* [从我们的朋友 Makerfabs 处**获取 Tulip**,仅需 59 美元](https://tulip.computer)
* [从我们的朋友 Makerfabs 处**获取 AMYboard**,仅需 29.90 美元](https://amyboard.com)
* [刚拿到 Tulip CC?**查看我们的入门指南!**](docs/getting_started.md)
* [刚拿到 AMYboard?**查看我们的入门指南!**](docs/amyboard/README.md)
* [想用你的 Tulip 制作音乐?**请看我们的音乐教程**](docs/music.md)
* [查看完整的 **Tulip API**](docs/tulip_api.md)
* [**在网络上试用 Tulip!**](https://tulip.computer/run/)
[ **在我们的 Discord 上聊聊 Tulip!**](https://discord.gg/TzBFkUb8pG)
**看看这个视频!**
[](https://www.youtube.com/watch?v=1lYFjQp7Xrw "Tulip,一台基于 Micropython 的音乐计算机")
你可以通过以下三种方式之一使用 Tulip:
* Tulip 可以作为[现货硬件项目或 DIY 硬件项目 提供](https://tulip.computer/)
* [Tulip 在网络上运行](https://tulip.computer/run),具备(几乎)所有相同的功能。
* Tulip 还可以作为 Mac 或 Linux(或 Windows 中的 WSL)的原生应用运行,即 [Tulip Desktop](docs/tulip_desktop.md)
如果你对获取或构建硬件感到担忧,请[在网络上试试看!](https://tulip.computer/run)
[](https://tulip.computer/run/)
硬件版 Tulip CC 支持:
- 8.5MB RAM - 其中 2MB 可供 MicroPython 使用,1.5MB 可用于操作系统内存。其余部分用于图形帧缓存(你可以将其用作存储)和固件缓存。
- 32MB 闪存,作为文件系统可在 Python 中访问(ROM 中的操作系统占用后剩余 24MB)
- 一个在本地运行的 [AMY](https://github.com/shorepine/amy) 立体声 120 音色合成器引擎,或作为 [Alles](https://github.com/shorepine/alles) mesh 的无线控制器。Tulip 的合成器支持加法和减法振荡器、出色的 FM 合成引擎、采样器、karplus-strong、高质量的模拟风格滤波器、音序器等等。我们随 Tulip 附带了一个鼓机、音色/补丁应用程序以及 Juno-6 编辑器。
- 文本帧缓存层,128 x 50,支持 256 色的 ANSI、反色、粗体、下划线、背景色
- 屏幕上最多可显示 32 个 sprite,按扫描线逐帧绘制,带有碰撞检测,总共有 32KB 的位图内存(每像素 1 字节)
- 一个 1024(+128 过扫描)x 600(+100 过扫描)的背景帧缓存,用于绘制任意位图、用作 RAM,并且可以水平/垂直滚动
- WiFi,通过 Python 请求或 TCP / UDP socket 访问 HTTP
- 可调节的显示时钟和分辨率,默认为 1024x600 下 30 FPS。
- 256 色
- 可以从磁盘加载 PNG 来设置 sprite 或背景,或者从代码生成位图数据
- 内置代码和文本编辑器
- 内置名为 **TULIP ~ WORLD** 的 BBS 聊天室和文件传输区
- 支持 USB 键盘、MIDI 和鼠标,包括集线器
- 支持电容式多点触控(在 Tulip Desktop 和 Tulip Web 上为鼠标)
- MIDI 输入和输出
- I2C / Grove / Mabee 连接器,兼容[许多 I2C 设备,如操纵杆、键盘、GPIO、DAC、ADC、集线器](docs/tulip_api.md#i2c--grove--mabee)
- 功耗为 5V 下 575mA(包括显示器),在中等显示亮度下,可以通过 LiPo、18650 电池或 USB 电池组持续供电数小时
我已经在许多硬件迭代中断断续续地开发 Tulip 多年了,希望外面有人能觉得它和我一样有趣,不管是用 Tulip 进行创作还是开发 Tulip 本身。我很乐意听取反馈、查看你自己的 Tulip 实验或接受改进系统的 pull request。

* [**你的 Tulip CC 有任何问题?这是我们的故障排除指南**](docs/troubleshooting.md)
* [**了解我们的路线图,看看我们接下来在做什么**](https://github.com/orgs/shorepine/projects/1)
* [**构建你自己的 Tulip**](docs/tulip_build.md)
* **[你可以在我的网站上阅读更多关于 Tulip 的“为什么”或“如何”实现的细节!](https://notes.variogram.com/2024/07/30/tulip-available/)**
## T-Deck Tulip CC

一个**新**的小巧选择:给自己买一个 [T-Deck](https://www.aliexpress.us/item/3256805505920840.html?gatewayAdapt=glo2usa4itemAdapt) 并直接在上面安装 Tulip CC
## 入门指南
一旦你[购买了 Tulip](https://tulip.computer)、[打开了 Tulip Web](https://tulip.computer/run)、[构建了 Tulip](docs/tulip_build.md) 或[安装了 Tulip Desktop](docs/tulip_desktop.md),你会看到 Tulip 直接启动进入 Python 提示符,并且与系统的所有交互都在那里进行。你可以使用 Tulip 的内置编辑器制作自己的 Python 程序并执行它们,或者直接在 Tulip REPL 提示符上进行实时试验。
[**查看完整的 Tulip API**](docs/tulip_api.md) 以获取有关所有图形、声音和输入函数的更多详细信息。
以下是一些入门提示和小示例。[完整的 API](docs/tulip_api.md) 页面包含了关于 Tulip 上所有操作的更多细节。也可以[**查看更完整的入门页面**](docs/getting_started.md)或[**音乐制作教程**](docs/music.md)!
```
# 运行已保存的 Python 文件。Control-C 停止运行
cd('ex') # The ex folder has a few examples and graphics in it
execfile("parallax.py")
# 如果你想运行一个 Tulip 包(包含其他文件的文件夹)
run("game")
```
### Tulip 编辑器
Tulip 内置了一个基于 pico/nano 的文本编辑器。它支持语法高亮、搜索、保存/另存为。
```
# 在 Tulip 编辑器中打开给定的文件名。
edit("game.py")
```

### 输入和用户界面
Tulip 支持 USB 键盘和鼠标输入以及触摸输入。(在 Tulip Desktop 和 Web 上,鼠标点击充当触摸点。)它还带有可在你的应用程序中使用的 UI 元素(如按钮和滑块),以及一种使用 callback 同时运行多个应用程序的方法。更多信息请见[完整的 API](docs/tulip_api.md)。
```
(x0, y0, x1, y1, x2, y2) = tulip.touch()
```

### 网络
Tulip CC 能够连接到 Wi-Fi 网络,并且 Python 的原生 requests 库可以用来访问 TCP 和 UDP。我们还提供了一些便捷函数来从 URL 获取数据。更多信息请见[完整的 API](docs/tulip_api.md)。
```
# 加入一个 wifi 网络(在 Tulip Desktop 或 Web 上不需要)
tulip.wifi("ssid", "password")
# 获取 IP 地址或检查是否已连接
ip_address = tulip.ip() # returns None if not connected
# 将 URL 的内容保存到磁盘(需要 wifi)
bytes_read = tulip.url_save("https://url", "filename.ext")
```
### 音乐 / 声音
Tulip 配备了 AMY 合成器,这是一个功能非常齐全的 120 振荡器合成器,支持 FM、PCM、加法合成、局部合成、滤波器等等。我们还提供了一个有用的“音乐计算机”用于音阶、和弦和进行。更多信息请见[完整的 API](docs/tulip_api.md)和[音乐教程。](docs/music.md) 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 callback 来立即响应任何传入的 MIDI 消息。你还可以将消息发送到 MIDI 输出。更多信息请见[完整的 API](docs/tulip_api.md)和[音乐教程](docs/music.md)。
```
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 支持滚动背景层、硬件 sprite 和文本层。更多信息请见[完整的 API](docs/tulip_api.md)。
```
# 在 BG 上设置或获取一个像素
pal_idx = tulip.bg_pixel(x,y)
# 将 PNG 文件的内容设置到背景上。
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
支持硬件 sprite。它们在每一帧的每个扫描线上绘制在背景和文本层之上:
```
(w, h, bytes) = tulip.sprite_png("filename.png", mem_pos)
...
# 设置 sprite 的 x 和 y 位置
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](docs/tulip_api.md)。
```
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!](https://tulip.computer)
* [构建你自己的 Tulip Creative Computer](docs/tulip_build.md),有四种不同的选择。
* [如何编译和烧录 Tulip 硬件](docs/tulip_flashing.md)
* [如何运行或编译 Tulip Desktop](docs/tulip_desktop.md)
* [完整的 Tulip API](docs/tulip_api.md)
* [提交任何代码问题或 pull request!](https://github.com/shorepine/tulipcc/issues)
[ **在我们的 Discord 上聊聊 Tulip!**](https://discord.gg/TzBFkUb8pG)
如果你想帮忙贡献,这里有两条重要的开发准则!
* 保持友善和乐于助人,不要害怕提问!我们做这些都是为了乐趣和学习。
* 任何更改或功能必须在 Tulip Desktop 和 Tulip CC 之间保持对等。这条规则当然有有限的例外情况,但在提出新功能/更改之前,请在硬件上进行测试。
玩得开心!

标签:ESP32, Python, 创意编程, 图形界面, 客户端加密, 嵌入式系统, 开源硬件, 无后门, 音乐合成