MAD32 EV Mini Oled Edition for EVs on ESP32

HomeIdeasCodeMAD32 EV Mini Oled Edition for EVs on...

Discover MAD32 EVmo, the world’s smallest advanced dashboard for VESC based on the ESP32-C3 Super Mini with a 0.42″ OLED display. This compact module features a wireless VESC Tool bridge, real-time JBD BMS monitoring (up to 24S), GPS tracking, and a unique MAD32 IO system for wireless accessory control.

ESP32 C3 Oled on ALI: s.click.aliexpress.com/e/_c2wHTWsR & s.click.aliexpress.com/e/_c3UrLCcf
TENSTAR T-Display ESP32-D0WD: s.click.aliexpress.com/e/_c41PYXe3
JBD Smart BMS 8<>14S s.click.aliexpress.com/e/_c45HXOxh 
JBD Smart BMS 10<>16S s.click.aliexpress.com/e/_c3A8Kcyb 

MAD32 EVmo – User Guide | Pirate.AC

Mini Advanced Dashboard

It can’t get any smaller & cheaper

ESP32-C3 OLED 0.42″ | VESC RX TX | JBD BMS Monitor (24S) | IO control | GPS

Overview
Quick Start
Flashing
Wiring
Configuration
VESC Features
BMS Features
MAD32 IO
GPS Module
Roadmap
📊
What is MAD32 EVmo?

MAD32 EVmo (Mini Advanced Dashboard EVmo) is a compact, wireless dashboard module designed for electric vehicles powered by VESC controllers. It features a bright OLED display showing real-time telemetry data and supports Bluetooth connectivity for both VESC Tool app and BMS monitoring (up to 24S).

Perfect for:

  • 🛹 Electric Skateboards & Longboards
  • 🛴 E-Scooters & Electric Kick Scooters
  • 🚲 E-Bikes & Electric Bicycles
  • 🏎️ DIY Electric Vehicles with VESC
  • ⚡ Any VESC-powered electric vehicle

🎯 Key Capabilities

📱
Wireless VESC Tool Bridge
VESC BT TX Mode:
Acts as BLE server (NRF UART Service) for wireless connection to VESC Tool app on smartphone, tablet, or PC. Configure and monitor your VESC controller without cables. Requires wired UART connection to VESC.
📲
VESC BT Receiver
VESC BT RX Mode:
Connects to remote VESC BT module as BLE client and displays its telemetry. Perfect for dual-motor setups or monitoring a second vehicle wirelessly.
📡
MAD32 IO Network
ESP-NOW + WiFi Captive Portal:
WiFi P2P communication between modules (up to 100m range). Configure via WiFi AP “Pirate.AC” (captive portal) with editable HTML templates stored in LittleFS. Master sends VESC data to Slave display. Network credentials: “piratewashere” (default).
📺
Compact OLED Display
72×40 pixel OLED:
Bright, high-contrast display with 4 customizable screens showing battery voltage, power (watts), temperature, speed, and input signals. Switch screens with onboard button.
🔋
BMS Integration
JBD/Xiaoxiang BMS Support:
Monitor battery pack via Bluetooth: state of charge (SOC%), voltage, current, power, temperature, and individual cell voltages (up to 24S). Cells with 0V are hidden automatically. Helps detect weak or unbalanced cells.
⚙️
Dual Configuration System
VESC Mode (3 options):
VESC BT RX – BLE client (receive from remote VESC BT) | VESC BT TX – BLE server (VESC Tool bridge) | OFF – VESC disabled
MAD32 IO Mode (3 options – independent):
OFF – MAD32 IO disabled | Master – ESP-NOW TX | Slave – ESP-NOW RX
🔄
Multi-Screen Display
4 VESC Screens + Dynamic BMS Screens:
Main (voltage + mode), Watts+Temp, Power (V+W), Inputs (ADC/PPM). Optional BMS screens show pack status and cell voltages (up to 24S). Screen count adapts automatically to cell configuration.
💾
Persistent Settings
Non-Volatile Storage:
All configuration (mode, BT devices, rotation, BMS settings) saved to flash memory. Survives power off and restarts. Auto-reconnects to saved devices on boot.
🌐
WiFi Configuration Portal
Captive Portal “Pirate.AC”:
Configure MAD32 IO network via WiFi AP. HTML templates stored in LittleFS (editable without recompiling). Automatic fallback to PROGMEM if filesystem unavailable. Default credentials: “piratewashere”.

