Why I built this
The pre-2008 BMW E-series dashboards show almost nothing about what the engine is actually doing. There's a coolant gauge and a fuel gauge. That's it. No boost, no oil temperature, no DPF soot load, no real-time RPM above the big analog needle.
I drive a 2007 E81 118d — N47 diesel, DDE7.0 ECU — and I wanted the same engine data a modern dash would give me, without ripping out factory trim. So I set out to build a small display that plugs in through the OBD2 port first, then moves onto the CAN bus directly, and eventually lives flush in the air-vent slot with OTA firmware updates.
This site documents every step of that project: the wiring, the PIDs, the sketches, and the hardware. The repository has the source, the docs, and the roadmap.
Current phases
v0.1
Done0.96" SSD1306 OLED · Fake / animated
Proof-of-concept: ESP32 drives a 0.96-inch OLED with animated fake gauges. Validates the display layer and UI rendering path before any OBD hardware is in hand.
v0.2
Waiting on parts0.96" SSD1306 OLED · Bluetooth ELM327
First real-data build: ESP32 pairs with a Bluetooth ELM327 dongle plugged into the OBD2 port, no cables, no soldering, and displays live engine values on the 0.96" OLED.
v0.3
Waiting on parts3.2" ILI9488 TFT (SPI) · Fake / animated
Upgrades the display from 0.96" OLED to a 3.2-inch SPI TFT. Builds the full production UI — RPM arc, speed, boost bar, temperature grid — on fake data so the layout is nailed before CAN hardware arrives.
v0.4
Pending3.2" ILI9488 TFT (SPI) · Bluetooth ELM327
Combines the full-resolution TFT UI from v0.3 with live OBD2 data streamed wirelessly from a Bluetooth ELM327 dongle. Last phase before switching from ELM327 to direct CAN bus.
Full roadmap
| Version | Description | Status |
|---|---|---|
| v0.1 | Fake animated data on 0.96" OLED | Done |
| v0.2 | Real OBD2 data via Bluetooth ELM327 on OLED | Waiting on parts |
| v0.3 | Full UI on 3.2" ILI9488 TFT with fake data | Waiting on parts |
| v0.4 | Real OBD2 data (Bluetooth ELM327) on ILI9488 TFT | Pending |
| v1.0 | Switch to direct CAN bus via MCP2515 | Pending |
| v1.1 | Hardwired install in car (CAN tap + fuse box power) | Pending |
| v2.0 | OTA firmware updates, companion app | Future |
Documentation
Reference
OBD2 PID Reference
Standard and extended PIDs, CAN bus message IDs, and baud rate for BMW E81 N47 DDE7.0.
v0.1 · v0.2
Wiring — OLED Display
SSD1306 OLED connections for v0.1, plus Bluetooth ELM327 pairing for v0.2 (no USB adapter needed).
v0.3 · v0.4
Wiring — ILI9488 3.2" TFT
ILI9488 SPI pin map, library setup, and driver-chip warnings for v0.3 and v0.4.
v1.0 · v1.1
Wiring — Direct CAN Bus (MCP2515)
MCP2515 + TJA1050 CAN controller wiring, T-tap installation, and MP1584 buck converter power for v1.0 hardwired install.
v2.0
OTA Firmware Updates
HTTP-based over-the-air firmware update architecture for ESP32 once the device is hardwired to the car (v2.0).