VESC Telemetry Display (tweaked)
by CNCaddict in Circuits > Microcontrollers
756 Views, 5 Favorites, 0 Comments
VESC Telemetry Display (tweaked)

I started with Lukas Janky's awesome work and personalized the code to make it more useful for my purposes. As a non coder I used Gemini 2.5 Pro for 100% of the changes, as of 4/22/25 this seems like the best software to use for this sort of embedded coding. I attempted to use OpenAI o3 but it removed a whole bunch of necessary things and totally broke the program. Gemini is good about not touching things that work.
Features
- Shows all the important VESC data
- Super cheap and relatively easy to build from Amazon parts and a 3d printer.
- Most importantly shows VESC FET temp, Motor temp, Batt Voltage, etc so you don't run out of juice or fry something by being stupid without the hassle of connecting to your phones BT.
- tracks trip distance, efficiency, total distance (odometer). See video above for all the items displayed.
- Powered straight from the VESC over a hijacked USB-C connector.
- "Fancy" 3D printed case designed to fit 22mm handlebars
Changes from Lukas' design
- Screen now has colors. Red labels and units and white digits.
- During regen the power, motor current, and battery current labels and units now turn green.
- Lukas focused on speed for the data shown. I'm more concerned with battery state, motor currents, etc so I made lots of changes there.
- Dotted lines between rows for a little bit better readability
- Shows software version on splash screen
- persistent Odometer saves to EEPROM when speed is < 2 and distance since last update is >0.1. Therefore, if you're on a long ride the EEPROM will only write after you slow down and the distance travelled is over 0.1km or 0.1 miles since the last save.
- Settings menu for changing units (standard or metric), screen rotation, and resetting the odometer. All saved in EEPROM
- Screen times out and turns off with a delay of 2mins after speed is zero. Should reduce burn in.
- Displays both FET and Motor max temps
Notes on this design
- The Screen sucks. I wish I had used a different one but this is the one Lukas used. Too small, easy to damage, seem to arrive broken from amazon, has relatively poor contrast, and gets a weird temporary burn in like an OLED..but it's def not an OLED. It is fairly bright though.
- There is a small amount of screen flicker I tried to resolve but failed. I'm sure someone who knows how to code could fix this, but me and Gemini couldn't do it.
- The button press is not very responsive. It sometimes misses clicks.
- Update rate sucks, I blame the slow Arduino Nano
- Case is not completely finished. There is room for a plastic or glass screen cover if you choose to add one.
- Lots of details are hacked together but it does work and should be reliable.
Changelog
V1.38
- Initial release
V1.40
- Added software version to splash screen
- Improved EEPROM update logic so it only updates when speed <2 AND distanced travelled is over 0.1 since last EEPROM update. So if the EV isn't moving it won't keep writing to EEPROM. My last time based system was stupid
- Screen now turns off when speed is zero for over 2 mins instead of when UART values don't change which was a dumb way of doing things.
V1.52
- Now displays "Avg Eff" and "Trip Eff" on the Trip page. The Avg Eff saves to EEPROM at the same time as ODO reading and is based off the ODO value. Clear ODO clears this setting as well. Great for figuring out your EV's efficiency.
- Switched to using the WattHours UART value instead of calculating from Ah.
- F() added to save on SRAM usage
- Wh and Ah was not accounting for regen so now should be a more accurate and lower number.
- Fixed a screen 1 corruption bug
- Reduced VESC UART polling frequency to 5hz
- Decoupled screen updates from VESC polling
V1.60
- Fixed bug in Avg Eff where it would reset after power cycle
- Rearranged how data is displayed on screens to simplify and speed things up and improve button responsiveness
- Increased size of "Motor" screen for visibility
Supplies
Parts List ::: $118.89 as of (4-23-2025) for two screens plus 3d print material. Lots of extra parts left over.
- 1pc Arduino Nano $15.99
- 1pc 1.3" ST7789 240x240 LCD Screen $13.99
- 1pc 6x6x10 Tactile Switch $7.99
- 1pc 60x40mm Perf Board $15.49
- 1pc USB C Circular Chassis Mount $11.99
- 1pc USB C Power Pigtail $9.49
- 1pc 6ft USB C-C cable $5.99 any cable will do
- 1pc Jumper Wire Kit $7.99
- 4pcs M5x40 SHCS $9.99
- 4pcs M5 locknuts $6.99
- 4pcs M3x12 SHCS $12.99
- Bits of foam tape for inside clamp and to keep screen board in place inside case.
- Some 3d print material
Electronics





:: Warning :: Do not solder the screen to the header first. Half of my screens came defective. Solder the header down to the board, get everything working then (with power off) set the screen down over the header pins and tilt it up so they all make contact. Then power up the board. If the screen works go, ahead and solder it down. Also you need to put a bit of thick tape or a spacer behind the screen to support it when in the case.
Look at the pictures for my wire layout and lengths and be careful to position the Arduino headers exactly in the perf board holes shown or it won't fit in the case.
ST7789 connection Screen to Arduino nano:
- GND to GND
- VCC to 5V
- SCK to D13
- SDA to D11
- RES to D8
- DC to D9
Button to Arduino Nano
- one side to GND and other to D2
USB-C Chassis Mount to Arduino Nano:
- Red to VIN
- Black to GND
- Blue to TX1
- White to RX0
:: WARNING :: Do not heat shrink over the TX and RX lines until you test it. I forgot to document this so there's a 50% chance it's wrong.
Pigtail to VESC
- Red to 5V
- Black to GND
- White to TX1 (this maybe wrong..if so try RX0)
- Green to RX0 (this maybe wrong..if so try TX1)
:: WARNING :: Keep the UART line away from phase wires. I haven't had any problems but phase wires put out tons of EMF and aren't going to be kind to your bits.
Case

- Print out all the parts
- Drill out any holes if they're too tight
- Tap the holes for the M5x40mm bolt
- Tap the holes for the M3 bolts
- Conformal coat the board and back of screen if you're worried about water. I used Acrylic
- Drop the board into the box and the USB C chassis mount
- Button may stick a little in the hole. Could be my hole placement is off a bit. Drill out button hole a bit if needed.
- Put some foam tape on the back of the Arduino (not over the button) to keep the screen pressed down solid in the case.
Software

Instructions
- Install the Arduino IDE
- Make sure to drop the SolidGeek VESC UART and Arduino ST7789 Fast libraries in your libraries folder C:\Users\ComputerName\Documents\Arduino\libraries
- You may need to add the SPI, EEPROM, and AdaFruit_GFX libraries but those should be included within the IDE install.
- Double click the VESCTelemetry_V1.60.ino file to open it in the Arduino IDE
- Adjust the global config constants to match your EV. Specifically the "--- System / Hardware ---" and "--- Battery ---" sections. The display will give you garbage info if you don't set this up properly. See image
- Select Arduino Nano for the board type
- Plug in your Arduino Nano and click the little upload arrow at the top
:: WARNING ::
- Flashing to the display while connected to a running VESC probably won't work so make sure you unplug the VESC first.
How to Use
:: WARNING :: Do not plug anything other than a VESC into the USB-C port on the display. I'm guessing it won't blow up since they both should be 5V, but I used the USB-C connector because they kick ass, not for the standard.
- Press button to change screens
- Hold button down for 2s to enter setup menu
- Press button to change menu selection, once highlighted press button down for 2s to make the selection. Currently selected option will be underlined.
- Highlight "EXIT" and press button for 2s to leave the setup menu