Irregular screen size detected, Content may not be displayed correctly.
Project June, a 5G radio-controlled vehicle
Back to projects
FlagshipPersonal Project

Project June

I want a Mars rover, and if I cannot buy one, I will build one myself. That's the motivation behind this project. The rover streams three live video feeds of its surroundings together with GPS data and sensor readings like temperature, humidity, pressure and brightness, helping the operator understand and navigate the terrain with confidence.

Built with
PhotoshopVS CodeOnshapeKiCADESP32PlatformIO

Demo Video

Project June

I planned to build Project June in two weeks, but it took me three. It was definitely rushed, and there are a lot of things I wish I had done differently. Even so, it is still one of the most ambitious projects I have worked on.

The original Project June rover
The original Project June photo

Onboard Systems

Project June onboard systems overview

Ultrasonic Distance Sensor

Ultrasonic distance sensor

Laser System

Laser system

Live GPS

Live GPS module

10 Axis IMU

10 axis IMU

Light Sensor

Light sensor

DHT11 Temp & Humidity

DHT11 temperature and humidity sensor

Technical Architecture

This is an overview of how each system functions and how they all interact with each other.

System architecture diagram

Live Stream System

This diagram shows how the whole live streaming system works. It is 3 different WebRTC streams that send the live video to the client.

Here is roughly what the operator's console looked like while driving: the same signal path, telemetry and camera feeds laid out for a glance.

Command LinkLive console, reconstructed from the day run
Signal path

Xbox controller. Stick and trigger movements are read at the operator end and packaged into small command messages, a few times a second.

Telemetry HUD
214° SWHeading · magnetometer
  • Latitude1.4614°N
  • Longitude103.8405°E
  • Speed2.0km/h
  • Altitude-12m
  • Temp30.2°C
  • Humidity65%
  • Satellites21
  • BrightnessvBright
  • Location · GPS fixIrau Dr
Camera feeds
LIVECenter · Forward driving view, the operator’s primary feed straight down the line of travel.
Live stream system diagramWebRTC stream routing

Control & Telemetry System

The control and telemetry system feeds sensor data to the client using an MQTT topic that the client is subscribed to. Another MQTT topic is used by the client to send movement and command messages back to the ESP32.

Control and telemetry diagram

Signalling

Because of an issue that has not yet been resolved, all sensor data could not be sent together in a single MQTT transmission. Instead, the data was divided into three separate packets and transmitted individually at approximately 10 Hz.

Signalling packet diagram

Software

Here is the simplified flow chart of how the code works.

Software flow chart part 1Software flow chart part 2

Software Design (Figma)

Spline 3D

I used Spline 3D for the 3D elements in the UI. When you push the controller forward, the model moves into the forward view, and if you move it back, it goes into the reverse view.

Spline 3D UI element
Spline 3D
The live animation

Driving Project June

Driving Project June was an unforgettable experience. The roughly one-second delay between controller input and movement on the live feed, combined with the instability of the stream, made it challenging at times. Thinking about how my controller input had to travel through so many layers of systems, while the video feed was being sent from over 8 kilometres away, still blows my mind.

Project June on GitHubA rover control system with WebRTC video streaming, MQTT telemetry, and ESP32 sensor integration.
View GitHub Repo
Check out the next articleAll projects
More to explore

Other projects

PersonalFlagshipBeadReader private book reader

BeadReader

A private, invite-only online book reader with live presence, per-reader resume, a SQL-enforced content gate, webtoons and shared reading stats. Next.js and Supabase.

Next.jsSupabaseTailwind CSSCloudflare R2
PersonalHighlightLoRA Messenger

LoRA Messenger

An ESP32 messenger with 2-way voice over ESP-NOW and text over LoRa. Custom PCB in KiCAD, case in Onshape, all self-taught.

ESP32KiCADOnshapePlatformIO
SchoolHighlightLUMEN voice assistant

LUMEN

A voice-controlled smart-room assistant on an ESP32, with Whisper and a DeepSeek LLM via OpenRouter turning speech into one JSON command over MQTT.

ESP32PythonDockerVS Code