================================================================================ Interactive Signage Hub — Project Summary ================================================================================ 一、硬件架构 ──────────────────────────────────────────────────────────────── 电脑 (192.168.100.18) │ node server.js (port 3000) │ ┌─────────────────────────────┐ │ │ GET /api/status │ 返回 { currentPoster, lastEvent, devices } │ │ POST /api/status │ 接收 status=coming / poster=1|2|3 │ │ POST /api/reset │ 重置到 Poster 1 │ │ 静态文件 │ index.html + poster*.png │ └─────────────────────────────┘ │ │ WiFi (X.factory2.4G, 2.4GHz) │ ┌───┴─────────────┐ ┌──────────────────────────┐ │ XIAO ESP32-C3 │ │ XIAO ESP32-S3 Plus │ │ OLED 128×128 │ │ EE04 驱动板 (50-pin排线) │ │ 触摸传感器 D2 │ │ 7.3" Spectra6 彩色墨水屏 │ │ │ │ ED2208 控制器 │ │ 空闲: WELCOME │ │ 800×480 分辨率, 6色 │ │ 触摸: Hello │ │ 海报1/2/3 手动/自动切换 │ │ My Friend │ └──────────────────────────┘ └─────────────────┘ 二、完整交互流程 ──────────────────────────────────────────────────────────────── 触碰 C3 传感器 │ ├─ C3 OLED 显示 "Hello / My Friend" 2秒 ├─ POST /api/status status=coming │ └─ 后端收到 ├─ currentPoster = 3 ├─ lastEvent = "touch" │ ├─ 网页每 2s 轮询 │ └─ 检测 lastEvent 变化 → 弹出橙色 Toast │ "Someone just triggered the touch sensor!" (4秒消失) │ └─ S3 每 5s 轮询 └─ 检测 currentPoster 变化(1→3) → 断开WiFi → 推数据 → 墨水屏刷新 → 重新连WiFi 网页点击 Poster 1/2/3 │ ├─ POST /api/status poster=X └─ S3 5s内检测到 ID 变化 → 切换显示 Reset 按钮 │ ├─ POST /api/reset └─ currentPoster=1, lastEvent="reset" → 全部回到初始状态 三、技术难点与解决方案 ──────────────────────────────────────────────────────────────── 1. 库冲突 问题: 标准 TFT_eSPI 库(2.5.43) 与 Seeed_Arduino_LCD 并存, 编译器优先使用标准库,没有 ED2208 驱动和 EPaper 类. 解决: 删除 Documents\Arduino\libraries\TFT_eSPI, 只保留 Seeed_Arduino_LCD. 2. WiFi 频段 问题: X.factory 只有 5GHz, ESP32 仅支持 2.4GHz. 解决: 改用 X.factory2.4G. 3. 图片拉伸 问题: 源图是 480×800 竖版, python resize(800,480) 导致横向压缩. 解决: convert.py 先 rotate(90) 旋转, 再 resize. 4. EPD 睡眠唤醒 (最难) 问题: epaper.update() 最后发送 0x02(深度睡眠), 下一次 wake() 发送 0x04(PON) 无法唤醒 ED2208, CHECK_BUSY() 死等 → 系统卡死 → Watchdog 复位 → 循环. 尝试: 改 EPD_WAKEUP 为 EPD_INIT() → 无效. 最终方案: 完全绕过库的 update() 和 sleep(), 手动 SPI 命令: 0x04(PON) → 0x10(推数据+COLOR_GET映射) → 0x12(刷新) 显示保持 awake, 不再进入深度睡眠. 海报切换时断开 WiFi 避免 SPI 冲突, 切完重连. 5. Web Toast 重复触发 问题: lastEvent==="touch" 时, 每次轮询(2s)都触发 Toast. 解决: 增加 lastKnownEvent 变量, 只在状态 TRANSITION 时触发一次. 6. OLED 字体溢出 问题: "WELCOME" 用 logisoso32(32px) 超出 128px 宽度, 最后一个字母截断. 解决: 改为 logisoso22(22px), "TOUCH ME" 改为 logisoso18(18px). 四、关键文件清单 ──────────────────────────────────────────────────────────────── D:\Alison\Seeed Studio\alison-yang\static\img\interface\ ├── server.js Node.js 后端 + API ├── index.html IoT Dashboard (Tailwind CSS) ├── convert.py PNG → C 数组转换脚本 ├── images.h 3张海报 C 数组 (192KB/张, 4-bit nibble) ├── project_summary.txt 本文件 │ ├── EE04_S3_Poster/ S3 Arduino 项目 │ ├── EE04_S3_Poster.ino 主程序 (WiFi + 轮询 + 手动 SPI) │ ├── driver.h 驱动配置 (combo 509 + EE04) │ └── images.h 海报数组 │ ├── c3_touch_sender/ C3 Arduino 项目 │ └── c3_touch_sender.ino 主程序 (OLED + 触摸 + WiFi) │ ├── poster1.png ~ 3.png 原始海报 (480×800 竖版) └── read_serial.py 调试用串口读取 五、库文件修改 ──────────────────────────────────────────────────────────────── 唯一修改的库文件: C:\Users\seeed\Documents\Arduino\libraries\Seeed_Arduino_LCD\ TFT_Drivers\ED2208_Defines.h 修改: #define EPD_WAKEUP() EPD_INIT() (虽然最终未使用, 因为完全绕过了 update/wake/sleep 循环) 六、启动步骤 ──────────────────────────────────────────────────────────────── 1. cd D:\Alison\...\interface node server.js 2. 浏览器打开 http://192.168.100.18:3000 3. S3 插电 (USB 或充电宝) → 自动连WiFi → 显示Poster 1 4. C3 插电 (USB 或充电宝) → 自动连WiFi → OLED显示WELCOME 5. 触摸 C3 传感器 → 全流程触发 或点击网页海报 → S3 切换 ================================================================================