爱意满满的作品展示区。
tanxw

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

  •  
  •   tanxw · 16h 29m ago · 1355 views

    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 的经验,欢迎交流。

    Supplement 1  ·  10h 28m ago
    已增加 codex 工作状态灯
    11 replies    2026-07-21 17:14:00 +08:00
    thet
        1
    thet  
       16h 20m ago
    厉害 👍
    xuyan1994
        2
    xuyan1994  
       16h 15m ago
    哈哈,厉害
    lpe234
        3
    lpe234  
       15h 15m ago
    要是能把指示灯那块的功能也实现就更好了。 类似交通灯,绿灯亮工作完成、黄灯亮工作中、黄灯闪烁需要人工确认等等... 淘宝上有卖的,不过只有三个 led 指示灯,没有屏幕
    tanxw
        4
    tanxw  
    OP
       15h 13m ago
    @lpe234 可以加个工作状态的页面,我先了解下
    lpe234
        5
    lpe234  
       15h 8m ago
    @tanxw 这个适配比较麻烦。支持 hooks 的还好,一些编辑器插件就不太好获取实时状态
    jackerbauer
        6
    jackerbauer  
       15h 5m ago
    xiaomo123
        7
    xiaomo123  
       14h 53m ago
    大佬 硬件一共花了多少钱
    tanxw
        8
    tanxw  
    OP
       14h 50m ago
    @xiaomo123 不到 40 元
    tanxw
        9
    tanxw  
    OP
       14h 37m ago
    @lpe234 看了下文档,完全可行👍。晚上更新个支持状态的版本上来
    chqyy
        10
    chqyy  
       14h 27m ago
    @steipete/CodexBar
    tanxw
        11
    tanxw  
    OP
       9h 14m ago
    @lpe234 已支持,屏幕上加了个小灯条,工作的时候彩光流动。审批时小灯条会有呼吸效果
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1098 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 18:28 · PVG 02:28 · LAX 11:28 · JFK 14:28
    ♥ Do have faith in what you're doing.