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
- Read the assembly instructions and usage docs linked in the README.
- Gather the listed components (or use the simulator first).
- 3D-print the frame parts.
- Solder and wire per the schematics.
- Flash the Arduino firmware and follow the setup guide.
- Optionally use the Python library for scripting flights.
Related
- Project
- Project
- Project
- Project