Rotato

Weaponized Plastic Robot

Rotato
Robot Warrior. Mildly dangerous immensely fun
Rotato is an open-source combat-style robot and you can build by yourself or join me in one of my workshops to get some guidance. It has two drive wheels and a blazing fast rotating weapon, all controlled from your browser. The brain is an ESP32-C3 Super Mini running custom C++ firmware. Power it on, connect to its WiFi hotspot, and start a fight!

Overview Photo

How it works

This is very much up to you and your creativity, but out of the box, Rotato creates its own WiFi network so you can open a browser and a virtual joystick drives the wheels while a weapon button spins the weapon motor. A physical safety switch kills the weapon instantly if triggered. Battery voltage, weapon state, and firmware version all broadcast live to the UI.
UI Photo

Hardware

The core is a custom PCB designed around a ESP32-C3 Super Mini loaded with with WiFi, Bluetooth, and enough GPIO to drive three ESCs, read a battery, and chirp a buzzer.

All three motors (left wheel, right wheel, weapon) use the standard RC ESC signal: 50 Hz, 1000–2000 µs pulse width. A resistor divider on GPIO0 monitors the 2S LiPo in real time. A physical safety switch on GPIO5 provides a hardware weapon interlock that the software cannot override.

A few highlights:

  • 2S LiPo (6.0V–8.4V), battery % shown in the UI at all times
  • Safety switch — weapon is physically blocked until it's safe
  • Passive buzzer — startup beep, weapon-on/off tones, error sounds
  • Expansion pin (GPIO6/J9) — free for whatever you want to add
    PCB Photo

Firmware

The firmware is written in C++ and built with PlatformIO. It uses ESPAsyncWebServer for the browser controller (WebSocket + JSON), NimBLE-Arduino for Bluetooth, and ArduinoJson v7 for message parsing. All hardware settings — every GPIO number, timing value, and feature flag — live in one file: src/config.h.

The architecture is intentionally modular. Hardware drivers (MotorController, BuzzerController, BatteryMonitor, SafetySwitch) never import the connectivity layer (WiFiManager, WebServerManager, BLEManager). Everything talks through registered callbacks, wired together in main.cpp. Swapping hardware or adding a new control channel is a contained change.

Check out the GitHub repo

Web Controller

The entire UI is a single HTML file served directly from the robot's filesystem over WiFi. This may not sound elegant, but we are working with a fairly limited amount of memory here. It runs in any modern browser and includes:

  • Virtual joystick for real-time arcade drive control
  • Weapon button with armed/disarmed status indicator
  • Live battery gauge — percentage and voltage
  • Settings panel — rename the robot, join your WiFi, calibrate battery, tune drive range, adjust weapon ramp speed

The robot can also join an existing WiFi network; useful in a workshop where everyone wants to connect at once. If the connection fails, it automatically falls back to its own hotspot so you're never stuck without control.

Build your own

Rotato was designed to be a starting point into your robot fighting experience. The firmware is open source and built to be hacked; swap motors, change the weapon, add sensors, change the control scheme... Make it Democratic or make it move based on the current price of Bitcoin if you like

Want to join a Workshop? Check out the dates

Technology Stack

kicad

esp32

platformio

WiFi

hardware

Interested in Learning More?

Check out more of my work or get in touch to discuss your project.

View All Projects