← Liam的博客

PaperReply

ESP32 无线协作画板 — 基于 ESP-NOW 协议的多点实时同步绘画

📋 项目概述

基于 ESP32-32E 开发板的多设备无线同步协作画板。利用 ESP-NOW 协议实现设备间低延迟无线通信,无需路由器即可多台设备实时同步绘画。

自己 — 蓝色
对方 — 红色

🛠️ 硬件配置

开发板
ESP32-32E
屏幕驱动
ST7796
分辨率
320 × 480 (3.5")
触摸控制
XPT2046
无线协议
ESP-NOW (通道 1)
SPI 频率
40 MHz
色彩格式
BGR (RGB565)
RGB LED
GPIO 22 / 16 / 17

📌 引脚配置

屏幕 (ST7796)

TFT_CSGPIO 15
TFT_DCGPIO 2
TFT_MOSIGPIO 13
TFT_SCLKGPIO 14
TFT_MISOGPIO 12
TFT_BLGPIO 27

触摸 (XPT2046)

T_CSGPIO 33
T_IRQGPIO 36

其他

BOOT 按键GPIO 0
电池检测GPIO 34

⚡ 开机流程

初始化 RGB LED 初始化触摸和屏幕 开机动画 触摸校准 (4点) 初始化 ESP-NOW 进入绘画模式

📡 ESP-NOW 数据包

// 9 字节的数据结构
typedef struct {
  uint16_t x1;    // 起点 X
  uint16_t y1;    // 起点 Y
  uint16_t x2;    // 终点 X
  uint16_t y2;    // 终点 Y
  uint8_t  type;  // 1=清屏, 2=点, 3=线
} DrawData;
type 值含义
1清屏命令
2绘制单个点 (半径 3px)
3绘制连线 (双线条加粗)

广播地址 FF:FF:FF:FF:FF:FF,无加密,WiFi 通道 1。触摸采样 10ms,距离 >50px 视为新起点。

💡 RGB 灯光

场景行为
绘画时点亮对应画笔颜色
停画 500ms自动熄灭
接收远程数据红色闪烁 300ms
休眠时触摸白色闪烁

😴 睡眠模式

模式操作行为
轻量睡眠 短按 BOOT (<500ms) 关闭背光,仍接收缓存 ESP-NOW 数据 (最多 100 条),唤醒时重绘
深度睡眠 长按 BOOT (>2s) 关闭屏幕,ESP32 深度睡眠,需重启唤醒

🚀 编译 & 烧录

# 编译
pio run

# 烧录 (替换 COM3 为实际端口)
pio run --target upload --upload-port COM3

# 串口监视器
pio device monitor

开发环境: PlatformIO + VS Code | 目标板: esp32dev | 框架: Arduino | 依赖: TFT_eSPI 2.5.40, XPT2046_Touchscreen

❓ 常见问题

问题解决方法
触摸不灵敏/不准重启重新校准,确保 4 个角落都准确触摸
ESP-NOW 无法同步确保固件相同、都已完成校准、距离 <10m
屏幕花屏重启设备或重新烧录固件
RGB 灯不亮检查 RGB LED 引脚定义