**Real-Life Minimap: ESP32 Minimap Pulled Off The Impossible**
Introduction
When someone says a microcontroller cannot do something, the conversation usually ends before the engineering work begins. That is exactly the tension this project embraced: creating a Need for Speed Underground 2 style minimap running on an ESP32 P4 with a 3.4-inch 800 by 800 Waveshare display, using real-world GPS and local data tiled into a navigable grid.
The real significance here is not that the display can show an image. It is that a full geographic tiling pipeline, with live GPS, waypoint layers, and subsecond map updates, can be made to behave acceptably on hardware whose ecosystem was not designed for that scale.
Design Choices And Optimizations
What actually determines whether this matters is how you manage two bottlenecks: storage of millions of tiles and the I/O latency of loading them from removable media. This article walks through the design choices, data sources, and optimizations that turned an idea most people assumed impossible into a working in-car mini map.
The creative brief was to capture the aesthetic of Need for Speed Underground 2 while remaining functionally useful for local navigation and waypoint awareness.
Data Sources And Why They Matter
Real maps require reliable inputs. For this project, the base geography came from Ordnance Survey for roads, buildings, woodlands, and waterways. Railway stations were included in that dataset. Additional waypoint layers like airports, seaports, and car parks were taken from UK Department of Transportation downloads.
Petrol stations were not available as a clean single download, so the OpenStreetMap extract for the UK was used instead.
Converting And Moving Tiles For The Device
Tiles exported as PNGs do not match the display driver format on the ESP32. A conversion pipeline turns PNGs into BIN image blobs that the device can stream and blit efficiently.
The conversion step took roughly eight hours after pruning, and copying the converted files to an SD card required another 22 hours for this dataset.
Storage Scale And I/O Latency
Two explicit constraints surface here. First, storage requirement: a complete tiling of a large area at a given zoom level can easily reach hundreds of gigabytes unless the data set is aggressively pruned.
In this case the developer kept the image set to roughly 236 gigabytes after filtering.
Designing For Motion On Limited Hardware
The core software trick was to avoid loading all visible tiles from scratch every frame. Instead, the system keeps a sliding window of tiles in memory and only loads new tiles that enter the viewport based on direction of travel.
If the vehicle is moving north, only tiles coming from the top edge need to be fetched and swapped in. Side and rear tiles can be recycled by shifting pointer references.
Rotation Tradeoffs And The Oracle Decision
Early attempts tried to rotate the entire map image to align the world with the vehicle heading. That required rotating a large grid of tiles in software at update time, which tanked performance.
The practical solution was a design tradeoff: keep map tiles north-facing and rotate only the vehicle icon.
Field Testing And Real World Behavior
Testing in a car revealed the important interaction patterns. Boot time needs a visible loading state while GPS fixes are acquired.
Sharp turns and roundabouts expose the limit case for tile fetching because many new tiles can be required in short order.
Main Constraints To Plan For
Two constraints dominate: storage scale, which can reach hundreds of gigabytes without pruning, and I/O latency, measured here at about 0.1 seconds per tile read from external storage.
Both dictated cache and loading strategies.
Code And Pipeline Availability
The creator published the Python extraction script, QGIS export notes, and ESP32 rendering code in a public repository for others to use and extend.
Can This Scale To Dense City Environments?
It may, but the article notes uncertainty: city-scale tiling increases tile counts and waypoint churn, which will require hybrid strategies, more aggressive pruning, or different storage choices.