💡 How It Works

1. Hardware Connection

Connect ESP32-C3 to VESC via 4-wire UART (TX, RX, 3.3V, GND). Module draws power from VESC 3.3V output.

2. Configuration

Hold BOOT button (2s) to enter config menu. Select operating mode, pair BT devices, enable BMS if needed.

3. Operation

Display shows real-time telemetry. Press BOOT button briefly to cycle through screens. Module auto-connects to saved devices.

⚙️ Technical Specifications

Microcontroller ESP32-C3 RISC-V @ 160MHz
Flash Memory 4MB (huge_app partition: 3MB)
RAM 400KB (usage: ~14.8%)
Firmware Size ~1.42MB (45.1% of partition)
Display OLED 0.42″ (72x40px, SSD1306)
Connectivity BLE 5.0, WiFi (ESP-NOW), UART
Filesystem LittleFS (~1.5MB partition)
Power 3.3V (from VESC or USB-C)
BLE Connections Max 4 simultaneous (NimBLE)
BMS Support JBD/Xiaoxiang (3S-24S)
Framework PlatformIO + Arduino
Dimensions Compact (ESP32-C3 Super Mini)
🚀
Quick Start Guide

✅ What You’ll Need

  • MAD32 EVmo module (ESP32-C3 with OLED display)
  • VESC controller with UART port (4-pin connector)
  • 4 wires for connection (TX, RX, 3.3V, GND)
  • USB-C cable for initial firmware flashing
  • Computer with NodeMCU-PyFlasher installed
  • Optional: JBD/Xiaoxiang BMS for battery monitoring

📝 Step-by-Step Setup

  1. Flash Firmware to ESP32-C3
    Connect ESP32-C3 to your computer via USB-C. Use NodeMCU-PyFlasher to flash the MAD32_EVmo_V1a.bin file. Settings: Baud 115200, Flash Mode DIO, Address 0x0, Erase flash: Yes.
    → See “Flashing” tab for detailed instructions
  2. Wire ESP32-C3 to VESC
    Connect 4 wires from ESP32-C3 to VESC UART port:
    3.3V → 3.3V (power) | GND → GND (ground) | GPIO21 → RX (ESP TX to VESC RX) | GPIO20 → TX (ESP RX to VESC TX)
    → See “Wiring” tab for diagram
  3. First Power-On
    Turn on VESC. The module will show splash screen:
    Pirate.AC → MAD32 EVmo → Firmware:V1a
    Then display switches to Main Screen showing mode and battery voltage.
  4. Configure Operating Modes
    Hold BOOT button for 2 seconds to enter Configuration Menu.
    VESC Mode (Page 1): VESC BT RX (wireless from remote VESC BT) | VESC BT TX (wired UART + wireless VESC Tool) | OFF
    MAD32 IO Mode (Page 7): OFF (default) | Master (ESP-NOW TX) | Slave (ESP-NOW RX)
    → See “Configuration” tab for detailed menu navigation
  5. Optional: Enable BMS Monitoring
    In config menu, navigate to BMS Feature → ON.
    Then go to BMS Status page and hold BOOT (2s) to search for your JBD/Xiaoxiang BMS.
    Select device from list and hold BOOT again to save. Module will auto-connect on next boot.
  6. Save Settings & Exit
    Navigate to Save & Exit page in config menu.
    Hold BOOT button (2s) to save all settings and restart module. Settings are stored in flash memory and persist after power off.

🎮 Daily Operation

📱 Connect VESC Tool

1. Open VESC Tool app on phone/tablet/PC
2. Scan for Bluetooth devices
3. Connect to module (name: User1-6 or device name)
4. Configure VESC wirelessly

💡 Requires VESC Mode = VESC BT TX (wired UART connection to VESC)

📺 View Telemetry

