⚠️ This project is under active development. The documentation is growing along the project as it's a work-in-progress. If interested, please check the development board and the reference diagram.
An open-source DIY project to bring useful resources that are appreciated by cyclists to easy-to-work platforms like RP2040 (Raspberry Pi Pico) and ESP32-S3, in a more organized manner than usual. The intention is to include integration with some popular services.
Currently supports RP2040 (Raspberry Pi Pico), ESP32 and desktop simulator (Windows+WSL) from a single codebase. 🦖 Provided by dot-ll-collection
| Platform | RP2040 | ESP32 |
|---|---|---|
| Pinout | ![]() |
![]() |
| Device | RP2040-LCD-1.28 | ESP32-S3-LCD-1.28 |
| Toolchain | arm-none-eabi-gcc + Pico SDK | xtensa-esp32-elf-gcc + ESP-IDF |
| Output | .uf2 |
.bin |
- One of the target devices:
- MicroSD to SD card adapter (for easy soldering): SDCARD
- MicroSD card
- 2 x 10K resistors (for pull-up): R1, R2
- 1 x 10uF capacitor (for decoupling): C1
- 2 x 49E hall sensor (for navigation): HS1, HS2
- 2 x 1.27mm 2x10Pin header (for connecting components to target device)
If the choosen target is RP2040, additional hardware is required:
- 1 x RM2 (CYW43 based) radio: CYW43
- 1 x 10K resistor (for gSPI multiplex): R3
- 1 x 470ohms resistor (for gSPI multiplex): R4
Optional for prototyping:
- Some nice silicone wires (28 AWG recommended)
The below table shows connections in a way that you can create a header connector/shield board to swap between the target devices.
⚠️ Connect it to the RP2040 or to the ESP32. You're NOT supposed to wire RP2040 and ESP32 together.
| RP2040 | ESP32 | R1 | R2 | C1 | SDCARD | LCD** | GPS | HS1 | HS2 | R3* | R4* | CYW43* |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GP0 | GP46 | MISO | pin7 (DAT0/MISO) | |||||||||
| GP1 | GP45 | CS | pin1 (DAT3/CS) | |||||||||
| GP2 | GP42 | pin5 (CLK/SCK) | ||||||||||
| GP3 | GP41 | pin2 (CMD/MOSI) | ||||||||||
| GP5 | GP39 | pin3 (VSS1/GND) | ||||||||||
| GND | GND | GND | pin6 (VSS2/GND) | GND | GND | GND | pin1 (GND) | |||||
| 3V3 | 3V3 | 3V | 3V3 | 3V3 | pin4 (VDD/3V3) | VCC/3V3 | 3V3 | 3V3 | pin14+pin16 | |||
| GP8 | GP8 | DC | ||||||||||
| GP9 | GP9 | CS | ||||||||||
| GP10 | GP10 | CLK | ||||||||||
| GP11 | GP11 | DIN/MOSI | ||||||||||
| GP12 | GP12 | RST | ||||||||||
| GP25 | GP40 | BL | ||||||||||
| GP16 | GP13 | TX | ||||||||||
| GP13 | GP18 | RX | ||||||||||
| GP14 | GP17 | OUT | ||||||||||
| GP15 | GP16 | OUT | ||||||||||
| IRQ | pin10 (IRQ) | |||||||||||
| DOUT | pin6 (DOUT) | |||||||||||
| GP19 | pin12 (ON) | |||||||||||
| GP19 | pin13 (ON) | |||||||||||
| GP20 | DIN | DIN | pin5 (DIN) | |||||||||
| GP21 | pin3 (SCK) | |||||||||||
| GP22 | pin9 (CS) |
* Required only for RP2040. ** The LCD connection is internally made on these devices, GP pins just for reference.
- Host: Linux or Windows 10 PC with WSL 2 (Windows Subsystem Linux) - Ubuntu is recommended — code edited on Windows, compiled inside WSL
- IDE: Kiro or VSCode
- RP2040: arm-none-eabi-gcc, Pico SDK (installed via
Setup: RP2040 toolchain) - ESP32: ESP-IDF ≥ 5.x, xtensa toolchain, espflash (installed via
Setup: ESP32 toolchain) - CMake ≥ 3.16
The preferred IDE is Kiro, which provides agent-assisted development with project-aware context via
AGENTS.md. The project also works fully with VS Code — all tasks and settings are configured in.vscode/.
git clone --recurse-submodules --shallow-submodules -b feature/RP2040-migration https://github.com/juliannojungle/pedal.guruThis single command clones the repository and all bundled dependencies (gui.ll and it's dependencies) in one step. No separate dependency installation needed.
Before building for the first time, install the required toolchain for your target platform. The recommended way is via the built-in tasks.
In Kiro or VS Code — open the Command Palette (Ctrl+Shift+P) and select Tasks: Run Task, then choose:
Setup: RP2040 toolchain in WSL— installs arm-none-eabi-gcc and Pico SDKSetup: ESP32 toolchain in WSL— installs ESP-IDF, xtensa toolchain, Rust, and espflash
These scripts are idempotent — safe to run again if you need to repair an installation.
Once the toolchain is ready, build using the tasks:
In Kiro or VS Code — open the Command Palette (Ctrl+Shift+P) → Tasks: Run Task:
| Task | Description |
|---|---|
Build: Full RP2040 |
Clean CMake configure + make for RP2040 |
Build: Full ESP32 |
Clean idf.py build for ESP32 |
Build: Incremental |
Auto-detects platform, runs make or ninja |
Alternatively, trigger the default build task directly with Ctrl+Shift+B (runs Build: Incremental).
See LICENSE.
@juliannojungle, 2022

