RC Car GPS Speedometer
On an ESP32 (Arduino), configure a Quectel L80 GPS to RMC-only at 5 Hz with acknowledged PMTK commands, parse checksummed NMEA RMC sentences into km/h, and show live and maximum speed on an SSD1306 OLED. The maximum uses a two-sample spike filter, survives power cycles through rate-limited NVS writes, and resets on a long BOOT press.
- Board
- ESP32 · Arduino
- Difficulty
- Hard
- Topic
- UART Communication
- Access
- Full plan
The task
RC Car GPS Speedometer
You want to measure the real speed of a radio-controlled car. A Quectel L80 GPS module, an ESP32 board and a small OLED display are mounted on it. You will write the firmware that parses the GPS module's NMEA 0183 sentence stream and shows the current speed and the highest speed recorded so far on the display. The firmware uses the Arduino framework (Arduino-ESP32), not ESP-IDF directly.
Hardware
- ESP32-DevKitC (ESP32-WROOM-32). Powered through
VINfrom the BEC output (5 V) of the car's ESC; the board's own regulator produces the3V3rail, which also powers the L80 and the OLED. - Quectel L80 GPS module (patch antenna on top). Runs from 3.3 V with 3.3 V UART logic, so no level shifter is needed. Default UART setting: 9600 baud, 8N1. Pins, sentence formats and PMTK commands: Datasheet tab.
- SSD1306 OLED, 128×64, I²C, address
0x3C. A bare module: it has no I²C pull-up resistors. GPIO16(RX2) andGPIO17(TX2):Serial2, connected to the GPS module.GPIO21(SDA) andGPIO22(SCL):Wire, connected to the OLED.GPIO25: FIX LED; a high level lights it.GPIO0: the BOOT button on the DevKitC; reads low while pressed. No extra wiring.- USB serial port (
Serial, 115200 baud): test and debug log.
This is the opening of the task. Sign in with the full plan to read the rest and solve it.
What you get
- Your firmware is built and run on an emulated board and checked by hardware-level tests.
- No development board or local toolchain needed.
New to embedded? Start with the roadmap: How to learn embedded systems