← Back to Portfolio

ESP32 Firmware for DIY Dive Propulsion Vehicle (DPVControl)

Initial firmware for an open-source DIY dive propulsion vehicle

C++EmbeddedESP32PlatformIOVESC

Project Background

I wrote the initial firmware from scratch for a DIY underwater propulsion vehicle (DPV) built around an ESP32 and a 2000W VESC-controlled scooter motor. This was developed on-site with the hardware available for live testing.

Firmware Features

  • Motor Control: Precise speed control via VESC UART interface
  • Reed Switch Input: Magnetic switch detection for user input
  • Cruise Control: Maintains constant speed without continuous input
  • Boost Mode: Temporary power increase for challenging conditions
  • Battery Monitoring: Real-time voltage and current measurement
  • Leak Detection: Water intrusion sensors with automatic shutdown
  • NeoPixel LEDs: Status indication and user feedback
  • Beep/LED Safety Codes: Audible and visual alerts for various conditions
  • Temperature Monitoring: Motor and battery temperature tracking

Technical Specifications

  • MCU: ESP32 with dual-core processing
  • Motor Controller: VESC (Vedder Electronic Speed Controller)
  • Communication: UART interface to VESC
  • Development: PlatformIO framework
  • Language: C++ with Arduino core
  • Safety: Multiple redundant safety systems

Project Evolution

The v1 I wrote was the first version that went into the water. The project has since grown significantly with contributions from the community:

  • 20+ firmware releases with continuous improvements
  • Full REST API for external control and monitoring
  • Web-based GUI for configuration and real-time data
  • Comprehensive test suite
  • OpenAPI specification for API documentation

This project demonstrates my ability to work at the hardware-software boundary, dealing with real-time constraints, safety-critical systems, and embedded Linux environments.

Links & Resources