ESP-Now 你画我猜


ESP-NOW 双屏同步 (ESP32-S31-Korvo-1)

两块 ESP32-S31-Korvo-1 各驱动一块 4.3" 800×480 RGB LCD + GT1151 触摸屏,通过 ESP-NOW 实时镜像手写笔迹:在任意一块屏上画线,另一块屏会同步画出相同的笔迹; 点击右上角 CLR 按钮可同时清空两块屏。

烧录同一套固件到两块板(同一 Wi-Fi 信道)即可,无需配对——双方通过广播 peer 自动互通。


重要:ESP-IDF 版本

这块板的芯片是 ESP32-S31esp32s31 target)。目前多数已发布的 ESP-IDF 版本 尚不包含 esp32s31 target,官方 esp-dev-kits 也说明该板"建议使用 ESP-IDF master 分支"开发。

因此本工程需要用支持 esp32s31 的 ESP-IDF(master,或后续正式加入该 target 的版本) 来编译。在不支持该 target 的版本上执行 idf.py set-target esp32s31 会报 target 不存在。

获取并安装 master:

git clone -b master --recursive https://github.com/espressif/esp-idf.git ~/esp/esp-idf-master
cd ~/esp/esp-idf-master && ./install.sh esp32s31
. ./export.sh


硬件要求

  • 2 × ESP32-S31-Korvo-1(V1.1),含 4.3" LCD 子板 ESP32-S3-LCD-EV-Board-SUB3
  • 模组 ESP32-S31-WROOM-3:16 MB Flash + 16 MB PSRAM
  • 屏:800×480 RGB565 并口;触摸:GT1151(I2C)

软件设计

文件职责
main/app_main.c启动 BSP 屏幕/触摸/LVGL,串联绘制与 ESP-NOW
main/espnow_link.[ch]Wi-Fi STA + 固定信道 + 广播 peer 的收发封装
main/draw_sync.[ch]全屏 LVGL canvas、触摸采集、远端笔迹绘制队列
main/Kconfig.projbuild信道、线宽等可配置项

关键点:

  • 本地笔迹在 LVGL 任务(触摸事件回调)里即时画到 canvas,并通过 ESP-NOW 广播 一条 {x0,y0,x1,y1} 线段消息。
  • 远端笔迹在 ESP-NOW 接收回调(Wi-Fi 任务)里入队,由独立任务持 bsp_display_lock 后再绘制(LVGL 非线程安全)。
  • 绘制只 invalidate 笔迹包围盒(而非整屏),避免 800×480 RGB 屏每画一小段就 全屏刷新。
  • canvas 缓冲(800×480×2 ≈ 768 KB)分配在 PSRAM。
  • 屏幕显示与 ESP-NOW 共用一个固定信道(默认 1,见 menuconfig),两块板必须一致。

绘制/触摸全部走官方 BSP espressif/esp32_s31_korvo_1 的统一接口 (bsp_display_start/lock/unlock),所以代码与具体屏/触摸型号解耦;BSP 会传递引入 RGB LCD 驱动、GT1151 触摸、esp_lvgl_port 和 LVGL 9。


编译与烧录

# 加载支持 esp32s31 的 IDF(见上文)
. ~/esp/esp-idf-master/export.sh

cd espnow_dualscreen

idf.py set-target esp32s31

# 可选:修改 ESP-NOW 信道 / 线宽,并确认 PSRAM 模式/速率
idf.py menuconfig   # -> "ESP-NOW Dual-Screen Sync" / "ESP PSRAM"

# 第一块板
idf.py -p <PORT_A> flash monitor
# 第二块板,烧同样固件
idf.py -p <PORT_B> flash monitor

首次 build 会通过组件管理器联网下载 BSP 及其依赖,请确保网络可用。


评论 (0)

评论

登录后即可评论

暂无数据
暂无数据