EVEESource code

The EVEE manual

Install, wire, ride.

Choose your hardware, connect to the VESC and get to know your setup. ESK8OS runs on the vehicle; the Android companion adds GPS and another way to see the ride.

01 / Hardware

One platform. Three ways to see it.

Use an ESP32-S3 with a full display, a compact OLED or no screen. Choose the matching firmware build, including the Daly BMS variant if you need that driver.

Full display — LilyGo T-Display-S3
A 1.9-inch colour display with two buttons, dedicated telemetry pages, HUD faces and on-board settings.
Mini display — ESP32-S3 + OLED
A 128 × 32 SSD1306 I²C screen for speed, battery, range and alerts. The companion provides navigation controls.
Headless — ESP32-S3
The board logs and reads telemetry inside the enclosure. Use the companion when you want a dashboard.
See published builds ↗

02 / Wiring

Four wires to the VESC.

Use the ESC’s COMM port for UART and power. Check the pin labels for your specific ESC before crimping; connector order can differ.

VESC COMM to EVEE wiring
VESC COMMEVEE connection
5V5V — if the COMM port can supply enough current
GNDGND — shared ground
TXGPIO 18 — EVEE RX
RXGPIO 17 — EVEE TX

TX crosses to RX. Check the UART pair first if the VESC link stays down.

VESC Tool setup

Enable UART at 115200 baud through official VESC Tool. Select the app mode that preserves your existing remote: for a PPM remote, that is typically PPM and UART. For dual motors, enable the appropriate CAN status messages. EVEE discovers the second ESC over CAN.

Adding the OLED

For the SSD1306 128 × 32 module: VCC → 3.3V, GND → GND, SDA → GPIO 8, SCL → GPIO 9. The expected I²C address is 0x3C. Use the OLED firmware environment.

03 / USB & first flash

Use the native USB port.

The T-Display-S3 has one USB-C port. On ESP32-S3 development boards with two ports, use the one labelled USB, rather than the COM/UART serial-bridge port. Board labels take precedence over connector position.

For a DIY first flash, clone the firmware repository and use its PlatformIO environment for your hardware. Archive any existing sessions before changing firmware or partitions.

pio run -e <environment> -t upload
T-Display-S3
tdisplay_s3_ride_release or tdisplay_s3_bms for Daly support and USB diagnostics.
OLED
esp32s3_oled_i2c_usb or esp32s3_oled_i2c_bms_usb.
Headless
esp32s3_headless_usb or esp32s3_headless_bms_usb.

The ride-release T-Display build disables USB serial. Choose a USB-enabled diagnostic build when you need the console. Do not erase flash to resolve a connection problem: saved settings, calibration and odometer data live in NVS.

04 / First boot

The VESC supplies the configuration.

  1. Power the vehicle

    A connected display shows boot progress and live telemetry. Without a VESC link it can show the disconnected state and BLE pairing information. Demo data is marked as simulated.

  2. Pair the companion

    Scan from EVEE on Android and match the board’s advertised pairing code. Connect to start BLE telemetry. A phone GPS ride can also be started without a board.

  3. Calibrate what belongs to you

    Adjust loaded wheel diameter when needed, along with units, themes and display preferences. VESC-sourced battery, cutoff, motor, gearing and current values remain authoritative. Clear stale overrides with Use VESC; make actual VESC configuration changes in official VESC Tool.

Buttonless builds can change faces through the companion’s board controls.

05 / Riding

Keep the vehicle and the route together.

While live, the board supplies vehicle speed, wheel distance and moving time. The phone supplies the GPS route and elevation. If the vehicle link drops, the recorder can use its labelled GPS fallback.

On-board session logs include voltage, current, temperatures, faults and supported BMS data. Event rows preserve evidence of conditions such as a riding disconnect or a voltage collapse. Export logs before maintenance.

Battery range is learned over qualifying rides. A range model that is not learned yet is expected on a new setup. Daly cell and protection telemetry requires the corresponding BMS build and supported Bluetooth module.

06 / VESC Tool bridge

Stop first. Then configure.

Normal dashboard operation reads VESC data and does not command motor current, duty or cutoffs; its ordinary ESC write is the odometer. Deliberate bridge mode forwards VESC Tool traffic, which can change ESC configuration.

On supported button-equipped builds, hold both buttons for about two seconds to enter or leave bridge mode. Dashboard polling stops while the bridge owns the UART.

Wi-Fi network
ESK8-BRIDGE
Password
esk8bridge
Desktop TCP endpoint
192.168.4.1:65102

Wi-Fi TCP support does not guarantee compatibility with every mobile VESC Tool build. Keep the vehicle stopped for all configuration work.

07 / Updates

Match the build. Keep your data.

  1. Back up and choose

    Export ride logs and select a published build for the correct display and BMS driver. The firmware page provides the release version and checksum files.

  2. Start Export / OTA

    Use the companion’s board controls. The device shows its Wi-Fi network name and per-device password. Connect to that network.

  3. Open the board updater

    Open http://192.168.4.1 and upload the matching firmware binary. The board verifies the image and reboots. An ordinary update preserves settings and odometer data; do not erase flash.

Versions, notes and checksums ↗

08 / Serial console

Look a little deeper.

On a USB-enabled build, open the native USB port at 115200 baud and type help. Useful commands include:

stat · diag
Telemetry and VESC link diagnostics.
bms
Daly cells, temperatures, MOS state and protection flags on BMS builds.
cfg
Effective settings with their VESC, override or fallback source.
vstat
The ESC’s accumulated ride statistics on supported firmware.
trip · odo · cal
Trip totals, lifetime odometer and learned calibration.
logs · cat · mcconf
Session CSVs and captured VESC configuration.
demo on|off
Simulated telemetry for bench testing.

Watch the road, not the dashboard. Telemetry is information for the rider; it does not replace the vehicle’s protections.