最近做了个 codex 小摆件,有兴趣可以复刻一个玩玩

tanxw 2026-07-21 09:59 1

V2EX 发布草稿



  • 推荐节点:分享创造(也可选 硬件

  • 发帖语法:Markdown

  • 标题:做了一个 ESP32-C3 桌面 Codex 用量监视器,还能联动 Lunar 自动调光




最近用 Codex 比较多,但每次想看 5 小时和每周额度,都要切回网页。于是做了一个放在显示器旁边的小屏幕:平时抬眼就能看到 Codex 用量,也可以切成 macOS 系统监视器。


主控是 ESP32-C3 SuperMini ,配一块 160 × 80 的 ST7735 彩屏。外壳、固件、本地服务和 Web 控制台都自己做了,目前已经开源。


ESP32-C3 SuperMini Codex Monitor 实机


两个显示页面


第一个页面显示 Codex 用量,包括 5 小时窗口、每周窗口、重置进度和连接状态。数据由 Mac 上的 Python 服务读取,再通过 WebSocket 推送给 ESP32 ; Codex 的登录令牌始终留在电脑上,不会写进单片机。


Codex 用量页面


第二个页面是系统监视器,可以显示 CPU 、内存或内存压力、磁盘、系统负载以及网络上下行速度。性能页做了平滑动画和多套配色,切换时不会突然跳数。


macOS 系统监视页面


不只是显示 Codex 用量


我给它加了一颗光敏电阻,目前有三种用途:



  1. 根据环境亮度自动调节小 TFT 自己的背光;

  2. 通过遮挡手势切换 Codex / 系统监视页面;

  3. 通过 mDNS 发布 lunarsensor.local,把照度提供给 Lunar ,用于自动调节电脑显示器亮度。


第三项是我比较喜欢的部分。ESP32 会提供:


http://lunarsensor.local/sensor/ambient_light
http://lunarsensor.local/sensor/status
http://lunarsensor.local/events

其中 /events 是 SSE 实时照度流。Mac 和 ESP32 在同一个局域网时,Lunar 可以通过 lunarsensor.local 找到传感器,再根据环境光控制显示器亮度。


当然,这部分要求显示器及连接方式本身支持被 Lunar 调节;不支持的话,ESP32 的照度上报和 TFT 自身自动背光仍然可以正常使用。


Web 控制台


本地服务还带了一个 Web 控制台,可以实时查看:



  • ESP32 在线状态和最后上报时间

  • Codex 用量与 Mac 性能

  • 环境照度和 TFT 背光百分比

  • WebSocket 推送状态


也可以远程切换显示模式、屏幕方向、内存指标、Mac 屏幕亮灭跟随,以及性能页配色。修改后通过 WebSocket 直接下发给 ESP32 ,不需要重新烧录。


Web 控制台


硬件和接线


主要材料:



  • ESP32-C3 SuperMini

  • 0.96 英寸 160 × 80 ST7735 SPI 屏幕

  • 光敏电阻 + 10 kΩ 电阻

  • 3D 打印外壳


固件中的接线如下,全部是 SuperMini 板上标注的原始 GPIO:


ESP32-C3 SuperMini     ST7735 / 传感器
3V3 -> VCC
GND -> GND
GPIO5 -> BLK
GPIO6 -> CS
GPIO7 -> DC / A0
GPIO8 -> SCL / CLK
GPIO9 -> RST / RES
GPIO10 -> SDA / MOSI
GPIO0 -> 光敏电阻与 10 kΩ 电阻中点

PlatformIO 里借用了 seeed_xiao_esp32c3 的兼容编译环境,但实际主控不是 XIAO ,接线不能照搬 XIAO 的 D0–D10 编号。


软件结构


整体数据链路比较简单:


Codex API ─┐
├─> Mac 本地 Python 服务 ─WebSocket─> ESP32-C3 ─SPI─> TFT
系统指标 ──┘ │
└─> Web 控制台

环境光 ─> ESP32-C3 ─mDNS / HTTP / SSE─> Lunar ─> 电脑显示器亮度

Python 服务默认监听 0.0.0.0:8080,常用命令是:


./server.sh start
./server.sh status
./server.sh restart
./server.sh stop
./server.sh foreground

第一次上电时,ESP32 会创建 CodexUsage-xxxx 热点。连上后打开 192.168.4.1,填写 Wi-Fi 、Mac 的局域网 IP 和端口即可。Wi-Fi 、显示模式和配色会保存到 NVS 。


开源地址


项目已经放到 GitHub:


https://github.com/evoking6/esp32-code-monitor


仓库里包含:



  • ESP32-C3 固件(有光感 / 无光感两个构建环境)

  • LittleFS 配网页面

  • Python 用量与性能服务

  • WebSocket 控制台

  • macOS 屏幕状态联动

  • 完整接线和部署文档

  • 外壳、盖子、导光件 STL


目前主要在 macOS 上使用,其他系统的基础性能采集可以工作,但屏幕睡眠联动是 macOS 专用的。后面可能会继续优化外壳、光感标定和更多显示页面。


如果大家有更适合 160 × 80 小屏幕展示的指标,或者有不同显示器搭配 Lunar 的经验,欢迎交流。

最新回复 (11)
  • thet 07-21 10:07
    1
    厉害 👍
  • xuyan1994 07-21 10:12
    2
    哈哈,厉害
  • lpe234 07-21 11:12
    3
    要是能把指示灯那块的功能也实现就更好了。 类似交通灯,绿灯亮工作完成、黄灯亮工作中、黄灯闪烁需要人工确认等等... 淘宝上有卖的,不过只有三个 led 指示灯,没有屏幕
  • tanxw 楼主 07-21 11:15
    4
    @lpe234 可以加个工作状态的页面,我先了解下
  • lpe234 07-21 11:19
    5
    @tanxw 这个适配比较麻烦。支持 hooks 的还好,一些编辑器插件就不太好获取实时状态
  • jackerbauer 07-21 11:23
    6
    https://gitee.com/assad2008/monitoring-codex-usage

    做了个桌面版,分享分享
  • xiaomo123 07-21 11:35
    7
    大佬 硬件一共花了多少钱
  • tanxw 楼主 07-21 11:37
    8
    @xiaomo123 不到 40 元
  • tanxw 楼主 07-21 11:51
    9
    @lpe234 看了下文档,完全可行👍。晚上更新个支持状态的版本上来
  • chqyy 07-21 12:00
    10
    @steipete/CodexBar
  • tanxw 楼主 07-21 17:14
    11
    @lpe234 已支持,屏幕上加了个小灯条,工作的时候彩光流动。审批时小灯条会有呼吸效果
* 帖子来源V2EX
返回