1. Short press BOOT to cycle screens
2. Screen 1: Battery voltage + mode
3. Screen 2: Power (W) + Temperature
4. Screen 3: Voltage + Power (large)
5. Screen 4: ADC/PPM inputs

💡 Press rapidly to skip screens

🔋 Monitor BMS

1. Enable BMS Feature in config menu
2. Pair with JBD/Xiaoxiang BMS
3. View 3 additional screens:
• BMS Main (V, SOC%, A, W, °C)
• Cells 1-8 voltages
• Cells 9-16 voltages

💡 Helps identify weak cells

⚠️ Important Notes

  • Power: ESP32-C3 operates at 3.3V. DO NOT connect 5V to GPIO pins!
  • UART: Make sure UART is enabled in VESC Tool settings (baud rate 115200)
  • MAD32 IO Pairing: When using MAD32 IO Mode (Master or Slave), navigate to Page 8 (MAD32 IO WiFi) to configure network via captive portal “Pirate.AC” (both devices need matching network name)
  • BMS: Only JBD/Xiaoxiang protocol BMS are supported (3S-24S configurations)
  • Reset: To factory reset, hold BOOT while powering on until “Factory Reset” appears
💾
Flash Firmware with NodeMCU-PyFlasher
⬇️ Download NodeMCU-PyFlasher

Free tool for Windows and macOS – download from GitHub Releases

💻
Computer
NodeMCU-PyFlasher
📟
ESP32-C3
USB-C connection

Step-by-Step Instructions

  1. Download and Install NodeMCU-PyFlasher
    Download the latest release from GitHub. For Windows, use the .exe file. For macOS, use the .dmg file. No installation required – just run it.
  2. Connect ESP32-C3 to your Computer
    Use a USB-C cable to connect the ESP32-C3 module to your computer. Make sure it’s a data cable, not just a charging cable. The module should be recognized automatically.
  3. Select COM Port
    In NodeMCU-PyFlasher, click the Serial port dropdown and select the COM port for your ESP32. On Windows it’s usually COM3, COM4, etc. On macOS it’s /dev/cu.usbserial-xxx.
  4. Select Firmware File
    Click Browse and select the MAD32_EVmo_V1a.bin file that you received.
  5. Configure Flash Settings
    Set the parameters as shown below. These settings are critical for proper flashing!
  6. Flash the Firmware
    Click Flash NodeMCU button. Wait for the process to complete. You should see “Finished” message when done. The module will restart automatically.

⚙️ Required Flash Settings

Baud Rate
115200
Flash Mode
DIO
Flash Address
0x0
Erase Flash
yes
⚠️

Important!

The flash address must be set to 0x0 (zero). The BIN file contains bootloader, partitions, and firmware merged together. Using wrong address will result in non-working module.

✅ Troubleshooting

  • COM port not visible? – Install CH340/CP2102 USB driver for your system
  • Connection failed? – Try holding BOOT button while connecting USB, then release
  • Flash failed? – Try lower baud rate (57600) or different USB cable
  • Module not starting? – Verify flash address is 0x0 and re-flash with “Erase flash” enabled
🔌
Wiring Diagram
⚠️

WARNING: 3.3V Logic Level!

ESP32-C3 operates at 3.3V logic. DO NOT connect 5V directly to ESP32 pins! Use 3.3V from VESC or a voltage regulator.

🅰 VESC Wiring  VESC Mode = VESC BT TX | GPIO20, GPIO21

ESP32-C3 Mini
  • Power 3.3V
  • Ground GND
  • UART RX GPIO20
  • UART TX GPIO21
Built-in:
OLED SDA: GPIO5
OLED SCL: GPIO6
BOOT Button: GPIO9
3.3V ←
GND ←
RX ← TX
TX → RX
VESC Controller
  • 3.3V Output 3.3V
  • Ground GND
  • UART TX TX
  • UART RX RX
UART Connector:
Standard 4-pin
header on VESC board
💡 Tip: Make sure UART is enabled in VESC Tool with baud rate 115200

🅱 GPS Wiring  Always GPIO3 (RX) / GPIO4 (TX) — works with any VESC Mode

