使用ESP32 + 显示屏构建一个MacOS“正在播放”设备
Now Playing Display 是一款小巧的 USB 供电桌面设备,可将 Mac 上播放的音乐内容(包括专辑封面、曲目名称、艺术家以及进度条)镜像显示在 240×240 的圆形触摸屏上。通过点击按钮即可实现播放/暂停或跳过曲目。
只需插入USB-C接口,菜单栏应用便会自动检测设备,推送当前媒体内容,并处理播放指令。
硬件是特意采用现成的,任何人都能在一两个小时内组装完成:
•Seeed XIAO ESP32-C6(预焊接引脚头,方便使用)。
•XIAO 用圆形显示屏(GC9A01A 240×240 + CHSC6X 电容式触摸)
•任意 USB-C 数据线
•3D打印的卡扣式手机壳(STL文件可在Thingiverse上获取)
我为何坚持下去
我想要一个清晰可见的“正在播放”指示器,它不会被其他键盘快捷键、浏览器标签或菜单栏下拉选项所遮挡。
Mac 已经知道正在播放什么内容。Apple Music、Spotify、音乐应用、播客,甚至 Safari/YouTube 的标签页都会将元数据暴露给系统的 MediaRemote 服务,因此显示界面只需作为该服务的扩展即可。
Seeed Studio 的 XIAO ESP32-C6 + 圆形显示屏组合物美价廉,小巧精致,能出色地呈现专辑封面艺术。
它是如何工作的
该设备使用自定义的ESP-IDF固件和配套的MacOS应用程序运行:
1. ESP32 固件(使用 ESP-IDF 在 FreeRTOS 上构建,采用 LVGL 实现用户界面)通过 USB 串口监听一种小型二进制协议。
Mac 会解码专辑封面,将其缩小为 240×240,转换为 RGB565(即显示屏的原生格式,因此 ESP32 不需要进行任何图像处理),然后通过网络传输约 115 KB 的帧数据。曲目元数据仅以 JSON 格式存在。触摸屏幕时,这些事件会反向处理,在主机上变成 AppleScript 的媒体键事件。
首次启动时,在 Mac 应用连接之前,屏幕上会显示一个指向项目页面的二维码。
2. Mac 菜单栏应用是一个使用 py2app 打包的 Python 应用程序。它位于菜单栏中,带有“登录时启动”开关,并静默地监听设备是否通过 USB 出现。当设备出现后,它会开始向苹果的私有 MediaRemote 框架查询当前播放的元数据。
设置
购买硬件后,需将屏幕连接到ESP32,如下图所示:
现在,需要使用 esptool CLI 或 Chrome 浏览器中的 ESP 网页工具来刷写固件。
•下载 firmware.bin
•通过USB-C接口使用CLI(如下图所示)或ESP网络工具连接XIAO ESP32-C6:
•下载并安装 macOS 伴侣应用
•要让其在登录时自动启动,请点击菜单栏图标,然后切换“登录时启动”选项。在 macOS 中,该选项会显示在“系统设置”→“通用”→“登录项”中,可随时将其关闭。
本文编译自hackster.io





