← Sketches · v0.3

v0.3 — TFT Fake Data (Full UI)

Waiting on parts
Display
3.2" ILI9488 TFT (SPI)
Data source
Fake / animated
Source file
sketches/v0.3_tft_fake_data/v0.3_tft_fake_data.ino

Goal

Move from the tiny OLED to the final product display: a 3.2” 320×480 ILI9488 TFT driven over SPI. Build the full dashboard UI on fake data first — RPM arc with red-line zone, large speed readout, boost bar, temperature / voltage grid — so that when CAN data arrives, only the data layer needs to change.

Hardware

  • LAFVIN ESP32 DevKit v1
  • 3.2” ILI9488 SPI TFT — 3.3V logic, no level shifter needed (ESP32 VCC 3.3V)
  • SPI bus on GPIO18 (SCK) / GPIO23 (MOSI); CS on GPIO15, DC on GPIO2, RST on GPIO4

See the TFT wiring doc for the full pinout and TFT_eSPI config notes.

UI elements (fake, animated)

  • RPM arc — radial gauge with red-line zone at the top
  • Speed readout — large monospace number centred
  • Boost bar — horizontal with numeric readout
  • Temperature row — coolant / oil / intake
  • Voltage — battery voltage

All drawn with TFT_eSPI primitives; uses the same display-layer API that v0.1 proved out on the OLED.

Status

Waiting for display. ILI9488 on order. When it arrives, the first check is verifying it’s actually ILI9488 and not ST7789 (some sellers mix them up) — library config differs.

Source — v0.3_tft_fake_data.ino

24 lines · pulled from the Arduino repo at build time

Show full source
// ============================================================
// BMW Dash Display — TFT Display Test (no OBD needed)
// Hardware: ESP32 DevKit + 3.2" ILI9488 TFT (SPI)
// Wiring:   VCC→3.3V  GND→GND  SCK→GPIO18  MOSI→GPIO23
//           DC→GPIO2  RESET→GPIO4  CS→GPIO15
// Libraries: TFT_eSPI (configure User_Setup.h for ILI9488)
// Status:   Waiting for display
// ============================================================

#include <SPI.h>
#include <TFT_eSPI.h>

void setup() {
  // TODO: Initialize TFT display
  // TODO: Configure TFT_eSPI User_Setup.h for ILI9488 + ESP32 SPI pins
  // TODO: Display splash screen with colour graphics
}

void loop() {
  // TODO: Generate fake car data (reuse animation logic from v0.1)
  // TODO: Draw full-colour screens with gauges and bar graphs
  // TODO: Auto-rotate screens
}