A feature-rich firmware for custom mechanical keyboards, built on ESP32-S3.
| Device | Status | Notes |
|---|---|---|
| Prototype 0 | Actively tweaked | |
| 2x2 Matrix | Temporarily halted |
| Feature | Status | Notes |
|---|---|---|
| Matrix Key Scanning | Supported | High-performance scanning with debounce |
| USB HID Communication | Supported | Full keyboard and consumer input |
| Bluetooth Module Support | Supported | Wireless numpad module connectivity |
| Display Interface | Supported | ILI9341-based UI with custom screens |
| Rotary Encoder | Supported | Volume control with press detection |
| RGB Underglow | Supported | Customizable effects and colors |
| WPM Counter | Supported | Real-time typing speed monitoring |
| Multi-tasking | Supported | FreeRTOS-based task management |
| Settings System | Supported | On-device configuration menus |
| Audio Feedback | Supported | Programmable buzzer tones |
| Clock | Supported | Real-time clock with sync |
| Layer System | WIP | Multiple keymap layer support |
| Macro Support | Planned | Custom macro programming |
| Screen Pixel Flushing | Supported | Clean up stuck or burned pixels in under 1 minute! |
- Task Management: FreeRTOS-based multitasking system
- Communication:
- USB HID for keyboard and consumer controls
- Bluetooth LE for wireless module support
- Serial interface for configuration and debugging
- Input Processing:
- Advanced matrix scanning with hardware multiplexing
- Rotary encoder with acceleration and button detection
- Real-time WPM calculation
- Output Systems:
- TFT display with custom UI components
- RGB LED control with multiple effects
- Buzzer feedback system
- Configuration:
- Non-volatile settings storage (not functional at the moment)
- Real-time clock synchronization
- On-device settings menu
The firmware supports the following commands:
connectionStatus [0/1/?]- Get/set connection statecaps [0/1/?]- Get/set caps lock statustime.hours [0-23]- Set hourstime.minutes [0-59]- Set minutestime.seconds [0-59]- Set seconds
- ESP32-S3 microcontroller
- Key matrix setup (compatible with standard mechanical switches)
- ILI9341 display (optional)
- Rotary encoder (optional)
- RGB LEDs (optional)
- Buzzer (optional)
- Download the latest
firmware.binfrom the releases page - Install esptool:
pip install esptool - Put your ESP32-S3 into bootloader mode
- Flash using esptool
Translations are managed through two main files:
source/include/translations.h: Declares all translatable stringssource/src/translations.cpp: Implements the translations
To add a new language:
- Define a new language identifier (e.g.,
USE_FR_FRfor French) - Add translations in
translations.cppunder the new language condition - Keep the string declarations in
translations.hunchanged
Example:
#ifdef USE_FR_FR
// System messages
const char *task_clock_started = "Tâche d'horloge démarrée.";
// ... more translations ...
#endifContributions for new languages are welcome! Please maintain the existing structure when adding translations.
Following Semantic Versioning 2.0.0:
- Format:
MAJOR.MINOR.PATCH-PRERELEASE+BUILD - Pre-release stages:
alpha<beta<rc - Build metadata: Date (YYYYMMDD) and CI run number
Licensed under LGPL-2.1 unless otherwise noted. Third-party components (e.g., FreeRTOS) maintain their respective licenses.
This firmware is provided "AS IS" without commercial support. You may:
- Distribute links to this firmware
- Ship hardware with this firmware pre-installed
Please link to this repository rather than redistributing the files to ensure users always get the latest version.