main
Scooter Firmware
Dual-MCU ESP-IDF 6.1 monorepo for an electric scooter.
| MCU | Board | Flash | Target | Role |
|---|---|---|---|---|
| Deck | ESP32-C3 SuperMini | 4MB | esp32c3 |
Inter-MCU UART, SoftAP/OTA, VESC UART |
| Handlebar | Seeed XIAO ESP32-S3 | 8MB | esp32s3 |
Inter-MCU UART, SoftAP/OTA, throttle ADC |
Layout
scooter-firmware/
├── deck/ # ESP32-C3 app + 4MB OTA partitions
├── handlebar/ # ESP32-S3 app + 8MB OTA partitions
├── components/
│ ├── scooter_protocol/ # Portable framed UART codec
│ ├── scooter_common/ # Boot + inter-MCU link
│ ├── scooter_wifi_ota/ # SoftAP + STA NVS + SoftAP OTA UI
│ ├── scooter_throttle/ # Handlebar ADC @ 50 Hz
│ └── scooter_vesc/ # Deck VESC UART (telemetry default)
├── board/
├── tests/protocol/
├── scripts/
├── docs/
└── .gitea/workflows/
Quick start
. C:\Espressif\tools\Microsoft.v6.1.PowerShell_profile.ps1
.\scripts\run_protocol_tests.ps1
cd deck
idf.py set-target esp32c3
idf.py build
cd ..\handlebar
idf.py set-target esp32s3
idf.py build
Docs
- docs/build.md — flash/monitor
- docs/wifi_ota.md — SoftAP, STA, OTA without USB
- docs/throttle_vesc.md — throttle + VESC safety
- docs/bringup.md — USB-only electrical notes
- docs/protocol.md — inter-MCU framing
Firmware version: 0.2.0-wifi-ota-throttle.
VESC propulsion is disabled by default (CONFIG_SCOOTER_VESC_PROPULSION_ENABLE off).
Languages
C
96.4%
CMake
2.7%
PowerShell
0.9%