This project emulates a KC85/3 and KC85/4 keyboard using an ESP32-S3. The ESP32 runs an access point, serves a web UI, and outputs keyboard pulses using the RMT peripheral. Protocol specifics are currently marked as TBD in the documentation until measured or verified.
- ESP32-S3 access point mode
- Web UI with text input and on-screen keyboard
- WebSocket for realtime key events
- RMT-based pulse generation
- Test mode (no hardware output)
- Debug logging via Serial
- docs/protocol.md: Protocol analysis template and measurement plan
- docs/hardware.md: Open-collector and optocoupler wiring notes
- docs/timing.md: Timing model and RMT conversion notes
- src/main.cpp: Entry point, AP setup, and handlers
- src/webserver.cpp: WebSocket server and UI hosting
- src/kc_encoder.cpp: RMT encoder and key mapping
- data/index.html: Web UI
- ESP32-S3 development board
- Arduino framework for ESP32
- Exact versions used by PlatformIO:
- Platform: espressif32@6.6.0
- Board: esp32-s3-devkitc-1
- Libraries:
- ESP Async WebServer@3.1.0
- AsyncTCP@1.1.1
- Install the ESP32 board package in Arduino IDE.
- Install the libraries:
- ESPAsyncWebServer
- AsyncTCP
- Open the project folder in Arduino IDE.
- Select your ESP32-S3 board and COM port.
- Build and upload.
- Install PlatformIO.
- Use the provided platformio.ini.
- Build and upload with:
platformio run
platformio run --target upload
- Upload the web UI to SPIFFS:
platformio run --target uploadfs
The web UI is stored in SPIFFS under data/index.html. Use your toolchain's data upload step:
- Arduino IDE: use the ESP32 SPIFFS upload tool.
- PlatformIO: run the data upload target (
platformio run --target uploadfs).
- Flash firmware and SPIFFS:
platformio run --target upload
platformio run --target uploadfs
- Connect to the WiFi AP
KC-Remote-Keyboard. - Open the device IP address shown in the serial monitor.
- Use the web UI to send key presses.
- Power the ESP32-S3.
- Connect to the WiFi AP
KC-Remote-Keyboard. - Open the device IP address in a browser.
- Send key presses from the UI.
Default AP password: kc85remote
Security note: change the AP password in src/main.cpp before deploying or using in shared environments.
All protocol timing and keycode values are placeholders until verified. See docs/protocol.md and docs/timing.md to update the constants and key mapping after measurement.
Do not connect ESP32-S3 GPIOs directly to the KC keyboard port. Use an open-collector interface or optocoupler as described in docs/hardware.md.