ESP32-C3 Mini
  • Power 3.3V
  • Ground GND
  • GPS RX ← GPS TX GPIO3
  • GPS TX → GPS RX GPIO4
Built-in:
OLED SDA: GPIO5
OLED SCL: GPIO6
BOOT Button: GPIO9
3.3V ←
GND ←
TX → RX
RX ← TX
GPS Module
  • VCC 3.3V
  • GND GND
  • TX (→ ESP RX) TX
  • RX (← ESP TX) RX
NEO-6M / NEO-7M
BN-180 / BN-220
or any NMEA module
💡 Tip: GPIO3 / GPIO4 are independent from VESC UART (GPIO20/21) — GPS works with all VESC modes simultaneously.
⚙️
Configuration Menu
👆
Short Press
Changes value / Scrolls through device list / Goes to next page
Hold 2 seconds
Enter config / Start search / Select device / Save and exit

📋 Configuration Pages

Hold BOOT button 2s to enter config menu. Pages appear in this order (short press = next page, hold 2s = action):

1. VESC Mode

Short press: cycle VESC BT RX → VESC BT TX → OFF

2. VESC BT Status (only if VESC Mode = BT RX)

Hold 2s: start search → Short press: scroll devices → Hold 2s: save device

3. Rotate

Short press: toggle Normal/180°

4. BMS Feature

Short press: toggle ON/OFF

5. BMS Status (only if BMS = ON)

Hold 2s: start search → Short press: scroll devices → Hold 2s: save device

7. MAD32 IO Mode

Short press: cycle OFF → Master → Slave

8. MAD32 IO WiFi (only if MAD32 IO ≠ OFF)

Hold 2s: toggle captive portal “Pirate.AC” (WiFi config for network & GPIO settings)

✓ SAVE & EXIT

Hold 2s: save all settings → device restarts automatically

📝 Important Notes:

  • Two Independent Settings: VESC Mode (Page 1) and MAD32 IO Mode (Page 7) are SEPARATE configuration options that can be combined in various ways
  • VESC Mode cycling (Page 1): VESC BT RX → VESC BT TX → OFF → (repeat). Short press to change
  • MAD32 IO Mode cycling (Page 7): OFF → Master → Slave → (repeat). Separate setting from VESC Mode
  • VESC Mode options: VESC BT RX (BLE client to remote VESC BT), VESC BT TX (BLE server for VESC Tool), OFF (VESC disabled)
  • MAD32 IO options: OFF (no network), Master (BLE client for remote GPIO control), Slave (BLE server with GPIO outputs)
  • VESC BT Status (Page 2): Only shown when VESC Mode = BT RX. Hold 2s to search for remote VESC BT modules
  • BMS Status (Page 5): Only shown when BMS Feature = ON. Hold 2s to search. Supports 3S-24S with auto-reconnect (scan: 5s, retry: 10s)
  • MAD32 IO WiFi (Page 8): Only shown when MAD32 IO Mode ≠ OFF. Captive portal “Pirate.AC” for network/GPIO config (default: “piratewashere”)
  • Display Screens: 3 VESC screens (Main, Watts+Temp, Inputs) when VESC enabled. BMS screens (1-3) when BMS enabled. Screen count adapts to cell count (12S = 2 screens, 24S = 3 screens)
  • Settings saved to NVS flash memory and persist after restart
  • Module automatically restarts after saving configuration
VESC Features & Monitoring

🎯 What is VESC?

VESC (Vedder Electronic Speed Controller) is an open-source motor controller designed by Benjamin Vedder. It’s widely used in electric skateboards, e-bikes, and other electric vehicles for its advanced features like FOC (Field Oriented Control), regenerative braking, and comprehensive telemetry.

🔄 VESC Modes (Page 1)

The VESC Mode setting (Page 1 in config menu) controls how MAD32 EVmo connects to and communicates with VESC motor controller. Three options available:

📡
VESC BT TX Mode

UART → BLE Server (Wireless Bridge)
• ESP32 connected via UART to local VESC
• Acts as BLE server for VESC Tool app
• Enables wireless VESC Tool configuration
• Requires 4-wire UART connection (TX, RX, 3.3V, GND)

📲
VESC BT RX Mode

