花 40 块买了个编程掌机,我没刷游戏,把它改成了电脑副屏
淘宝 40 块钱的 ESP32 掌机,本来是用来写 刷小游戏的。我刷完固件之后,盯着那块 160×128 的彩屏看了五分钟------然后决定把它变成我桌上最酷的电脑扩展屏。
两天,22 个文件,两个 AI 助手(gpt和deepseek),搞定了。
起因:40 块钱能买什么?
前段时间逛淘宝,看到一款 ESP32 编程掌机------带彩屏、带按键、带蜂鸣器,才 40 块。作为一个程序员,这种小玩意儿天然有种吸引力。
下单,到货,拆包装。塑料外壳,手感一般,但屏幕亮起来那一下还是有点意思的。


然后我就想:弄个啥有点实际作用。
我桌上缺一个副屏。不是那种花几百块买的 USB 扩展显示器,而是一个小巧的、能实时显示电脑状态的屏幕。CPU 多少度、内存吃了多少、今天什么天气------全都一眼能看到。最好还能按个键就打开 AI 终端。
掌机的屏幕 160×128,两个功能键,一个方向键。够了。
怎么做:把掌机变成电脑的"眼睛"
想法很简单:ESP32 连 WiFi,PC 把数据发过去,屏幕显示出来。
真做起来,大概分了这几步:
第一步:硬件摸底。 先不动手,用 esptool 完整备份 4MB 原始固件------万一翻车了还能刷回去。这一步花了十分钟,省了后面可能的一整天。
第二步:刷 MicroPython。 原厂固件是 Arduino,换成 MicroPython 才能快速迭代。一条命令搞定,比想象中顺利。
第三步:WiFi 配网。 这是第一个坎。ESP32 开热点,手机连上去输入家里 WiFi 密码------听起来简单,但 iPhone 热点的 SSID 在 Windows 上是小写 iphone,MicroPython 连 iPhone 就认不出来。大小写,卡了我半小时。
第四步:TCP 通信。 PC 上写个 Python 服务端,每秒采集一次 CPU/内存数据,打包成 JSON 发到 ESP32。ESP32 端的状态机自动处理断线重连------WiFi 断了就退避重试,1 秒、2 秒、4 秒、8 秒......直到连回来。
第五步:屏幕 UI。 这是最磨人的部分。160×128 的 ST7735 屏,本来想做个炫酷的像素天气图标------画上去全是马赛克。放弃图标,切回纯文本。用户(我自己)说越简洁越好,于是一路砍:不要状态条、不要等级条、不要花哨的边框。最终只留了 CPU 进度条、内存进度条、天气文字、时间日期。
第六步:按键绑定。 A 键一键启动 Hermes 终端,B 键启动 Codex 终端。在掌机上按一下,电脑上直接弹出一个 AI 对话窗口。
两天,从一块裸板到一个跑在桌面上的遥测面板。

AI 在这个项目里做了什么
这个项目最特别的地方在于,我几乎全程用 AI 写代码。
不是 ChatGPT 那种一问一答,而是两个 AI 终端------Hermes 和 Codex------直接在我的电脑上操作文件系统、执行命令、调试硬件。
大概的分工:
- 硬件探测和固件刷写 :AI 帮我查 ESP32 的芯片型号、Flash 参数,生成正确的
esptool命令。这种事自己翻文档要二十分钟,AI 十秒出结果。 - MicroPython 代码:WiFi 状态机、TCP 重连逻辑、按键消抖------这些都是 AI 生成的初版,我只做审查和微调。变量名写错这种低级错误 AI 基本不犯。
- PC 端服务端:PyQt6 的 GUI、psutil 数据采集、天气 API 调用------AI 搭好骨架,我调调布局。
- Bug 排查 :最有意思的部分。有个 Bug 是 ESP32 反复断连,我描述了一下现象,AI 分析出是多个 Python 进程同时抢 8899 端口。还有一个 Bug 是照片功能内存溢出,AI 直接定位到
bytearray缓冲的问题。
说实话,如果纯手写,这个项目我至少要做一周。AI 把"从想法到原型"的时间压缩到了一个晚上。
当然 AI 也不是万能的。它不知道 iPhone 热点的 SSID 大小写问题------这是我用小写试出来的。它也不知道 ST7735 的 framebuffer 不支持直接图片渲染------这是跑崩了以后才发现的硬件限制。
人负责知道"要做什么"和"哪里不对劲",AI 负责把中间那 80% 的代码搬砖干了。
踩坑不细说,挑几个有意思的
iPhone 热点的大小写陷阱
Windows 上热点名显示 iphone(全小写),但 MicroPython 的 wlan.connect('iPhone') 连不上。Python 里 'iPhone' != 'iphone',这个问题换谁都想不到。
ST7735 不能当"电子相册"
我花了一个下午写图片传输功能------PC 压缩图片、分片发送、ESP32 接收拼装------全都跑通了,最后卡在最后一步:屏幕不显示。查了一圈发现,这款屏的 framebuffer 不支持 buf[:] = data 这种直接帧缓冲写入。硬件不支持,几百行代码白写了。
教训:嵌入式开发,先验证硬件能力边界,再写代码。一个 2 像素的色块测试,能省掉一整个下午。
多进程端口打架
GUI 跑起来了,但 ESP32 死活连不上。排查半天发现:之前测试用的服务端进程没关,和 GUI 里的服务端同时监听 8899。AI 提醒我查端口占用,一条 netstat 就找到了。
最终效果
现在我的桌面上,这块 40 块钱的小屏幕静静地亮着:
CPU [████████░░░░░░░░] 45%
MEM [████████████░░░░] 67%
Clear 38°C
08/06 17:30
按一下 A 键,电脑弹出 Hermes 终端,随时可以跟 AI 对话。按一下 B 键,弹出 Codex,开始写代码。
写在最后
这个项目让我重新思考了两件事:
AI 时代的开发范式变了。 以前做嵌入式项目,门槛在"怎么用"------不懂寄存器、不熟 SDK、没写过 MicroPython,基本劝退。现在有了 AI,门槛从"怎么用"变成了"想要什么"。你只需要清楚描述你的想法,AI 能帮你把路径找出来。
当然,AI 不会替你踩坑------iPhone 热点的大小写、ST7735 的硬件限制、端口冲突的诡异现象,这些"现实世界的脏细节"还是得人来发现。
但至少,人类的角色从"搬砖工"变成了"探险家"。这个转变挺好的。
项目信息
- 设备:ESP32 编程掌机(¥40),ST7735 彩屏 160×128
- 技术栈:MicroPython + PyQt6 + psutil + Open-Meteo API
- 通信方式:WiFi TCP + NDJSON 协议
- 代码量:22 文件,约 40KB
- 开发周期:2 天(含踩坑)
- AI 工具:Hermes CLI + Codex CLI