A new version of the open firmware ESP-KVM 0.83.0 has been released, which turns the board on the ESP32-P4 microcontroller into IP-KVM with access to the screen, keyboard and mouse of a remote computer via a browser. The device is connected in front of the HDMI of the target machine and pretends to be a USB keyboard and mouse for it, and sends the image and control to the browser. You don’t need to install anything on the target machine; it even works in the BIOS. The code is written in C and distributed under the Apache 2.0 license.
The new release includes firmware for the device JetKVM Mini with ready-made KVM, size 42x42x23 mm. The JetKVM Mini features an ESP32-P4X board, 32MB PSRAM, a TC358743 HDMI bridge, 100Mbps Ethernet, a microSD slot, and a 240×240 square screen on the ST7789. After flashing, all proven features work, including broadcasting with 1080p50 quality, Ethernet, network updates, keyboard, mouse, screen, side buttons, microSD.
The firmware is installed once via USB. The stock JetKVM firmware only accepts signed updates. You need to enable USB Debugging in its settings, otherwise the firmware port is disabled a couple of seconds after startup, and connect the Mini to the computer using the EXT connector. Before recording, you should make a full copy of Flash. There is a button for this on the flasher page; it reads all 16 MB directly from the browser via esptool-js. You can return the factory firmware from the created copy or from the recovery image that JetKVM publishes for each model. Subsequently, updates are downloaded over the network, and the old version remains in the second half of Flash in case of rollback.
Unfortunately, the JetKVM Mini does not have HDMI audio. TC358743 can send sound via I2S to three pins, but on this board they are not connected anywhere. The JetKVM firmware gets around this by having the Mini appear to the target machine as a USB speaker. Now ESP-KVM can do the same. After enabling the setting, the target machine sees the “ESP-KVM Speaker” device – this is UAC2, 48 kHz, 16 bit, stereo, one isochronous OUT endpoint. The frequency is locked to SOF frames, so there is no need for a feedback endpoint. The interrupt counts the incoming bytes and once every 5 ms wakes up a task that cuts the stream into the same blocks that come from I2S. Then everything is common: Opus encoder, WebRTC in the browser, recordings and DVR. Sound via USB is included in the firmware for all boards. It is also needed where audio from HDMI is not connected at all, for example on the M5Stack PoE-P4 with a Display In module, in which the audio outputs of the bridge hang in the air.