BLE Client → Remote VESC BT
• Connects to remote VESC BT module wirelessly
• No UART wiring required (100% wireless)
• Receives telemetry data via Bluetooth BLE
• Perfect for monitoring 2nd vehicle or remote VESC

VESC OFF Mode

VESC Functionality Disabled
• No VESC communication (UART or BLE)
• Device can work as BMS-only monitor
• Saves power and BLE resources
• Shows “Turn On FEATURES” if BMS also disabled

🔌 VESC Wiring Diagram

ESP32-C3 Mini
  • Power 3.3V
  • Ground GND
  • UART RX GPIO20
  • UART TX GPIO21
Built-in:
OLED SDA: GPIO5
OLED SCL: GPIO6
BOOT Button: GPIO9
3.3V ←
GND ←
RX ← TX
TX → RX
VESC Controller
  • 3.3V Output 3.3V
  • Ground GND
  • UART TX TX
  • UART RX RX
UART Connector:
Standard 4-pin
header on VESC board
💡 Tip: Make sure UART is enabled in VESC Tool with baud rate 115200

📊 Real-Time Telemetry

⚡ Power Monitoring

Real-time power consumption in watts, battery voltage, and input current. Essential for range estimation and efficiency optimization.

🌡️ Temperature Monitoring

MOSFET and motor temperature tracking. Prevents overheating and thermal damage to your controller.

🎮 Input Monitoring

ADC1, ADC2, and PPM signal monitoring. Debug throttle issues and verify remote control signals.

⏱️ OSD Priority Intervals

Optimized timing intervals for responsive real-time dashboard display:

Display Refresh
150ms
HIGH PRIORITY for real-time OSD
VESC BT Requests
750ms
Connection params: 750-1250ms, latency=1
BMS Requests
1000ms
1 second interval
MAD32 IO Scan
2s / 3s
2s burst, 3s cooldown

📺 Display Screens (3 VESC Screens)

Screen cycling:
• All modes: Main → Watts+Temp → Inputs

Button: Short press to cycle through screens

Standard BT:1
42.5
V
MAIN Main Screen
VESC mode (“Standard” or “BT RX”), BLE status (BT:0/1) or RSSI, battery voltage (large font)
850
W
42.1V 45C
WATTS+TEMP Power & Temperature
Current power in watts (top), voltage (bottom left), VESC temperature (bottom right)
INPUTS
ADC1: 1.65V
ADC2: 0.00V
PPM: 1500us
INPUTS Input Signals
ADC1 and ADC2 voltages (0-3.3V), PPM pulse width in microseconds
🔋
BMS Features & Battery Monitoring

🎯 What is BMS?

BMS (Battery Management System) protects your battery pack from overcharge, over-discharge, overcurrent, and cell imbalance. MAD32 EVmo supports JBD/Xiaoxiang BMS via Bluetooth for real-time battery monitoring and cell balancing verification.

📊 Battery Pack Telemetry

📊 Pack Status

Total voltage, state of charge (SOC%), current flow (charge/discharge), power output, and pack temperature.

🔬 Individual Cell Voltages

Monitor each cell (up to 24S) separately. Cells with 0V are hidden automatically. Identify weak cells, detect imbalance issues, and verify proper balancing.

⚡ Charge/Discharge Info

Current direction indicator (+ charging / – discharging), power in watts, and remaining capacity estimation.

✅ Supported BMS Models

  • JBD/Xiaoxiang BMS: SP04S, SP05S, SP10S, SP12S, SP13S, SP14S, SP15S, SP16S, SP20S, SP21S, SP24S
  • Protocol: Xiaoxiang/Overkill Solar BMS (Bluetooth BLE)
  • Cell count: 3S to 24S configurations supported (dynamic screen count)
  • Connection: Wireless via Bluetooth (no additional wiring needed)
  • Auto-reconnect: Automatic BLE scan (5s) and reconnection (10s) after disconnect

📺 Display Screens (Dynamic Count)

Additional screens when BMS Feature ON:
• Screen 5: BMS Main (pack voltage, SOC%, current, power, temperature)
• Screen 6+: Cell voltages (8 cells per screen, up to 24S total)

