This project implements a GSM-based geolocation system that, upon receiving either a push-button input or a serial command, determines its approximate position without relying on GPS. Instead, it gathers signal measurements from nearby cellular base stations via a SIM800L module, relays those measurements through an ESP32 microcontroller, and then submits them to Google’s Geolocation API. The API returns latitude and longitude estimates based on the reported cell-tower identifiers and signal strengths. Below you can see photographs of the individual components and the fully assembled prototype in operation.
Because the SIM800L can draw brief current spikes of up to 2 A when transmitting, it cannot be powered directly from the ESP32 or an Arduino Uno—their 3.3 V and 5 V regulator outputs are limited to roughly 500–600 mA and 50 mA, respectively. Supplying less than the module’s minimum requirement leads to startup failures, dropped connections, and unstable behavior. To ensure reliable operation, the SIM800L must be fed from a dedicated 4.0–4.1 V power source capable of delivering at least 2 A. A small DC-DC step-down (buck) converter with adjustable voltage and current settings is an ideal solution, provided its input supply can sustain the necessary current draw.
For this build, I chose a “BAT XX” buck-converter module, which is rated for up to 5 A and can be purchased for approximately $1–$2. By adjusting its output to 4.1 V and limiting the current to 2 A, it reliably powers the SIM800L, while the ESP32 and other peripherals remain powered separately from their own regulated supplies.