u/Few_Tip9168

Put a standalone ECU in my car during COVID, hated having no phone connectivity, so I ended up building my own CAN-to-BLE bridge and mobile app

I picked up a project during COVID: I put an Ignitron standalone ECU in my Golf MK4. Great ECU, but one thing bugged me from day one: no phone connectivity. If I wanted live data, I had to drag a laptop into the car. Every. Single. Time.

In 2024 I finally got tired of it and decided to build the missing link myself.

The hardware. V1 was deliberately dumb: an ESP32-S3 with a CAN transceiver sitting on the bus, forwarding the ECU's frames over BLE. That alone solved the original problem, live ECU data on the phone. The bridge has stayed dumb on purpose: all the ECU-specific decoding lives in the app, so adding a new ECU doesn't need a firmware update. That's how the app later picked up support for a few other standalones (MaxxECU, ECUMaster EMU, Haltech, each with its own CAN broadcast layout and quirks) plus a generic OBD-II mode for stock ECUs.

The GPS problem. Then the app grew a lap timer and I hit a wall that has nothing to do with CAN: phone GPS delivers about 1 Hz no matter what update rate you request. You can't do honest lap deltas or 0-100 timing from that. So the current hardware revision also carries a 25 Hz u-blox GPS and an IMU. Timing and g-force come from real sensors now, and the phone is purely a display.

The app. This turned into the real rabbit hole. "Just show me RPM" became a full digital dash for a landscape-mounted phone/tablet: Skia-rendered gauges with shift light and warnings, a lap timer with sector times and delta-to-best on the 25 Hz feed, a performance meter (0-100, quarter mile) that re-derives the official time from the raw GPS+IMU log after the run instead of trusting live-filtered values, and a drive recorder that burns the telemetry HUD (speed, RPM, g-force, lap delta, track map) into the exported video in a single native re-encode pass, without any screen recording.

It started as a lockdown itch and turned into the longest-running side project of my life. No regrets.

u/Few_Tip9168 — 6 days ago