Smart Display: Screen count adapts automatically to detected cell count (e.g., 12S = 2 screens, 24S = 3 screens). Cells with 0V are hidden automatically.

Access: Cycle through VESC screens first, then BMS screens appear

BMS
50.4V 85%
-12.5A 630W
28C
BMS BMS Main
Battery voltage, state of charge %, current (+ charging / – discharging), power, temperature
CELLS 1-8
1:4.20V 2:4.19V 3:4.18V 4:4.20V 5:4.19V 6:4.18V 7:4.20V 8:4.19V
CELLS 1-8 Cell Voltages 1-8
Individual voltage for each cell (1-8). Cells with 0V are hidden automatically. Helps identify weak or unbalanced cells.
CELLS 9-16
9:4.18V 10:4.20V 11:4.19V 12:4.18V 13:– 14:– 15:– 16:–
CELLS 9+ Cell Voltages 9-24
Additional cell screens (9-16, 17-24) as needed. Cells with 0V are hidden automatically. Screen count adapts to detected cell configuration.
📡
MAD32 IO Network Features

🎯 What is MAD32 IO?

MAD32 IO is a wireless distributed GPIO control system using BLE (Bluetooth Low Energy). It enables Master devices to remotely control GPIO outputs on Slave devices (lights, relays, actuators, etc.). Perfect for remote lighting control, relay switching, or any wireless GPIO automation.

🔄 MAD32 IO Modes (Page 7)

Three MAD32 IO modes available, configured via Page 7 in the config menu:

OFF Mode (Default)

MAD32 IO Network Disabled
• No ESP-NOW communication
• WiFi radio turned off (saves power)
• Standard single-device operation
• Default mode for most users

🚀
Master Mode

BLE Client (Remote Control)
• Scans for Slave devices advertising MAD32 IO service
• Connects to Slaves via BLE and validates credentials
• Reads GPIO slot information from Slaves
• Sends toggle commands to control Slave GPIO remotely
• Can control multiple Slaves simultaneously

📻
Slave Mode

BLE Server (GPIO Control)
• Advertises MAD32 IO service via BLE for Master discovery
• Exposes GPIO slot configuration (up to 3 slots: name, state)
• Controls physical GPIO pins (OUTPUT mode)
• Responds to toggle commands from Master
• Additional ESP32 boards or MAD32 devices

🌐 WiFi Configuration Portal

Captive Portal “Pirate.AC”

Advanced network and GPIO configuration accessible via WiFi AP (Page 8 in config menu, only shown when MAD32 IO Mode ≠ OFF):

  • Network Config: Set network name & password (must match on Master and all Slaves)
  • Slave GPIO Slots: Define up to 3 GPIO functions (name, pin number, default state, invert logic)
  • Editable HTML: Templates stored in LittleFS (data/madio_config.html) – customize without recompiling
  • Default Credentials: Network name & password: “piratewashere”
  • Access: Navigate to Page 8 in config → Connect smartphone to WiFi “Pirate.AC” → Portal opens automatically

🎮 GPIO Control Features (Slave Mode)

💡 Lighting Control

Control headlights, taillights, LED strips (WS2812B), or brake lights. Define GPIO outputs via captive portal.

🔌 Relay Switching

Switch relays, solenoids, or other actuators. Master can toggle Slave GPIO outputs remotely via button press.

📡 Up to 3 Slots

Each Slave device can control up to 3 independent GPIO outputs. Configurable name, pin, default state, and logic inversion.

💡 Typical Use Cases:
Remote Lighting Control: Master button press toggles Slave GPIO (headlights, taillights, LED strips)
Wireless Relay Switching: Master remotely controls Slave relays, solenoids, or actuators
Multi-Zone Lighting: One Master controls multiple Slave devices with different light zones
Automated GPIO Control: Master triggers actions on Slave GPIO outputs based on events

✅ BLE Migration Complete (Feb 2026)

All-Bluetooth Architecture: MAD32 IO has been successfully migrated from ESP-NOW to BLE (Bluetooth Low Energy). This eliminates WiFi/BLE radio conflicts on ESP32-C3 single-radio architecture.

