Skip to content

Berg0162/Kickr-Dongle-VS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌀 Kickr-Dongle-VS

License: GPL v3 GitHub release (latest SemVer) Platform: ESP32 Platform: Zwift Platform: Rouvy GitHub issues GitHub Discussions

Virtual Shifting (VS) for older KICKR Smart trainers using the LilyGo T-Dongle-S3 and the Kickr-Virtual-Shifting library.


🏁 Overview

T-Dongle-S3 Size

Kickr-Dongle-VS is a self-contained dongle that bridges Zwift’s Virtual Shifting system with older KICKR Smart trainers that never received Wahoo’s 2024 firmware update.
It combines a modern ESP32-S3 microcontroller, a built-in ST7735 IPS display, a status LED and when the project code is uploaded, it delivers plug-and-ride compatibility.


🚴 What is Virtual Shifting (VS)?

Virtual Shifting lets you change gears digitally while riding indoors and using the Zwift Click device. Instead of mechanical chain movements, Zwift adjusts resistance and power targets in software, simulating gear ratios.
Recent KICKR trainers implement this natively; older ones cannot — unless a small bridge device translates between Zwift’s BLE protocol and KICKR’s Wahoo-proprietary-CPS control channel.


🔗 What is the Kickr-Virtual-Shifting library?

The Kickr-Virtual-Shifting Arduino library:

  • connects to Zwift via BLE (as a Smart Trainer peripheral)
  • connects to a KICKR trainer via Wahoo-proprietary-CPS
  • interprets Zwift’s virtual-gear, target-power, or gradient messages
  • sends equivalent Wahoo-proprietary-CPS commands to the older KICKR trainer

The Kickr-Dongle-VS project wraps this library into a ready-to-use hardware package — the LilyGo T-Dongle-S3.


💡 Why the T-Dongle-S3?

  • ESP32-S3 – dual-core MCU with native BLE and plenty of flash/RAM
  • Integrated display – 0.96″ ST7735 IPS panel for connection & error feedback
  • APA102 LED – multicolor indicator for connection status
  • USB-C – single-cable power + firmware updates

These make the smallest and most affordable all-in-one bridge for KICKR VS.

T-Dongle-S3


For pricing (in the EU) see for example: TinyTronics


🔄 How it Works Together

Schema



The dongle receives Zwift VS events via BLE, translates them using the Kickr-Virtual-Shifting library, and re-emits trainer-compatible Wahoo-proprietary-CPS commands — effectively adding VS to older hardware.

🧩 Dependencies

Library Purpose Source
Kickr-Virtual-Shifting BLE ↔ Wahoo-proprietary-CPS bridge core GitHub Repo
Arduino-GFX ST7735 display driver Arduino Library Manager
Adafruit_DotStar APA102 LED control Arduino Library Manager

🚀 Getting Started

  1. Clone or download this repository.

  2. Unzip/copy the Kickr-Dongle-Virtual-Shifting folder to your Arduino sketch folder.

  3. Install all required libraries (see Dependencies).

  4. Select Board → ESP32S3 Dev Module.

  5. Set all options in Tools → Menu as shown below:

    T-Dongle-S3 Tools Settings

  6. Connect the dongle via USB-C.

  7. Open the Kickr-Dongle-Virtual-Shifting.ino sketch and upload.

  8. On boot you’ll see:

    • a splash screen,
    • KICKR and Zwift connection rows with text + color cues,
    • the APA102 LED mirroring the same connection states.

When both devices show Connected (🟢 green), you’re ready to ride!

Screen #6



🧠 Color Feedback Legend

Color Meaning
🟡 Yellow Scanning & Advertising
🟢 Green Connected
🔴 Red Connection Lost
🔵 Led only Scanning for KICKR
🟠 Led only Advertising for Zwift

🖼️ Screenshots

Screen #1

Screen #2


Kickr-Dongle-VS shows splash screen (during 3 seconds) and starts scanning (for KICKR trainer), device status Led is turquoise blinking!


Screen #4

Screen #3


Kickr-Dongle-VS shows (after 10 seconds) a scanning-timeout, device status Led is red blinking. Finally it keeps scanning (for KICKR trainer) or connects and starts advertising (for notifying Zwift app), device status Led is now yellow blinking!


🧾 License

This project is licensed under the GNU General Public License v3.0 (GPL-3.0).
You may freely use, modify, and distribute this project, provided that any derivative work is also licensed under GPL-3.0.


✍️ Future Ideas

  • OTA (Wi-Fi) firmware updates
  • OLED or e-paper variant for low-power builds
  • Optional web-UI configuration

❤️ Contributing

This project is just starting! If you’re interested in testing, coding, writing docs, or just giving feedback, contributions are welcome in Discussions.