用透明 OLED 做一个蓝牙歌词显示及音乐控制器
最近折腾了一块微雪的 0.96 寸 SSD1312 透明 OLED,128×64 分辨率。透明屏挺有意思的,就想着拿它做一个复古风格的蓝牙音乐线控,既能控制手机播放音乐,又能显示歌曲信息和实时歌词。
硬件部分
主要用到了下面几个模块:
- RP2040:负责屏幕驱动、按键和界面显示
- SSD1312 透明 OLED:显示歌曲信息和歌词
- ANS-BT301S:负责蓝牙连接、音乐控制和歌词数据获取
- 几个实体按键:音量调节、播放暂停、上一首和下一首
最初考虑直接用 ESP32 实现,但获取手机播放的歌曲信息和歌词没那么简单。后来找到 ANS-BT301S 模块,它支持通过串口输出歌曲信息和歌词,正好符合需求。

制作过程
首先解决的是透明 OLED 的驱动问题。这块屏幕采用 SSD1312,使用 MicroPython 编写驱动,最开始遇到了花屏、错行等问题,尤其是频繁刷新或者滚动文字时比较明显。后来改用了I2C接口,显示总算稳定了下来。
接下来是蓝牙部分。RP2040 通过 UART 与 BT301S 通信,发送 AT 指令实现播放控制,同时接收歌曲名称、播放进度和歌词数据。
这里也踩了个坑:模块的歌词输出和手机音频播放方式有关。测试发现,手机直接用扬声器播放时无法正常获取歌词,但连接蓝牙耳机后就可以获取。
最后是界面设计。因为屏幕只有 128×64,能显示的内容非常有限,所以尽量做得简洁一些。顶部显示蓝牙状态和歌曲名称,中间是播放状态、时间及进度条,底部留给歌词。中文显示使用 GB2312 字库,还做了歌曲名称滚动显示和自动熄屏等功能。

最后
整个项目最麻烦的反而不是硬件,而是屏幕驱动的稳定性和蓝牙歌词的获取。
目前基本实现了最初想要的功能。透明 OLED 配合复古线控的设计,感觉还是挺有意思的。
后续再做一个外壳,把电池和按键整合进去,做成真正可以随身使用的小设备。
最后附件中附上源码
硬件清单
- ssd13121




