ESP32 墨水屏金价牌(上):从点亮到把图片推过去

0 阅读4分钟

墨抒颖注:这玩意其实买错显示屏了,廉价显示屏性能极其有限,用孱弱的ESP32也会多出来延时,想要做秒级的实时的,整个链路都得经得住才行。不过作为第一次的练手来说,到手不到一个小时弄好,已经比上学的时候快的惊人了,那会东西都要自己焊,一个大课才出这么个东西。现在直接买成品,装上驱动,AI处理报错,想好自己要什么然后直接告诉AI,验收即可。但是遇到一些比较难的问题,还是得看代码,深入进去才行。实际上第二天我就遇到了。

这块金价牌最后能稳定跑的方案,是 PC 抓数据、PIL 渲染成图,串口推给 ESP32,ESP32 只负责把图贴上。说白了 ESP32 就是个带串口的显示器。

点击查看成品效果

这篇写从零点亮到能把图推过去这条路。ESP32 自己联网自更新那条路撞了内存墙,放下篇。

第一步先让电脑跟 ESP32 说上话,坑基本都在 Windows 串口这一套上。

#坑根因解法
1serial-mcp 连不上MCP server CONNECTION_CLOSED,进程挂了不依赖它,用 PowerShell / curl 直接探 COM 口
2不知道 COM3 是不是 ESP32需要先确认设备Get-PnpDevice 查到 CH340(VID 1A86 / PID 7523)
3打开 COM3 就把 ESP32 复位了DTR/RTS 自动复位电路脚本不能固定 sleep,要等 READY 握手
4拒绝访问 打不开 COM3Windows 串口独占关掉串口监视器 / 其它占端口的程序
5发的图丢了、屏幕白屏setup 里清屏要 10~20s,期间不读串口 → 缓冲区溢出setup 里不清屏,快速打印 READY

#3 和 #5 其实是同一个道理:硬件时序别猜,等信号。打开串口会触发 DTR/RTS 复位,所以上电后先等 ESP32 打出 READY 再发数据;setup 里也别干清屏这种要十几秒的活,不然串口缓冲区在它忙的时候就被灌爆了,图全丢。

驱动用的 GxEPD2。这块屏只能全刷,这个得先认了。

试过用 nextPageBW 做局部快刷、想把秒级跳动刷出来,结果踩了索引 bug 加波形反转两个坑,整屏直接搞黑。所以秒级刷新别想了。金价本来就是分钟级变化,全刷够用。

屏幕能亮了,接下来要数据。金价数据源是东方财富加新浪。这层坑最多,而且大多不在代码里,在环境上。

#坑根因解法
7CRYPT_E_REVOCATION_OFFLINEWindows schannel 撤销服务器离线curl 加 --ssl-no-revoke
8TLS 指纹:requests 被拒、curl 能通东财风控按 TLS 指纹放行 curl、拦 Python urllib3(同 URL 同时刻 A/B 实测)抓数全用 curl subprocess
9东财 push2his(K线)被重置该主机被风控改用 push2(分时 trends2)+ 新浪日线
10新浪日线返回完整历史AU0 ~512KB、GC ~382KB(2008/2016 至今)PC 端无所谓;ESP32 会 OOM(见下篇)
11matplotlib 崩用 numpy 1.x 编译、环境是 numpy 2.0弃 matplotlib,改用 PIL 画图(反而更可控)
12中文渲染PIL 需中文字体用微软雅黑 msyh.ttc

#8 最要命。同一个 URL、同一时刻,curl 通、requests 被拒,对方风控是认 TLS 握手指纹的。Python 的 urllib3 指纹太标准,一眼就认出来。所以抓数据这条链路我全改成 subprocess 调 curl,不在 Python 里发 HTTP。

#11 算是意外:matplotlib 因为 numpy 版本对不上崩了,我干脆弃掉,直接用 PIL 画。反而更顺手,墨水屏就四级灰度,PIL 画像素直接得多。

图能推上去了,剩下就是让它看着像那么回事。

#坑根因解法
13WiFi 图标先是一堆圆环drawCircle 画的是完整圆手写弧线
14又变成半圆弧画了 180°收到 120°(θ 210°~330°)才是 WiFi 扇形
15灰度被误判成黑rgb_to_planes 亮度计算 int16 溢出(255×587 超 int16 上限)亮度改用 int32 计算

WiFi 图标这段挺逗的。先拿 drawCircle 画,出来一堆同心圆环;改成弧线,又成了半圆。最后才搞清楚,WiFi 那三根扇弧只占 120 度,从 210 到 330。#15 是 int16 溢出,255 乘 587 已经超了 int16 上限 32767,亮度全判成黑,换 int32 就好。

串口稳了、数据抓得动、图渲染对了、屏能全刷,这块牌子就能当串口显示器用了。PC 定时抓数渲染推图,后来 PC 侧还加了个托盘查看器,那是另一个话题。下一篇写 ESP32 自己联网自更新撞的内存墙。

点击查看成品效果

请添加图片描述

请添加图片描述