如何将ESP32-P4变成完整的网络控制台:通过捕获设备的HDMI信号,充当其USB键盘和鼠标,并通过浏览器进行控制
一个放在柜子里的无头机器——家庭服务器、虚拟机管理程序或网络附加存储设备——在能正常启动前都令人惊叹。但一旦无法开机,就完全失去了意义:没有ping回音,没有SSH连接,网页界面也已瘫痪。它是否卡在BIOS中?内核是否崩溃了?还是仅仅因为三周前更换了内存,正礼貌地等待有人按下F1键?除非你亲自把显示器和键盘拖到它面前,否则根本无法知道答案。
成年人的解决方案是IP-KVM:一个设备会捕获机器的HDMI输出,假装成USB键盘和鼠标,并将两者通过浏览器呈现。你看到的效果与显示器完全一致——甚至包括BIOS和启动菜单——你可以像在实际操作一样进行输入和点击。目标设备无需代理程序,无需操作系统,甚至不需要正常启动。它根本不知道自己的“显示器”和“键盘”实际上只是网络上一块小板子。
商用IP-KVM价格昂贵。PiKVM性能出色,但难以应对树莓派的短缺问题。这时Espressif推出了ESP32-P4:一款配备MIPI-CSI摄像头接口、32MB PSRAM和USB 2.0高速接口的芯片。有了摄像头输入功能,你就可以连接HDMI转CSI桥接器来捕获视频——这样一来,一台完整的IP-KVM成本大约相当于两个开发板的价格,而且完全无需焊接。
该项目是ESP-KVM,且完全开源。
您将获得
这里的一切今天都正常运行,这并非愿望清单:
•视频实时追踪目标分辨率——BIOS 为640x480,启动菜单,桌面为1080p,全部实时处理。关闭机器或切换HDMI后,流媒体将自动恢复。
•两种编解码器:MJPEG(约20帧/秒)和硬件H.264(线路传输成本极低)。
•绝对鼠标——点击精准命中目标,无加速漂移。
•完整键盘、媒体键、单键宏(Ctrl+Alt+Del 及其他功能),以及支持键盘布局的字符串粘贴功能。
•手机和平板电脑的触控模式:真正的虚拟触控板和屏幕键盘。
•多个观众,一次只由一位控制。
•虚拟媒体——从microSD卡上的ISO/IMG文件或设备自身的闪存中的小图像启动目标系统。
•ATX电源控制(通过光电耦合器实现电源/复位,带电源LED检测)以及唤醒网络功能。
•使用设备自签发的证书进行HTTPS登录,支持物理密码重置、OTA更新(含回滚功能)、热保护以及诊断功能。
建造它
这是我最自豪的部分:无需焊接(ATX 是唯一例外——两个跳线连接到现成的光电耦合器模块)。
1. 使用MIPI-CSI数据线连接Waveshare ESP32-P4-ETH和Geekworm C790。
2. 将目标设备连接好。将目标设备的HDMI线接入C790,将目标设备的USB线接入ESP32-P4的OTG接口——该接口用于通过键盘和鼠标进行通信。将以太网接入你的网络。接通电源。
3. 从浏览器启动。在基于Chromium的浏览器中打开A(它使用Web Serial),通过USB连接板子,选择端口,即可闪现最新由CI构建的版本。无需工具链,无需idf.py,无需驱动程序。
4. 打开它。设备会显示为 espkvm.local。首次登录使用 admin/admin,之后需要设置一个真实密码才能进行其他操作。
真正困难的部分——即提升TC358743桥接器,并从P4的CSI接收器中取出帧数据——在之前就已经由Jonathan Rowny通过p4kvm解决了。这需要数周时间对未文档化的寄存器进行逆向工程,而如果没有这项工作,ESP-KVM根本无法存在。我保留了这一硬件层,并从零开始重新编写了其以上所有部分(网络、安全、输入、虚拟媒体、电源、用户界面)。完整的归属信息已在代码仓库中注明,因为许可证要求如此。
我撞到的墙壁(有用的部分)
没有故障的构建日志只是一本宣传册。以下是其中的坑洞:
H.264 编码速度比预期慢。原计划是:使用硬件编码器、小帧率、高帧率。实际情况是:在我的芯片版本(v1.3)上,H.264 块没有色彩空间转换器,因此相机的每个 RGB 帧都必须先通过一个独立的硬件转换器(PPA)转换为 YUV420,而这一转换过程受限于 PSRAM 的带宽,而非计算能力。在 1080p 分辨率下测量,转换耗时约 104 毫秒,编码耗时约 45 毫秒。将这两个任务重叠处理几乎无济于事,因为瓶颈在于内存。最终结果是 H.264 在 1080p 下大约只能达到 7 帧/秒——带宽方面表现不错,但观看体验却令人不适。因此 MJPEG 仍作为默认选项保留。较新的 P4 芯片已内置转换器,这一转换步骤便不再需要。建议在庆祝前先进行测试。
microSD卡只能读取单个扇区,但在实际数据传输时会卡住。插入卡后目录列表可以正常显示,但当使用USB主机读取磁盘时,每次多块读取都会失败,这正是目标设备读取启动镜像的方式。将SD总线频率降为4 MHz,并禁用UHS/DDR模式后,大容量读取(200 MB,无错误,约1.5 MB/s)变得顺利。慢但正确,胜过快却无法读取。这是ESP32-P4 SD信号完整性的一个已知限制。
一个导致网络中断的复位按钮。我将物理密码重置功能设置在启动按钮上(GPIO 35)。结果发现该引脚与以太网共享,当网络启动后设备变得“失聪”,甚至无法回应ARP请求。解决方案:在开机后短时间内读取按钮状态,即启动后、以太网初始化前,然后直接将该引脚恢复原状。
安全,因为KVM拥有完全的控制权
设备首次启动时会自动成为自己的小型证书颁发机构,生成并签发服务器证书,并提供该CA供您一次性导入。此后,它所呈现的每个证书都将被信任——即使主机名或IP地址发生变化也是如此。启用信任后,浏览器也能支持H.264(WebCodecs是一个安全上下文API)。密码采用PBKDF2哈希,暴力破解受到速率限制,且默认密码在使用前必须更改。整个网络控制台均为自包含式设计,无需外部CDN、字体或外部调用,因此可在隔离网络环境下运行。
本文编译自hackster.io





