okalachev/flix

Making an ESP32-based quadcopter from scratch

What it is

Flix (short for flight + X) is an open-source quadcopter drone built around an ESP32 microcontroller. It's designed from scratch — both the hardware and the software — and is meant for education and research rather than commercial use.

Current status

  • Version 1.1 exists with a 3D-printed frame; an earlier Version 0 also exists.
  • The project actually flies — demo videos are linked in the README.
  • A dedicated PCB (called Flix2) is in development.
  • A position-control feature (automatic holding of a position) is also in development, with a demo using an overhead camera.

Key features

  • Built from general-purpose, off-the-shelf components (ESP32 board, IMU sensor, brushed motors, MOSFETs, etc.).
  • Simple, clean firmware written in Arduino — under 2,000 lines of code.
  • Communicates using the MAVLink protocol over Wi-Fi or ESP-NOW (a short-range wireless protocol).
  • Can be controlled with a USB gamepad, a remote control, or a smartphone.
  • Includes a wireless command-line interface for configuration and analysis.
  • Has a precise simulator built with Gazebo that runs the same Arduino code as the real drone.
  • Provides a Python library for scripting and automatic flights.
  • A textbook on flight control theory and practice is in development (at quadcopter.dev).

Hardware

  • Main board: ESP32 Mini (ESP32-S3 and ESP32-C3 boards also supported).
  • Sensor: GY-91 (MPU-9265) or other MPU-9250/MPU-6500 boards, ICM20948V2, or GY-521 (MPU-6050).
  • Motors: 4× 8520 3.7V brushed motors.
  • Propellers: 55 mm or 65 mm.
  • Switching: 4× MOSFET transistors (UMW 100N03A or similar — the README warns against other manufacturers).
  • Battery: 3.7V Li-Po, recommended 25C with 1000 mAh or more.
  • Frame: 3D-printed (STL and STEP files provided), with recommended print settings (0.2 mm layer, 0.4 mm line, 100% infill).
  • Controller options: CC2500-based transmitter (e.g., BetaFPV LiteRadio), a two-stick gamepad over Wi-Fi, or other options.
  • Optional parts: RC receiver with SBUS interface, boost converter for more stable power, battery voltage divider.

Assembly & wiring

  • The README provides a simplified connection diagram and a motor connection scheme (MOSFET wiring).
  • It includes a pin-by-pin table for connecting the IMU board to the ESP32 (via VSPI) and for connecting the four motors to specific GPIO pins.
  • An optional RC receiver connects to UART2; an optional battery voltage divider connects to an ADC1 pin.
  • Required tools: 3D printer, soldering iron, solder wire, screwdrivers, multimeter.

Software & simulation

  • The simulator runs the original Arduino code inside Gazebo, so behavior in simulation matches the real drone.
  • A Python library (in tools/pyflix) enables scripting and automated flights.
  • The README links to documentation articles: assembly instructions, usage (build/setup/flight), simulation guide, Python library docs, firmware architecture overview, troubleshooting, and log analysis.

Community & resources

  • Official Telegram channel (in Russian) tracking development: t.me/opensourcequadcopter.
  • Official Telegram chat (English/Russian): t.me/opensourcequadcopterchat.
  • A detailed Habr article (in Russian) about the drone's development.
  • A user builds gallery is maintained in the docs.

Important caveats

  • This is a DIY project — the README explicitly says it's not easy to assemble and set up.
  • It's provided "as is" without warranties; the author is not responsible for damage, injury, or loss.
  • Some components have strict requirements (e.g., exact 3.7V motors, specific MOSFET manufacturer, matching propeller hole diameter).
  • The barometer on the IMU board is not used for now.
  • The frame is optimized for the GY-91 board; other IMU boards may require modifying the mount hole positions.

How to get started

  1. Read the assembly instructions and usage docs linked in the README.
  2. Gather the listed components (or use the simulator first).
  3. 3D-print the frame parts.
  4. Solder and wire per the schematics.
  5. Flash the Arduino firmware and follow the setup guide.
  6. Optionally use the Python library for scripting flights.

Related

  • Project
  • Project
  • Project
  • Project