制作一款通过 USB 供电的桌面显示屏,可实时本地显示你的 AI 使用额度
如果你整天都在使用 Claude、ChatGPT、Copilot 或 Cursor,那么使用限制通常会在最不方便的时候出现:比如在重构工作进行到一半时,或即将演示前。这些数字存在,却深藏于设置页面或菜单栏弹出窗口中,你根本不会去查看。
我希望它们能出现在我真正关注的地方——桌面上,紧挨着键盘,始终可见。最终,ESP32-2432S028R(更广为人知的“廉价黄色显示屏”CYD)成为理想之选。它价格低廉,配备 2.8 英寸彩色触摸屏和内置 USB 接口,完全无需焊接。
它做什么
•AI Monitor 一次显示一个服务提供商的当前使用限制:Claude、ChatGPT、Gemini CLI、GitHub Copilot、Cursor 或 Antigravity。
•通过环形或条形图展示会话和每周的使用限制(如可用,会按服务提供商分列)。
•实时倒计时,直至各限制重置。
•显示已使用或剩余百分比,任您选择。
•支持竖屏与横屏布局、浅色与深色主题、可调节亮度、语言及时区设置。
•当电脑休眠或应用关闭时,显示待机时钟。
它是如何工作的
显示屏不与任何AI服务通信,也从未看到过API密钥或登录信息。所有这些操作都保留在你的电脑上:
••CodexBar是由Peter Steinberger开发的一款开源工具,可本地读取你的使用限制。其命令行界面(CLI)以JSON格式返回这些数据(codexbar usage --provider claude --json)。在Windows系统上,Win-CodexBar提供了相同的CLI。
•AI Monitor配套应用程序每三分钟调用一次该CLI,应用你的显示设置,并生成一个紧凑的JSON帧。
•通过USB串口将该帧以115200波特率传输至ESP32,使用数据仅通过此线缆传输。
•固件解析该帧,并使用LVGL进行渲染。
以下为帧的一个简化示例:
ESP32会为每个帧发送简短的确认响应:
1:获取设备
购买一块ESP32-2432S028R。有两种面板版本,名称几乎相同:大多数板卡使用ILI9341控制器,部分使用ST7789。你无需预先知道具体型号,应用程序可兼容两者。
2:安装CodexBar
•macOS:下载安装CodexBar,或使用Homebrew安装:brew install --cask steipete/tap/codexbar
•Windows:使用winget安装Win-CodexBar:winget install Finesssee.Win-CodexBar
然后在 CodexBar 中启用你使用的提供商(如 Claude、ChatGPT、Copilot 等),并确保它们能在其中显示数据。
3:安装 AI Monitor 应用程序
macOS:v* 版本的应用程序(AIMonitor.dmg),这是一个已签名且经过 Notarization 的通用二进制文件。
Windows:v* 版本的 Windows 应用程序(AIMonitor-Setup.exe)。此版本为测试版,尚未在真实 Windows 硬件上验证过,安装程序也未进行代码签名,因此首次启动时 SmartScreen 会发出警告。
如果 Windows 没有自动安装 CH340 USB 串行芯片驱动程序,你可能需要手动安装。
4:刷写固件
使用 USB 数据线连接 CYD。打开应用程序设置,选择“刷写固件”,然后选择板型:
•标准型号(ILI9341):ESP32-2432S028R,建议先尝试此选项。
•替代型号(ST7789):ESP32-2432S028
应用程序将从 GitHub 发布页面下载匹配的固件,清除闪存,写入并验证固件。无需 PlatformIO、esptool 或 Arduino IDE。如果屏幕保持白色或出现杂音,请尝试选择另一种型号进行刷写。
5:选择一个提供商
在应用中选择供应商。应用会自动检测USB连接的显示屏,每次插入时都会立即重新发送当前数值,此后显示屏将自动更新。
菜单栏中还有一个可选的快捷菜单,无需打开设置即可切换供应商。
6(可选):打印外壳
CYD 可适配现有的3D打印外壳。我使用了MakerWorld提供的以下两个型号:
横向:Weather Station Pro for ESP32-2432S028 CYD
纵向:Aura Smart Weather Forecast Display
引擎盖下
固件。基于Arduino-ESP32使用PlatformIO构建,面板采用TFT_eSPI,界面使用LVGL v9,解析数据则依赖ArduinoJson。支持两种构建目标:esp32dev(ILI9341)和esp32dev-st7789。界面可适配每个供应商最多三行的使用内容。
串口协议。应用程序打开端口,发送{"cmd":"get_info"}并等待固件返回版本号和最大帧大小。亮度或方向等短命令以单行JSON格式发送;使用帧则带有长度前缀的头部(AIM1),以便ESP32准确知道需要读取的字节数,并对每帧进行确认。若数据过期,显示屏会显示该数据,而非假装数值为最新状态。
配套应用。Mac版应用使用Swift和AppKit开发,采用纯POSIX串口I/O;Windows版应用使用Tauri 2框架,后端为Rust语言(通过serialport实现通信,通过espflash完成刷机),前端为React。两者均从GitHub Releases检查应用和固件更新,并根据显示器保存设置。
可选Wi-Fi功能。使用数据始终不依赖Wi-Fi。如果希望在电脑关闭时保持待机时钟的准确性,可为显示屏提供Wi-Fi凭据,此时系统仅通过NTP同步时间。
本文编译自hackster.io





