PC → Wi-Fi → ESP32-S3 → SSD1677 墨水屏:在桌面程序里选图、 调参数、预览 800×480 黑白效果,一键推到墨水屏显示。
独立项目——不依赖 InkSight 的后端/数据库/账号体系;仅复用其已验证的
SSD1677 底层驱动(firmware/src/display/ssd1677.cpp,真机验证 + 双 agent 审查)。
| 件 | 说明 |
|---|---|
| ESP32-S3 N16R8(16MB flash + 8MB PSRAM) | PlatformIO esp32-s3-devkitc-1 |
| Waveshare 4.26" e-Paper(SSD1677,800×480 黑白) | |
| 手机充电器 / 独立 5V 电源 |
接线(MOSI=11 SCK=12 CS=10 DC=9 RST=8 BUSY=7 PWR=6):见
wiring.md。
eink-studio/
├── pc/ # Python PySide6 桌面端
│ ├── main.py # 入口
│ ├── ui/ # 界面
│ ├── image/ # 处理管线 (fit→gray→threshold→invert→pack1bpp)
│ │ # 预留 dither() 抖动接口
│ ├── protocol/ # 24B header + CRC32 打包
│ └── transport/ # HTTP 客户端(QNetworkAccessManager)
├── firmware/ # PlatformIO + Arduino
│ └── src/
│ ├── main.cpp # WiFi→屏显IP(splash)→mDNS→HTTP待命
│ ├── display/ # SSD1677 驱动(原样抽自已验证代码)
│ ├── net/ # 手写最小 HTTP 服务(D3, 二进制安全)
│ └── protocol/ # 包解析 + CRC32
├── protocol/protocol.md # ★ 线协议文档(双端对齐的唯一事实源)
└── docs/DEVIATIONS.md # 方案偏离记录(D1 mDNS / D2 屏显IP / D3 弃WebServer)
cd pc 对应仓库根(eink-studio/)
python -m venv .venv
.venv\Scripts\pip install -r requirements.txt编辑 firmware/include/config.h,把占位值改成你的 Wi-Fi 信息:
#define WIFI_SSID "你的WiFi"
#define WIFI_PASSWORD "你的密码"cd firmware
pio run -t upload # 板子接电脑 USB(仅烧录时)
pio device monitor # 看 IP/日志烧录后拔掉 USB、改插充电器(必须)。开机后墨水屏会显示本机 IP,
例如 192.168.1.120(eink-s3.local(Windows 对 mDNS 支持时好时坏,IP 永远可用)。
.venv\Scripts\python -m pc.main- 输入屏幕上显示的 IP(或
eink-s3.local) - Test Connection → 显示 Online
- Open Image 选 PNG/JPG → 调 Fit Mode / Threshold / Invert 实时预览
- Send → PC 提示发送成功,墨水屏 ~2 秒内刷新
见 protocol/protocol.md。核心:24 字节小端 Header (魔数/尺寸/格式/CRC32)+ 48000 字节黑白位图或 96000 字节 4 级灰度位图。
仓库包含 BLE GATT 固件和 PC 传输界面,Android 可发现设备广播; Windows 端扫描、连接和图片发送尚未完成真机验证。建议先使用 Wi-Fi。
- WiFi 凭据写死在
config.h(无配网门户) - 单设备、单连接、无鉴权
- 无 OTA / 无深度睡眠(HTTP 服务常驻)
- 无局部刷新(每次全刷,有黑闪属正常)
| 现象 | 排查 |
|---|---|
| 开机反复重启 | 是否用了电脑 USB 供电?换充电器。 |
| 屏幕没显示 IP | WiFi 连不上(查 SSID/密码);串口 monitor 看日志。 |
| Test Connection 失败 | 电脑和设备要在同一 WiFi;检查 IP;防火墙拦出站少见但可查。 |
| Send 失败 crc mismatch | 升级过协议而另一端没同步刷固件/装包。 |
pip PySide6 后启动报 DLL load failed |
用 PySide6==6.5.3;详见 DEVIATIONS.md 外注记。 |
ImageProcessor.dither()— 抖动灰阶- protocol FLAGS 位 — 新图像格式
- transport 抽象层 — USB/双设备
SSD1677 驱动基于 InkSight 的 MIT 许可代码改编,原许可见
INKSIGHT_LICENSE.txt。