Build a Flipper Zero-Controlled Robot Rover: Motor Driver, Servos, and a Custom Control App
Most Flipper Zero GPIO projects use the pins to read something — a sensor, an environmental add-on, a signal. This build flips that around: the Flipper's GPIO header drives a small robot rover directly, with a custom app on the Flipper's screen acting as the remote control. It's a genuinely different kind of Flipper project than the sub-GHz, NFC, and BadUSB material this site usually covers for the device, and a solid intro to writing a real interactive Flipper app rather than just flashing someone else's firmware.
Why the Flipper as a Robot Controller
The Flipper Zero's STM32WB55 has a real GPIO bank (see the site's GPIO pinout reference for the full pin map), a directional D-pad and OK button built into its case, and a screen that can render live status — battery, motor state, sensor readings if you add them later. That combination makes it a surprisingly capable standalone robot controller: no phone app, no separate remote, just the Flipper itself running a purpose-built .fap application. This is a different use of the GPIO header than the environmental sensor add-on covered elsewhere on this site, which reads I2C sensor data — here the Flipper is the one issuing commands outward to motor drivers and servos.
Chassis and Drivetrain
Keep the mechanical side simple for a first build: a two-motor differential-drive chassis (skid steering, like a tank) is far easier to control from a handful of GPIO pins than anything with real steering geometry. A cheap acrylic or 3D-printed two-wheel-drive chassis kit with a caster wheel at the back, driven by a pair of TT gear motors, is the standard starting point and keeps the mechanical build to under an hour.
Wiring: Flipper GPIO to Motor Driver
The Flipper's GPIO pins output 3.3V logic and are not rated to drive motors directly — you need a motor driver IC or module in between to handle the actual motor current. An L298N dual H-bridge module is the standard beginner choice: it's inexpensive, tolerant of wiring mistakes, and needs only four logic pins plus enable lines from the Flipper.
Flipper GPIO PinL298N PinFunction PC0IN1Left motor direction A PC1IN2Left motor direction B PC3IN3Right motor direction A PB2IN4Right motor direction B PA7ENA (PWM)Left motor speed PA6ENB (PWM)Right motor speed GNDGNDCommon ground — do this first, alwaysThe L298N's motor supply (typically 6-12V from a separate battery pack) is electrically isolated from its logic side by the module's onboard regulator, but the grounds still need to be tied together for the logic signals to reference correctly. Power the L298N's motor rail from a dedicated battery pack — never from the Flipper's own battery or its 3.3V/5V header pins, which aren't meant to source motor current and can brown out the Flipper's own MCU under load.
If you want the rover to pan a camera, sensor, or claw, add a small SG90 hobby servo on a spare GPIO pin (e.g. PA4) — servos take a standard PWM control signal directly, no driver IC needed, just make sure the servo's own power comes from the battery pack rather than the Flipper.
Writing the Custom App
This is the more involved part, and it's worth doing properly rather than hacking GPIO writes into an existing example app. Set up the ufbt (micro Flipper Build Tool) toolchain first — the site's guide on building your first custom Flipper app covers that setup end to end.
- Scaffold a new app with ufbt create, giving it a GUI-enabled app template rather than a headless one, since you want the D-pad and screen active.
- In the app's GPIO init, configure the relevant pins as GpioModeOutputPushPull for the direction pins, and set up hardware PWM (via the Flipper's furi_hal_pwm API) on the two enable pins for speed control rather than bit-banging PWM in software, which will stutter under the GUI event loop.
- Register a callback on the D-pad input events (InputKeyUp, InputKeyDown, InputKeyLeft, InputKeyRight, InputKeyOk) and map each to a drive state: forward drives both motors same direction, left/right pivot the motors in opposite directions for an in-place turn, OK as a stop/brake or horn/light toggle if you've added one.
- Use the Flipper's canvas drawing API to render a simple status screen — current direction arrow, a battery percentage readout, and PWM duty cycle as a rough speed gauge — updated in the main view draw callback.
- Add a dead-man's switch: if no D-pad input is received for ~300ms, force the motors to stop. Without this, a Flipper that locks up mid-app or gets pulled out of Bluetooth/USB range with a stuck key state can leave the rover driving into a wall (or off a table) indefinitely.
Power Budget
Plan for two separate power domains from the start: the Flipper runs on its own internal battery and should never be tapped for motor current, and the rover's motors/servos run from their own 2S LiPo or 4xAA pack feeding the L298N's motor supply pins. A small buck converter off the same motor pack can also power the L298N's 5V logic rail if you'd rather not rely on its onboard linear regulator, which gets warm under sustained load.
Extending It
Once the base drive-by-GPIO loop works, this pairs naturally with other Flipper capabilities already covered on this site: log sub-GHz signal strength from the frequency analyzer while driving around to build a signal-strength heatmap of your workshop, or mount an NFC reader on the front to have the rover log tags as it passes over them. Both reuse the same custom-app skeleton, just with different GPIO/peripheral wiring layered onto the drive code above.
Safety Note
Small DC gear motors and hobby servos pose no meaningful shock hazard, but do keep fingers clear of exposed drivetrain gears and wheels while testing with the chassis powered — differential-drive rovers can pivot unexpectedly hard when direction pins are miswired, and a stalled motor under a finger can pinch harder than it looks like it should for a "toy" motor.
This is a good project for getting past copy-pasted Flipper apps and into writing something that actually reads input, drives hardware, and renders a real UI — skills that transfer directly to any other custom Flipper app idea you have down the line.
Related Guides
- Building Your First Custom Flipper Zero App: ufbt Setup, GUI, and GPIO
- Build a Flipper Zero GPIO Environmental Sensor Add-On
- GPIO Basics on Flipper Zero — Wiring and Using Pins
- Flipper Zero GPIO Pinout and Hardware Expansion: UART, I2C, ADC, 1-Wire, and Sensor Wiring
- Flipper Zero — GPIO and Pin Reference
- How to Control Motors with Arduino and ESP32: Stepper, DC, and Servo Drivers
- How to Use the Flipper Zero GPIO for Hardware Hacking: UART, SPI, I2C, and Debugging
- Flipper Zero GPIO: Reading Sensors and Controlling LEDs