Touchscreen EV Telemetry Display | TyKhori Cabiness
← Back to Projects TyKhori Cabiness
EMBEDDED SYSTEMS • USER INTERFACES

Touchscreen EV Telemetry Display

A touchscreen dashboard for a VESC motor controller and an ANT battery management system, connected over Bluetooth Low Energy

C++ ESP32-S3 LVGL Bluetooth LE FreeRTOS
The display's dashboard page: a green ECO badge and the connected device name, VESC BLE UART, across the top; a green speed arc around 36 MPH with 81.3 V and 88% beneath it; a battery bar; and a card listing 6 A battery current, 10 A motor current, and controller and motor temperatures of 35 °C and 47 °C
The charging page: CHARGING above a green arc at 62%, with 2h 21m remaining at 4.8 A below it, 80.36 V and 18.7 of 30.0 Ah at the lower left, and a 6 mV cell difference with four temperature readings at the lower right
The trip page: a card of ten statistics, including trip distance, odometer, trip time, average and max speed, max battery and motor current, max watts, and watt-hours used and regenerated, above a green RESET button
The Select VESC page listing two Bluetooth devices, VESC BLE UART outlined in green as connected with full signal bars and VESC Express below it, with a rescan button in the top corner

Overview

Designed and developed a wireless telemetry display that combines real-time data from a VESC motor controller and an ANT Battery Management System. Both devices communicate simultaneously over Bluetooth Low Energy, eliminating the need for wired data connections.

Built around the WT32-SC01 Plus, an ESP32-S3 development board with a 480 × 320 touchscreen, the display provides motor performance, battery monitoring, and ride statistics. It is compatible with VESC-based systems, including my Electric Vehicle Motor Controller project.

Screens

Dashboard

Displays speed, battery voltage, state of charge, motor and battery current, and controller and motor temperatures.

Power Mode

Provides ECO, SPORT, and FULL riding modes, each with configurable power output and speed limits.

Battery

Displays state of charge, pack voltage, current, temperatures, individual cell voltages, and MOSFET and balancer status. Highlights cells with the highest and lowest voltages.

Charging

Automatically displays charging progress, estimated time remaining, charging current, and cell voltage imbalance when the battery is charging.

Trip

Tracks distance, ride duration, average and maximum speed, peak current and power, and energy consumption and regeneration.

Settings

Provides configurable brightness, measurement units, speedometer range, and screen orientation, with settings saved to flash memory. Also includes VESC information and device selection.

Firmware

Developed in C++ using LVGL 9 and FreeRTOS on the ESP32-S3. Two FreeRTOS tasks on Core 0 independently manage VESC and ANT BMS communication, while Core 1 handles the touchscreen interface. The display updates every 100 ms, refreshing only values that have changed.

Because the ESP32-S3 uses a single Bluetooth radio, both communication tasks coordinate scanning and connection operations through a shared lock. Non-blocking task execution prevents BMS operations from interrupting real-time motor telemetry.

VESC Link

  1. 01

    Connect

    Scans for the VESC Bluetooth module and establishes a connection through the Nordic UART Service. Automatically reconnects if no valid telemetry is received for 60 seconds.

  2. 02

    Request

    Sends COMM_GET_VALUES requests approximately every 50 ms using the VESC communication protocol, including packet framing and CRC-16 error checking.

  3. 03

    Receive

    Collects incoming BLE notifications in a ring buffer, reconstructs fragmented packets, and validates frame boundaries and checksums before processing.

  4. 04

    Decode

    Extracts voltage, current, temperature, power, and motor telemetry from big-endian data fields. Calculates vehicle speed using electrical RPM, motor pole pairs, and wheel circumference, while distance is derived from the tachometer count.

ANT BMS Link

  1. 01

    Find

    Scans for ANT BMS devices, prioritizing the strongest signal and reusing existing scan results when available. Connects through characteristic FFE1 for bidirectional communication.

  2. 02

    Request

    Requests battery status every 2 seconds. Supports both current and legacy ANT protocols, automatically switching between their packet formats after three unanswered requests.

  3. 03

    Decode

    Reassembles and validates incoming data frames before extracting individual cell voltages, pack voltage, current, temperature, state of charge, capacity, and MOSFET and balancer status. Handles variable cell counts and protocol-specific data formats.

  4. 04

    Detect Charging

    The Charging screen activates after 5 seconds of sustained charging current while stationary and closes when the vehicle moves or charging stops for 15 seconds.

← Back to Projects