# ESP32-P4-C6 **Repository Path**: Auto_Action/esp32-p4-c6 ## Basic Information - **Project Name**: ESP32-P4-C6 - **Description**: P4C6开发板的项目 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-25 - **Last Updated**: 2026-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Touch Deck 2.1.0:快捷键面板与手动USB扩展屏 本次实板 GUITION JC4880P443C_I_W:ESP32-P4 revision v1.3 + ESP32-C6,16MB Flash / 32MB PSRAM。 二次开发请先读 [info/README.md](info/README.md):硬件引脚、构建烧录地址、显示触摸时序、 无线配网约束与源码地图都汇总在那里。 ## 界面预览 板子实际屏幕(第一页常用快捷键,BLE 已连接,截图来自 `logs/screen.png`): ![设备实拍界面](docs/device-screen.png) 网页配置界面(浏览器改键、中文名称、自定义图标,保存后同步到触摸屏): ![网页配置界面](docs/web-ui-v2.png) 早期网页界面(英文键名版本,保留作对照): ![早期网页界面](docs/web-ui-v1.png) ## 日常使用 蓝牙设备名 **Touch Deck P4**。本次已与Windows电脑配对并确认加密、绑定、重连;用户实测“全选”“复制”和“复制粘贴”脚本均生效。板子供电后即可无线发送按键,不需要USB3数据连接。 本次局域网配置地址:**http://192.168.3.131**。路由器DHCP可能更改地址,届时点击板子 **More → Network / Bluetooth** 查看最新地址,也可尝试 http://touchdeck.local 。网页管理码同样显示在Network页。 一次只连接一个USB口:日常可使用USB2供电并保留诊断能力;USB3仍提供有线HID备用。BLE就绪时优先走蓝牙,避免同一按键重复发送到USB和蓝牙。 ## 配网与找回设备 1. 点击板子More → Network / Bluetooth,查看配置热点名称 `TouchDeck-xxxx`、热点密码及管理码。 2. 初次配网或更换路由器时,让电脑/手机连接这个热点,打开 http://192.168.4.1 。 3. 输入管理码,在“Wi-Fi与连接设置”填写2.4GHz家庭/办公室Wi-Fi。 4. 联网后,切回正常网络,用板子显示的局域网地址编辑。热点保留为恢复入口。 本次已经连接局域网;不需要重复配网。Wi-Fi密码不会由配置读取API返回。 ## 三页按键与新增功能 - **常用快捷键**:复制、粘贴、剪切、撤销、截图、保存、音量等。 - **工作与媒体**:媒体控制、浏览器标签、桌面、资源管理、缩放等。 - **自动化脚本**:12个可编辑脚本位,总计36键;任意按键也可改成脚本。 - **中文名称**:最多19个字符;板端内置常用CJK中文字库,网页和屏幕同步。 - **自定义图标**:网页导入PNG/JPG/WebP等图片,浏览器缩放为48×48并保留透明度;点“保存到设备”应用到按键。 - **交换位置**:网页中选择按键,可与相邻键交换;图标和脚本随配置一起交换。 - **导入导出**:JSON schema=2、36键;也兼容导入旧24键配置。JSON包含映射、脚本和图标ID;图标二进制保存在板内,跨设备迁移需重新导入图片。 - **Windows USB独立扩展屏**:物理菜单More → 扩展显示器 → Start Windows USB才进入,USB3连接;配套程序复用本机已有VDD,画面800×480旋转显示,长按HOLD EXIT角落2秒返回键盘。冷启动默认键盘。Linux GUD接收器为实验实现,按用户要求暂未实测树莓派。网页宽高/帧率仍为后续局域网模式预留参数,不会启动扩展屏。 浏览器改键后点击“保存到设备”,板子立即刷新并写入NVS。上传图标本身不改变按键映射。网页编辑和保存不会触发键盘输入。 ## 自动化脚本语法 每行一条,可使用: ```text # 注释 CTRL+C WAIT 200 CTRL+V KEY ENTER CTRL+SHIFT+S MEDIA PLAY_PAUSE ``` 支持CTRL、SHIFT、ALT、WIN(也接受GUI/CMD);字母、数字、F1–F24、Enter、Escape、Tab、Space、方向键、Home/End/PageUp/PageDown、Backspace/Delete、PrintScreen、Minus/Equal。 媒体命令:VOLUME_UP、VOLUME_DOWN、MUTE、PLAY_PAUSE、NEXT、PREVIOUS。 最多32步、1024字节,单次WAIT不超过5000ms,总时长不超过30秒。第三页首键已配置“复制粘贴”示例。仅在点按板子时执行。按用户选择,本版不运行电脑端Python/PowerShell脚本。 ## 构建、烧录与恢复 - `build.ps1`:Arduino-ESP32 3.3.11,ChipVariant=prev3,LVGL8.4.0,ArduinoJson7.3.2,配套本地BLE与USB库补丁。临时映射空闲盘符缩短Windows路径。 - `flash.ps1 -Port COM17`:USB2烧录,端口按实际修改;使用USB专用复位。 - 分区保持出厂偏移:NVS=0xb000,应用=0x20000、容量7MB,storage=0x720000、容量6MB。storage现在用于图标、脚本和扩展屏参数;首次挂载失败会初始化SPIFFS。 - **不用Arduino默认Upload/合并固件**:其0x10000应用地址和0xe000 OTA数据与本工程分区不兼容。 - 原始16MB Flash备份 `firmware/original-p4-16mb.bin`,恢复地址0x0;SHA256和原分区表见logs/backup-manifest.json。 - 第一版USB程序归档在 `releases/v1-usb/`;原始厂商示例未修改,C6从机固件仍为2.3.2,未刷写C6。 ## 源码与依赖 | 路径 | 内容 | | --- | --- | | touch_deck/deck.cpp | 触摸UI、三页按键、NVS迁移、按键输出任务、配置验证 | | touch_deck/ble_keyboard.cpp | BLE HID、键盘与媒体报告、绑定/重连 | | touch_deck/network_config.cpp | AP+STA、HTTP配置接口、鉴权、mDNS | | touch_deck/web_ui.h | 设备实际提供的网页,所有资源内置,无外部CDN | | touch_deck/deck_assets.cpp | SPIFFS图标/脚本存储、宏解析、扩展屏预留参数 | | touch_deck/src/crypto_patch | 乐鑫上游P4 ECC修复,保留LE Secure Connections | | touch_deck/src/fonts | 从本机中文字型生成的20px、2bpp字库 | | libraries/BLE-p4-hid | BLE3.3.11项目副本,修复重复HID报告UUID注册 | | libraries/USB-p4-display | USB3.3.11项目副本,更新vendor RX回调参数并允许项目覆盖回调 | | touch_deck/deck_display.cpp | 手动USB模式、JPEG/GUD接收、解码帧队列、触摸与本地退出 | | host/windows | Windows配套程序和启动/停止脚本,未注册开机自启 | | host/PROTOCOL.md | USB协议、任务所有权、模式切换与限制 | | tooling | 隔离工具链、依赖、开发测试工具;含本机私有配网数据,请勿公开打包 | | logs/VALIDATION.md | 实际测试证据与结果 | `tooling/preview-server.py`在127.0.0.1:8766提供开发界面预览。它是测试夹具,不是板子配置入口,不会修改板子;日常使用上面的设备局域网地址。 ## 配对问题修复依据 本机曾出现1035/0x040B(DHKey校验失败)。原因与[乐鑫上游问题241](https://github.com/espressif/esp-hosted-mcu/issues/241)一致,采用[ESP-IDF修复9fd7cb7e606](https://github.com/espressif/esp-idf/commit/9fd7cb7e606)的TinyCrypt ECC源码替换对应静态库对象,实际配对后得到encrypted=1、bonded=1。 没有通过关闭LE Secure Connections或关闭链路加密来回避问题。BLE服务中同UUID的多个报告特征也已正确注册,Windows键盘与媒体驱动均为OK。 ## 只读USB2诊断 115200波特率,LF结尾:`status`(运行/无线状态及UI循环最大间隔)、`metrics-reset`(清零UI计数与间隔)、`config`(36键)、`frame`(实际LCD RGB565帧)。`netinfo`会返回含管理码和热点密码的设备设置,只应在本机诊断使用。抓图时暂停背景日志,避免二进制帧混入文本;抓图本身会暂停UI,因此测量UI间隔前应先清零指标。 ## 2.0.1 触摸间歇停顿修复 不完整或慢速HTTP请求曾使Arduino主循环停顿,触摸和LVGL也随之停止轮询。HTTP、Wi-Fi重连及mDNS现运行在独立core0任务;主循环只读取短锁保护的无线状态快照,不调用无线驱动/RPC。 配置读写通过队列交给UI任务执行并回传结果,保证LVGL和按键配置由单一任务访问;网络任务等待回复不会阻塞触摸主循环。按键输出仍由原独立任务执行。 USB2日常诊断采用4096字节缓冲和零等待写入,关闭系统后台日志转发。电脑未读取串口时允许丢弃日志,避免按键回调被串口背压拖住。仅显式请求`frame`抓图时临时允许等待发送,结束后恢复零等待。曾在开启后台日志的启动期间捕获一次USB CDC中断写FIFO异常;关闭该日志转发后需继续观察,不能将其表述为已修复底层驱动。 `tooling/test-ui-responsive.py`在实板上保留不完整HTTP头超过3秒,检查UI循环持续推进、串口响应延迟,以及配置原样保存/读回和连续24次HTTP请求。修复前后证据见`logs/ui-stall-baseline.json`和`logs/ui-stall-fixed.json`。该测试不自动发送电脑快捷键;实际触屏体验仍以用户操作为准。 ## Windows扩展屏使用 1. 双击`host/windows/Start-Windows.cmd`并允许Windows UAC;本次会话已启动,后台等待板子。 2. 板子开机默认快捷键,点`More → 扩展显示器 → Start Windows USB`。 3. 同一根数据线接到板子USB3高速口,一次只接一个USB。Windows出现独立屏幕后,将窗口拖入该屏。 4. 长按`HOLD EXIT`所在角落2秒返回快捷键;后台程序移除本次启用的虚拟屏,等待下次进入。 5. 运行`host/windows/Stop-Windows.ps1`可结束后台程序。更多说明见`host/windows/README.md`。 本机使用已安装且签名有效的Virtual Display Driver,原先停用,配套程序仅在扩展屏模式启用它,退出后恢复停用。不是免电脑程序的DP显示器,尚未注册Windows自动启动;换电脑需安装正常签名的VDD并核对设备实例ID。本次未安装评估时未通过签名验证的旧参考驱动包。 当前主机虚拟屏为已有960×540模式;程序等比例缩放到800×480、补黑边并发送JPEG,默认12fps。Windows触摸归属可能需“平板电脑设置→设置”校准。登录前/BIOS/启动失败画面、音频和局域网视频流尚未实现。 GT911轮询修复了长按状态:无新报告保持最后状态,ready零点报告才释放,I2C错误释放;读取坐标不再清除触摸状态。本地2秒退出不依赖USB触摸报告是否成功。用户已确认最终版本正常显示并退出。 稳定旧版保存在`releases/v2.0.1-before-display`。当前升级沿用已有分区、配对、按键和SPIFFS资源。网络设置入口现为`More → Network / Bluetooth`。 ## 仓库与开源许可 - 仓库地址: - 获取代码:`git clone https://gitee.com/Auto_Action/esp32-p4-c6.git` 本项目以 **GNU GPL v3.0 或更高版本** 开源,完整条款见 [LICENSE](LICENSE)。 可以自由使用、修改和分发,但二次分发或修改后发布的版本必须以同等许可公开源代码。 ```text SPDX-License-Identifier: GPL-3.0-or-later ``` 第三方组件遵循各自作者声明的许可,不在本协议范围内,详见 [THIRD_PARTY.md](THIRD_PARTY.md): LVGL、ArduinoJson、Arduino-ESP32 的 BLE / USB 库副本、乐鑫 TinyCrypt ECC 修复源码, 以及 Windows 端复用的 Virtual Display Driver。 其中 `touch_deck/src/fonts` 内的中文字库由本机系统字体(Microsoft YaHei)离线生成, 生成方式记录在 `tooling/font-generation.md`;系统字体自身的许可不由本仓库授予, 公开分发前建议确认所用字体许可,或按相同步骤用自有字体重新生成。 仓库不包含本机 16MB Flash 备份(`**/original-p4-16mb.bin`)、Arduino 构建产物 (`build/`、`*.elf`、`*.map`、`*.merged.bin`)与工具链下载缓存。