2026-05-30

给 Claude Code 做了个桌面硬件小玩具

第一个硬件项目:用 ESP32 + 彩屏 + 电磁铁 + 蜂鸣器,通过 Hook 把 Claude Code 的工作状态实时映射到桌面硬件上

Claude CodeESP32硬件HookVibe Coding

更新 2026-06-01:

外壳到货、组装完毕、整机功能全部调通。"后续"里的两件事都做完了——外壳组装完毕,电磁铁推杆顶上也粘了一只小螃蟹(Claude吉祥物),召唤权限时一蹦一蹦。视频是硬件演示。

  • 跨应用确认:当 Claude Code 需要确认权限时,即使焦点不在 Claude Code 终端,按一下顶上的按钮也能切回去确认权限,确认完会自动切回原来的应用。可以看视频演示,我先把让 Claude 在后台运行,并将窗口切到浏览器,当需要确认权限时,电磁铁跳动提醒,这时按一下小螃蟹,焦点跳回终端确认,又迅速自动跳回浏览器。
  • 按钮短按 / 长按:短按是权限确认,长按是静音 / 取消静音的切换。
  • 顶上的红色小螃蟹:这个螃蟹相信用过 Claude Code 的人都非常熟悉吧😂,是 Claude 终端上的动画形象~也是3D打印的小玩具。
  • 当前装配状态:硬件还是用蓝丁胶临时粘起来的,板子之间和外壳都还没拧螺丝,再用一段时间,没问题再拧。

最近会把代码整理一下上传到 GitHub,感兴趣可以蹲蹲~会包含固件代码和外壳建模,以及给 Claude Code 使用的 Hook 插件(可以直接通过 plugin 方式进行安装哦!一键安装,即插即用~)

成品演示:组装完成后的整机效果

以下是原文(2026-5-30) ↓

这是什么

一个软硬件混合的桌面小玩具:把 Claude Code 的运行状态映射成 ESP32 屏幕动画 + 电磁铁推杆 + 蜂鸣器,让 AI 的工作"看得见、听得见、摸得着"。这是我的第一个硬件项目,零基础起步,从选元件到画 CAD 外壳全程 vibe coding。

小玩具运行演示

动机

第一,是平时让 Claude Code 跑长任务,最烦的是不知道它现在到哪一步了——是在思考、在写代码、卡在等我点"同意权限",还是已经跑完了?盯着终端干等很累,切去干别的又怕错过它的提问。

第二,是我想试试,借助 AI 我能把能力边界推到多远。 说实话,如果没有 AI,硬件开发这种事儿我可能不会自己上手。不是不感兴趣——我初中就自己组装过一台 3D 打印机,从小就喜欢捣鼓东西,各种拆装啥的。但让我从零写固件、选 MOSFET、画 CAD,以前可能觉得"这不是我专业,搞不来的"。有了 AI 之后,心里的第一反应变成了:说不定我也可以?

这个项目就是那个"说不定"的结果。从看不懂电路图到整机跑通,全程 vibe coding,AI 帮我把"望而却步"变成了"要不试试"。

工作方式

Claude Code Hook → Python 插件 → Mac daemon ──USB──► ESP32 → 屏幕 / 电磁铁 / 蜂鸣器
                                               ◄──USB── 硬件按钮

Claude Code 在不同时刻触发不同的 Hook 事件,插件翻译成单字符指令通过串口发给 ESP32,ESP32 再决定屏幕动画、电磁铁动作、蜂鸣器音效。

核心设计原则是 "动 = 重要"——只有需要我介入的时刻硬件才会有物理动作:

Claude 在干嘛屏幕电磁铁蜂鸣器
我刚提交输入🟡 黄底螃蟹思考中静止静音
它在写/改代码🔵 蓝底螃蟹敲键盘静止静音
它在等我批准权限🟠 橙底感叹号"召唤"咔咔咔 咔——叮叮叮
任务完成🟢 绿底螃蟹开花咔!咔!马里奥金币音
闲置 6 秒后⚪ 浅灰打盹静止静音

硬件按钮支持短按(切 Claude Code 窗口 + 确认权限弹窗)和长按(切换静音),即使焦点在别的桌面也能一键确认。

硬件

整套淘宝下来约 80 元:ESP32-C3 SuperMini 做主控、0.96" ST7735 彩屏显示动画、IRF540N 光耦隔离 MOS 模块驱动电磁铁、无源蜂鸣器、微动按钮,全堆在面包板上。

硬件一览:面包板上的 ESP32-C3、电磁铁、MOS 驱动模块、彩屏、蜂鸣器和微动按钮
硬件一览:面包板上的 ESP32-C3、电磁铁、MOS 驱动模块、彩屏、蜂鸣器和微动按钮

外壳

用 CadQuery 建了外壳模型,在嘉立创下单 3D 打印——每月一次的免费打印券,原价一百多,直接 0 元购。(嘉立创真的大好人)

CadQuery 建的外壳模型
CadQuery 建的外壳模型

第一版参数没调对,板子塞不进去。连夜改了参数重新下单,周日到货再组装。

第一版外壳:参数没调好,板子塞不进去
第一版外壳:参数没调好,板子塞不进去

技术亮点

  • Hook 事件映射:注册 5 个 Claude Code 事件(user_prompt→思考、pre_write_tool→写代码、permission_request→召唤、stop/notification→完成),通过本地插件 xiaoke-local-plugin 装到 Claude Code
  • Mac 桥接 daemon:ESP32-C3 的 USB-Serial 不支持 HID 模拟键盘,按钮确认权限走 Mac daemon 监听串口 + JXA 编译的 KeyReturn.app 模拟回车,权限范围收窄到"只能按回车"
  • 动画资产管线:SVG 源 → Playwright 采样帧序列 → 256 色调色板量化 → RLE 压缩 → Arduino C++ header,全自动零手动逐帧
  • Pygame 桌面模拟器:不烧设备就能在 Mac 上预览所有状态的螃蟹动画效果

后续

  • 等新外壳到货,把所有模块塞进去,做成真正能摆桌上的小盒子
  • 在电磁铁推杆上粘一只 Claude 吉祥物螃蟹——召唤时小螃蟹在桌上一蹦一蹦