Benefits: Reliable coexistence with other BLE devices (no radio conflicts). Better range, simpler code, no WiFi interference.

🛰️
GPS Module Features

🎯 What is GPS Module?

GPS Module integration provides accurate speed tracking, distance measurement, and altitude monitoring independent from motor RPM calculations. Uses external GPS module connected via UART with automatic baud rate detection (4800-115200 bps). Perfect for verifying actual speed vs calculated speed and trip distance tracking.

📡 GPS Configuration (Pages 5-6)

GPS Module is configured via config menu (Page 5 enables/disables, Page 6 sets power mode). Always uses fixed pins GPIO3 (RX) and GPIO4 (TX).

🔌 GPS Wiring Diagram

ESP32-C3 Mini
  • Power 3.3V
  • Ground GND
  • GPS RX ← GPS TX GPIO3
  • GPS TX → GPS RX GPIO4
Built-in:
OLED SDA: GPIO5
OLED SCL: GPIO6
BOOT Button: GPIO9
3.3V ←
GND ←
TX → RX
RX ← TX
GPS Module
  • VCC 3.3V
  • GND GND
  • TX (→ ESP RX) TX
  • RX (← ESP TX) RX
NEO-6M / NEO-7M
BN-180 / BN-220
or any NMEA module

📊 GPS Data & Features

🚀 Speed Tracking

Real-time speed in km/h from GPS satellites. Independent from motor RPM. Max speed recording for trip analysis.

📏 Distance Tracking

Total distance traveled in kilometers. Calculated using Haversine formula between GPS coordinates. Trip reset available.

⛰️ Altitude Measurement

Altitude above sea level in meters. Useful for elevation gain tracking and hill climbing performance analysis.

🛰️ Satellite Count

Number of satellites in view. More satellites = better accuracy. Typically 4+ needed for valid fix.

⚡ Power Modes (Page 6)

🔋 Normal Power Mode

Standard power consumption with balanced performance. Suitable for most use cases. Lower power draw for longer battery life.

⚡ Max Power Mode

Maximum performance mode for best accuracy, speed, and precision. Faster satellite acquisition. Higher power consumption.

🔧 Technical Features

  • Auto Baud Rate Detection: Automatically detects GPS module baud rate (4800, 9600, 14400, 19200, 38400, 57600, 115200 bps)
  • NMEA Protocol: Uses TinyGPS++ library for parsing NMEA sentences from GPS module
  • Fixed Pin Assignment: GPS always uses GPIO3 (RX) and GPIO4 (TX), independent from VESC UART on GPIO20/21
  • Trip Data Reset: Reset distance and max speed counters via config menu
  • Satellite Status: Visual indication of GPS fix quality (Checking/Waiting Sat/Valid/Error)
  • Optional Compass: I2C compass support (QMC5883L/HMC5883L) on GPIO8,10 or shared with OLED (GPIO5,6)
💡 Supported GPS Modules:
NEO-6M / NEO-7M / NEO-8M: Popular u-blox GPS modules with UART interface
Beitian BN-180 / BN-220: Compact GPS modules with built-in antenna
Any NMEA-compatible GPS: Modules outputting standard NMEA sentences via UART
Connection: 4-wire (GPS TX → ESP32 RX, GPS RX → ESP32 TX, VCC, GND)

⚠️ GPIO Pin Conflicts

ESP32-C3 Limited GPIO Availability: Only GPIO 0-10 and 20-21 available (NO GPIO 11-19).
GPIO5,6: Reserved for OLED (I2C)
GPIO9: BOOT button
GPIO20,21: VESC UART only
GPIO3,4: GPS module (always fixed)

Note: If using external TFT display (ST7789 76×284), GPIO conflicts may occur with GPS. Choose either GPS or TFT, or use different pin assignments.

🚀
Future Features Roadmap

🔮 What’s Coming Next

MAD32 EVmo is under continuous development. Below is our roadmap of planned features that will expand the dashboard’s capabilities. These features are in various stages of planning and development. Stay tuned for updates!

✅ Recently Completed (Feb 2026)

