
迷你电子海洋瓶,软硬件全新设计,可编程脚本创建互动式视觉艺术
简介
一个多月的持续pcb打样、代码重构优化、3D结构件改进,最终接近我心中理想的形态。全彩配色可调,可在专用小程序市场下载更多模块,也可以基于lua脚本开发,释放你的创意。
简介:一个多月的持续pcb打样、代码重构优化、3D结构件改进,最终接近我心中理想的形态。全彩配色可调,可在专用小程序市场下载更多模块,也可以基于lua脚本开发,释放你的创意。开源协议
:CC BY-NC-SA 4.0
描述
Bottle 是一个基于 ESP32-S3 的可编程 LED 矩阵设备,支持通过 Lua 脚本创建动态动画效果。它集成了重力感应、音频采集、蓝牙配置等功能,适合创建互动式视觉艺术作品。
项目开源:https://github.com/jeffreyer/Bottle
联系作者: 不爱吃炸鸡ab6 (全网同名)

- LED 矩阵: 17×8 全彩 LED 阵列,支持动态动画
- 重力感应: LIS3DH 三轴加速度计,支持姿态检测和重力交互
- 音频采集: 支持 I2S/PDM 麦克风,实时 FFT 频谱分析
- 音频录制: 支持录制原始 PCM 音频到 U盘
- 触摸控制: 电容触摸按键,支持短按、长按、超长按
- 蓝牙功能:
- BLE 配置服务(通过手机 App 配置设备)
- BLE HID 鼠标模式(将设备用作蓝牙鼠标)
- USB 功能:
- USB 复合设备: 同时支持串口(CDC)和 U盘(MSC)
- 串口调试: 始终可用
- 电源管理: 电池电量监测、自动休眠、低功耗模式
- Lua 脚本引擎: 基于 Lua 5.4.7,支持热加载动画模块
- 模块化架构: 内置多种动画效果(文字滚动、频谱显示、重力粒子、沙漏、蜡烛等)
- 云端配置: 支持通过蓝牙从云端下载和配置模块
- 安全机制: 栈溢出保护、数组边界检查、指令限制
- 持久化存储: NVS 配置存储、Flash 文件系统
- 元件焊接图可参考bottle.html
- 不要焊接R18, R19,这是硬复位用的,除非设备起不来没串口,可短接R18同时短接R19,再依次断开R19,R18,可将设备切换到下载模式
- 额外需要焊接一个R0603的10uF电容到电池正负极焊盘,对于没焊接电池只用Type-C供电的场景必备,否则会闪屏(下一版layout会加上)
- 优先用210°左右的焊锡焊接LED灯阵列,再用低温锡138°-180°焊接另一侧
- LED阵列焊完测试方法:靠近Type-C一侧有2个测试点:LED正极,DIN,用Type-C座子引脚作为负极,用一块开发板写入颜色交替闪烁的的程序即可测试是否焊接正常

可拿Gerber.rar直接去打样,和现有版本一致。
-
安装开发工具
-
克隆仓库
git clone <repo-url> cd Bottle
# 编译固件 pio run # 上传到 ESP32-S3 pio run -t upload # 打开串口监视器 pio device monitor
触摸按键控制:
- 短按: 切换子页面/模式
- 长按 (大于1秒): 正常模式时:在切换动画模块/蓝牙配置模式/关机功能循环,松开即执行显示的功能;蓝牙模式时:在退出蓝牙模式/关机功能循环
- 超长按 (>15秒): 强制关机
Bottle 支持通过 Lua 脚本创建自定义动画效果。详细的 API 文档和示例请参考:
- LED 控制:
led.set(),led.clear(),led.show(),led.text(),led.hsv() - 时间:
time.millis(),time.delay() - 重力感应:
gravity.get()- 返回 X/Y/Z 轴加速度 - 音频频谱:
audio.init(),audio.getSpectrum(),audio.close()
- 文字显示 (
text) - 支持滚动文字、自定义颜色 - 频谱显示 (
rhythm) - 音频频谱可视化 - 重力粒子 - 重力感应控制的粒子效果
- 沙漏 (
sandglass) - 重力感应沙漏模拟 - 蜡烛 (
candle) - 蜡烛火焰动画 - 水波模拟 (
water_sim) - 流体动力学模拟 - RGB 彩虹 (
rgb) - 彩虹渐变动画 - 以上部分模块需通过小程序幻彩抽屉下载
设备支持通过 BLE 进行配置:
- 长按触摸键 2-3 秒进入 BLE 配置模式
- 使用微信小程序幻彩抽屉连接设备(设备名: "BottleLED")
- 通过 小程序 配置模块参数、下载新模块、调整系统设置
- 再次长按退出配置模式
- 17 频段 FFT 分析(0-8kHz)
- 支持 I2S 和 PDM 麦克风
- 可用于音乐可视化、声控动画
- 录制格式: 16-bit PCM, 16kHz 采样率
- 存储位置:
/extflash/rec_*.pcm - 通过 USB U盘导出录音文件
设备使用 USB 复合设备模式,同时提供串口和 U盘功能:
串口(CDC):
- 始终可用
- 波特率: 115200
- 用于调试输出和命令行交互
U盘(MSC):
- 可通过串口命令
usb=1启用(可选) - 启用后设备会显示为 USB 大容量存储设备
- 可访问
/extflash分区 - 用于上传 Lua 脚本、导出录音文件等
- 串口和 U盘可以同时使用
使用流程:
# 1. 连接 USB 线到电脑 # 2. 打开串口终端(115200 波特率) pio device monitor # 3. 电脑会识别出 U盘,可以读写文件 # 4. 串口功能始终可用,可以同时调试
重新烧录:
# 0. 第一次烧录不需要参考此流程 # 1. 连接 USB 线到电脑 # 2. 打开串口终端(115200 波特率) # 3. 发送命令 dfu # 4. 设备会重启进入下载模式
注意事项:
- U盘模式启用时,设备内部无法访问
/extflash文件系统 - 拔出Type-C数据线,文件系统会自动重新挂载
- 串口和U盘可以同时工作,互不干扰
- 固件代码: GPLv3
- 硬件设计: CC BY-NC-SA 4.0
商业使用需获得作者书面许可。
- 好心却黑猫35 - 我制作了一瓶电子海洋
- FastLED - 强大的 LED 控制库
- arduinoFFT - 高效的 FFT 实现
- Lua - 优雅的嵌入式脚本语言
- ESP32 Arduino Core - ESP32 开发框架
- NimBLE - 轻量级蓝牙协议栈
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










