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-S31(esp32s31 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)
评论
登录后即可评论