🔋
Extended BMS Support (24S)
Up to 24S Battery Monitoring
Expanded from 16S to 24S cell support. Dynamic screen count adapts automatically to detected cell configuration. Cells with 0V are hidden for cleaner display. Perfect for high-voltage EV builds.
🌐
Editable HTML Templates
LittleFS-Based Configuration Portal
MAD32 IO captive portal HTML now stored in LittleFS (data/madio_config.html). Customize interface without recompiling firmware. Automatic fallback to PROGMEM if filesystem unavailable.
🔄
BMS Auto-Reconnect
Reliable BLE Connection Recovery
Automatic BLE scan every 5 seconds and connection retry every 10 seconds after BMS disconnect. No manual intervention needed – system reconnects automatically when BMS is back in range.
📊
Smart Cell Display
Dynamic Zero-Voltage Filtering
Cells with 0V voltage automatically hidden from display. Cleaner interface and easier cell monitoring. Screen count adapts to actual cell configuration (e.g., 12S = 2 screens, 24S = 3 screens).
🛰️
GPS Module Integration
Full GPS Support with Auto Baud Detection
External GPS module via UART with speed tracking, distance measurement, altitude, and satellite count. Fixed pins GPIO3/GPIO4, independent from VESC UART. Power modes: Normal/Max.
📡
MAD32 IO BLE Migration
All-Bluetooth Architecture
Migrated MAD32 IO from ESP-NOW to BLE for distributed GPIO control. Eliminates WiFi/BLE radio conflicts on ESP32-C3. Master/Slave BLE architecture with secure credential validation. Better reliability and coexistence with other BLE devices.

✨ Coming Soon

📱
External Display Support
Larger Display Options
Mirror telemetry to external displays:
ST7789 76×284 super-wide color LCD
Transparent OLED 128×64 for HUD applications
Enable in config menu for dual-screen setup with simultaneous display on both screens.
Status: In Development
💡
LED Light Control
ESP-NOW Wireless Lighting
Control vehicle lighting via ESP-NOW:
• Turn headlights/taillights ON/OFF
• Control LED strips (WS2812B, etc.)
• Change colors and brightness
• Custom lighting patterns
Status: Planned
🔄
Smart Turn Signals
Gyroscope-Based Indicators
Helmet-mounted gyroscope detects head turning direction and automatically activates turn signals. Wireless communication via ESP-NOW to vehicle lighting system. Enhances safety for night riding.
Status: Planned
❤️
Heart Rate Monitoring
Fitness Tracking Integration
Connect Magene heart rate sensor via Bluetooth. Display real-time heart rate on dashboard screen. Track fitness levels during rides and monitor cardiovascular performance.
Status: Researching
🌡️
Environmental Monitoring
ENS160 + AHT21 Sensor Module
Monitor air quality, temperature, and humidity:
• Air Quality Index (AQI)
• Temperature and humidity
• VOC (Volatile Organic Compounds) detection
• CO2 equivalent (eCO2) levels
Status: Researching
🚲
KT Controller Integration
E-Bike Controller Support
Support for KT (Kunteng) bicycle controllers used in e-bike conversion kits. Read telemetry data via UART/serial communication. Expands MAD32 EVmo beyond VESC to e-bike market.
Status: Researching
🔧
And Much More…
Continuous Innovation
We’re constantly exploring new features and improvements based on community feedback. Have an idea? Let us know! The roadmap evolves with user needs.
Status: Ideas Welcome!

📅 Development Timeline

In Development

Active coding and testing phase. Expected in next major release.

Planned

Feature design complete. Scheduled for future development cycle.

Researching

Exploring feasibility, hardware compatibility, and implementation approaches.

💬 Want to Contribute?

MAD32 EVmo welcomes community contributions! Whether it’s feature suggestions, bug reports, or code contributions – your input helps shape the future of this project.

  • Feature Requests: Share your ideas for new features
  • Bug Reports: Help us improve stability and reliability
  • Hardware Testing: Test with different VESC models and BMS types
  • Documentation: Improve guides, translations, and tutorials

Random posts

Leave a reply

Please enter your comment!
Please enter your name here
Captcha verification failed!
CAPTCHA user score failed. Please contact us!