Advanced firmware for BigTreeTech KNOMI displays with multi-toolhead support, intelligent power management, and Klipper integration.
๐ง Part of the Klipper Toolchanger Extended ecosystem
This firmware is specifically designed for 6-tool VORON printers using the Klipper Toolchanger Extended framework. Each KNOMI display provides real-time status visualization for its respective toolhead, including:
- Active tool indication and tool changes
- Individual extruder temperatures and heating status
- Print progress with per-tool statistics
- Synchronized sleep/wake across all 6 displays
- Seamless integration with toolchanger macros and safety features
- Three Sleep Modes:
- Manual Mode: Time-based sleep (60s idle โ 5min sleep)
- Klipper Sync: Follows Klipper's idle state
- LED Sync: Mirrors case LED status
- 85% power savings in sleep mode (~50mA vs ~300mA)
- Automatic wake-up on touch, print start, or status changes
- Backlight-only sleep for instant wake-up (no hardware re-init delays)
- 6 independent displays (one per toolhead)
- Tool-specific GIFs loaded from filesystem
- Hostname-based tool detection (
knomi-t0throughknomi-t5) - Synchronized sleep/wake across all displays
POST /api/sleep - Enter sleep mode
POST /api/wake - Wake from sleep
GET /api/sleep/status - Get sleep status
- WiFi password masking in serial logs
- Retry logic for multi-display commands (3 attempts)
- Timeout management for network operations
- 95%+ success rate for sleep/wake commands
- Print progress ring with ETA calculation
- Temperature graphs with real-time monitoring
- Tool-specific displays with auto-detection
- Animated status GIFs (homing, probing, QGL, etc.)
- Touch-responsive interface
- ESP32-S3-R8 (16MB Flash, 8MB PSRAM)
- GC9A01 Round TFT Display (240x240)
- CST816S Capacitive Touch Controller
- LIS2DW12 Accelerometer
- SHT4x Temperature/Humidity Sensor
- Backlight: PWM-controlled via AW9346 driver
- Touch: Multi-gesture support
- Framerate: 80MHz SPI, ~60fps
KNOMI_6_VORON/
โโโ src/
โ โโโ power_management/ # Display sleep system
โ โ โโโ display_sleep.cpp
โ โ โโโ display_sleep.h
โ โ โโโ README.md
โ โโโ ui/ # LVGL UI components
โ โโโ ui_overlay/ # UI overlays & logic
โ โโโ gif/ # Built-in animations
โ โโโ main.cpp
โโโ data/
โ โโโ gifs/ # Tool-specific GIFs (filesystem)
โ โโโ tool_0.gif
โ โโโ tool_1.gif
โ โโโ ...
โโโ docs/ # Documentation
โโโ platformio.ini # Build configuration
โโโ README.md
Software:
- PlatformIO (VSCode extension recommended)
- Python 3.x (for upload tools)
Hardware:
- BTT KNOMI V2 display(s)
- USB-C cable for flashing
- Klipper-based 3D printer
# Clone repository
git clone https://github.com/PrintStructor/knomi-toolchanger.git
cd knomi-toolchanger
# Switch to firmware branch (contains source code)
git checkout firmware
# Build firmware
pio run -e knomiv2
# Upload to display
pio run -e knomiv2 -t upload
# Upload filesystem (GIFs)
pio run -e knomiv2 -t uploadfsNote: This repository uses a dual-branch structure:
masterbranch: Documentation onlyfirmwarebranch: Complete source code and documentation
Method 1: Web Portal (First Boot)
- Display boots into AP mode:
KNOMI_AP_XXXXX - Connect and navigate to
192.168.4.1 - Enter WiFi credentials
- Display auto-restarts
Method 2: Edit src/config.h
#define DEFAULT_STA_SSID "YourWiFiName"
#define DEFAULT_STA_PWD "YourPassword"Option 1: Copy config files to Klipper directory
# Copy KNOMI.cfg to your Klipper config directory
cp KNOMI.cfg ~/printer_data/config/Then add to your printer.cfg:
[include KNOMI.cfg]Option 2: Use absolute path
[include /path/to/knomi-toolchanger/KNOMI.cfg]Note: The
KNOMI.cfgfile contains G-code macro overrides for display integration. For integration examples (PRINT_START, QGL, etc.), seeklipper_integration_example.cfg
For detailed Klipper setup, see DISPLAY_SLEEP_KLIPPER_INTEGRATION.md.
Edit src/power_management/display_sleep.h:
// Sleep Timeouts (Manual Mode)
#define DISPLAY_IDLE_TIMEOUT_SEC 60 // Idle after 60s
#define DISPLAY_SLEEP_TIMEOUT_SEC 300 // Sleep after 5min
// Klipper Sync Mode
#define DISPLAY_SLEEP_DELAY_AFTER_KLIPPER_IDLE_SEC 30 // Sleep 30s after Klipper idleChoose mode in lvgl_usr.cpp:
display_sleep_init(SLEEP_MODE_KLIPPER_SYNC); // Recommended
// or
display_sleep_init(SLEEP_MODE_MANUAL);
// or
display_sleep_init(SLEEP_MODE_LED_SYNC);For auto-detection, name displays:
knomi-t0.local โ Tool 0
knomi-t1.local โ Tool 1
...
knomi-t5.local โ Tool 5
Set via web interface or mDNS configuration.
KNOMI_SLEEP # Put all displays to sleep
KNOMI_WAKE # Wake all displaysThe firmware automatically wakes displays when:
- โ Print starts
- โ Homing begins
- โ Bed/nozzle heating starts
- โ Probing/QGL active
- โ Touch detected
For reliable 6-display setups, use retry logic:
[gcode_shell_command knomi_sleep_all_retry]
command: sh -c 'for i in 0 1 2 3 4 5; do (for retry in 1 2 3; do curl -X POST --connect-timeout 2 --max-time 5 http://knomi-t$i.local/api/sleep 2>/dev/null && break || sleep 0.3; done) & done; wait'
timeout: 30.0
verbose: FalseFor complete multi-display setup, see docs/DISPLAY_SLEEP_KLIPPER_INTEGRATION.md.
Filesystem-based GIFs: Tool animations live in data/gifs/ and can be replaced without code changesโjust drop your GIFs and run pio run -e knomiv2 -t uploadfs.
Placement diagram (placeholder): docs/images/gif_placement.png
- Create GIFs (240x240, optimize for size)
- Name them
tool_0.gifthroughtool_5.gif - Place in
data/gifs/folder - Upload:
pio run -e knomiv2 -t uploadfs
Recommended specs:
- Resolution: 240x240px
- Frame rate: 15-30fps
- Duration: 2-5 seconds (looping)
- File size: <200KB per GIF
Helper tool: You can generate/preview KNOMI-ready GIFs with pandamation.techjeeper.com and drop the exports into data/gifs/.
Built-in animations in src/gif/:
gif_homing.c- Homing sequencegif_probing.c- Bed levelinggif_qgling.c- Quad gantry levelinggif_print_ok.c- Print complete
Edit C arrays and rebuild to change.
| State | Current | Description |
|---|---|---|
| Active | ~300mA | Display on, LVGL rendering |
| Idle | ~300mA | Showing tool GIF |
| Sleep | ~50mA | Backlight off, timers paused |
Savings: 85% reduction in sleep mode
| Metric | Without Retry | With Retry | Improvement |
|---|---|---|---|
| Sleep Success | 50% | 95% | +45% |
| Wake Success | 40% | 95% | +55% |
| Overall | 45% | 95% | +50% |
Check:
- Serial logs for
[Display Sleep] WAKING FROM SLEEP - Touch sensor is responding (
[Touch] Event detected) - Klipper connection (
moonraker.unconnected = false)
Solution:
# Test manual wake via API
curl -X POST http://knomi-t0.local/api/wakeCommon causes:
- mDNS resolution issues
- Network congestion
- Display busy with rendering
Solution: Increase retries or use sequential mode (see docs).
Check:
- Filesystem uploaded:
pio run -t uploadfs - Files in correct path:
/gifs/tool_X.gif - File sizes reasonable (<500KB)
Debug:
[FS] Loading GIF for tool 0 from /gifs/tool_0.gif
[FS] Loaded tool 0 GIF: 123456 bytes into PSRAM
๐ง This firmware is part of the Klipper Toolchanger Extended ecosystem
For full multi-tool integration, see:
- Klipper Toolchanger Extended - Safety logic, tool management, collision detection
- KNOMI Toolchanger (this repo) - Display status, power management, per-tool visualization
Key documents:
- CHANGELOG.md - Version history and release notes
- FEATURES.md - Complete feature list
- CONTRIBUTING.md - Contribution guidelines
- RELEASE_NOTES_v1.0.0.md - Release highlights
- DISPLAY_SLEEP_INSTALLATION.md - Sleep system installation
- DISPLAY_SLEEP_KLIPPER_INTEGRATION.md - Klipper macros and G-code integration
- TEMP_GRAPH_FIX.md - Optional temp graph cleanup
- docs/dev/ - Developer documentation overview
- docs/dev/UI_CUSTOMIZATION.md - LVGL layer architecture, widgets, and GIF integration
- docs/dev/PRINT_PROGRESS_FEATURE.md - Print progress system, PSRAM management, overlays
- docs/dev/HYBRID_DISPLAY.md - State machine, screen transitions, Klipper integration
- docs/dev/DISPLAY_SLEEP_IMPLEMENTATION.md - Power management hooks and timers
- docs/FLASH_TOOL_GUIDE.md - ESP32 Flash Download Tool guide
- docs/TEMP_GRAPH_FIX.md - Temperature display fixes
- โ Three sleep modes (Manual, Klipper Sync, LED Sync)
- โ Backlight-only sleep for instant wake-up
- โ HTTP API endpoints for remote control
- โ Retry logic for multi-display setups
- โ WiFi password masking in logs
- ๐ง Simplified sleep commands (no hardware re-init)
- ๐ง Improved wake-up reliability (95% success rate)
- ๐ง Enhanced Klipper state tracking
- ๐ Black screen after wake-up
- ๐ Inconsistent multi-display behavior
- ๐ Race conditions in LVGL rendering
- ๐ Password leaks in serial console
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Test thoroughly (all 6 displays if possible)
- Submit a pull request
Areas for contribution:
- Additional sleep modes
- UI themes
- More tool GIFs
- Documentation translations
- Bug reports
Based on BTT KNOMI open-source firmware.
This project extends the original with:
- Multi-toolhead support (6x displays)
- Advanced power management
- Klipper integration
- Enhanced UI features
License: GPL-3.0 (same as original)
Original Firmware: BigTreeTech (BTT) Enhancements: PrintStructor - KNOMI 6-Toolhead Project Hardware: ESP32-S3, GC9A01, LVGL Ecosystem: Klipper Toolchanger Extended
Special Thanks:
- BTT for open-sourcing KNOMI firmware
- LVGL community for UI framework
- Klipper community for integration support
- VORON Design for the amazing printer platform
- Installation Guide - Sleep system installation
- Klipper Integration - G-code macros and setup
- Developer Details - Hooks, timers, and porting notes
# Serial monitor (115200 baud)
pio device monitor -b 115200
# Test API endpoint
curl -X GET http://knomi-t0.local/api/sleep/status
# Check mDNS resolution
ping knomi-t0.localPlease include:
- Hardware version (KNOMI V1/V2)
- Firmware version
- Serial logs
- Number of displays
- Klipper version
Planned Features:
- Deep sleep mode for ESP32 (WiFi off)
- Adaptive sleep timeouts (learning mode)
- MQTT integration
- OTA updates over network
- Multi-language UI
- Custom themes via web interface
If you find this firmware useful for your toolchanger setup, consider supporting the development:
Your support helps maintain and improve both this firmware and the Klipper Toolchanger Extended ecosystem!
โญ Star this project if you find it useful!
๐ข Share your KNOMI setups on Voron Discord!
Last Updated: October 25, 2025 Version: 1.0.0 Status: โ Production Ready
