450mm ESP32 Quadcopter Success

Hi ArduPilot Community! :helicopter:

I’m excited to share my SUCCESSFUL ESP32-based ArduPilot quadcopter build
from Indore, India! After following the amazing work by @Leon90 and
@Juergen-Fahlbusch, I’ve achieved stable flight in both STABILIZE and
ALTITUDE HOLD modes!

════════════════════════════════════════════════════════════

:bullseye: PROJECT OVERVIEW

I used pre compiled file from this github repository GitHub - Jehanzeb1973/ESP32-ArduPilot: Precompiled Ardupilot Code for ESP32 to built this project . I am also wokring on my own firmawre to contribute to the ESP32 ArduPilot community and prove that affordable, reliable flight controllers can be built using
ESP32 in India.

════════════════════════════════════════════════════════════

:hammer_and_wrench: HARDWARE SPECIFICATIONS

Flight Controller:
β”œβ”€ Microcontroller: ESP32 (38-pin version)
β”œβ”€ IMU/Sensors: GY-91 Module
β”‚ β”œβ”€ MPU9250 (9-axis IMU)
β”‚ β”œβ”€ BMP280 (Barometer)
β”‚ └─ I2C Interface
└─ Custom board/connections

Frame & Propulsion:
Frame Size: 450mm (diagonal)
Motors: 960kv
ESCs: 40 ampere esc
Propellers: 10inch
Battery: 3s lipo battery

Additional Components:
RC Receiver: PPM

════════════════════════════════════════════════════════════

:white_check_mark: ACHIEVEMENTS

Flight Modes TESTED & WORKING:
βœ“ STABILIZE mode - Perfectly stable flight
βœ“ ALTITUDE HOLD mode - Holds altitude accurately
βœ“ Manual takeoff and landing
βœ“ Responsive to RC inputs
βœ“ No significant oscillations

Video Proof:
Flight demonstration: https://youtube.com/shorts/SoIsacome40?si=yPlWurPOsYmbSRn4

════════════════════════════════════════════════════════════

:laptop: SOFTWARE DETAILS

ArduPilot Configuration:
β”œβ”€ Firmware: ArduCopter in esp32
β”œβ”€ Board Target: ESP32
β”œβ”€ Ground Station: Mission Planner
└─ Communication: WiFi/Serial

Key Settings:
β”œβ”€ Frame Type: Quad X
β”œβ”€ IMU: MPU9250 (via GY-91)
β”œβ”€ Baro: BMP280 (via GY-91)
└─ [Any other important params]

════════════════════════════════════════════════════════════

:wrench: BUILD PROCESS & CHALLENGES

Timeline:
DAY1: Hardware assembly and connections
DAY2: Initial testing and calibration
DAY3: PID tuning and flight testing
DAY6: SUCCESS! :airplane:

Major Challenges Overcome:

  1. GY-91 I2C communication optimization
  2. PID tuning for 450mm frame

════════════════════════════════════════════════════════════

:bar_chart: PERFORMANCE OBSERVATIONS

Flight Characteristics:
Stability: Excellent
Altitude Hold Accuracy: Β±0.5m (estimated)
Response Time: Quick and precise
Battery Life: 20 minutes
Overall: Very satisfied!

Compared to Commercial FCs:
The ESP32 performed surprisingly well! The altitude hold is comparable
to commercial flight controllers, and the cost is a fraction of the price.

════════════════════════════════════════════════════════════

:light_bulb: KEY LEARNINGS & TIPS

For Future Builders:

  1. GY-91 Module Works Great!

    • Contains both IMU (MPU9250) and Barometer (BMP280)
    • Single I2C connection - very convenient
    • Affordable and readily available in India
  2. ESP32 38-Pin Version

    • Sufficient GPIO pins for quad setup
    • Built-in WiFi for easy configuration
    • Cost: ~800 rupees
  3. 450mm Frame is Ideal

    • Good size for testing and learning
    • Stable in light wind
    • Not too heavy, not too light
  4. PID Tuning is Critical

    • Start conservative
    • Tune in small increments
    • Test in calm weather first

════════════════════════════════════════════════════════════

:globe_showing_europe_africa: INDIA-SPECIFIC NOTES

Component Sourcing:
β”œβ”€ ESP32 38-pin: Available on Amazon/Local electronics shops
β”œβ”€ GY-91 Module: β‚Ή400-600 (Amazon/Robu.in)
β”œβ”€ Frame: Local RC hobby shops / online
└─ Total Cost: Significantly cheaper than Pixhawk!

This proves that high-quality drone development is possible in India
with locally available components!

════════════════════════════════════════════════════════════

:movie_camera: VIDEO & DOCUMENTATION

Flight Video: https://youtube.com/shorts/SoIsacome40?si=yPlWurPOsYmbSRn4

════════════════════════════════════════════════════════════

:folded_hands: ACKNOWLEDGMENTS

Special thanks to:
@Leon90 - For pioneering ESP32 ArduPilot drones (Firefly project)
@Juergen-Fahlbusch - For detailed documentation and support
EPITA SEAL Team - For the original ESP32 port research
ArduPilot Community - For this amazing open-source project
All forum members who share their knowledge freely

════════════════════════════════════════════════════════════

:red_question_mark: QUESTIONS FOR COMMUNITY

  1. What other flight modes should I test next?
  2. Any recommendations for GPS integration?
  3. Tips for auto missions with ESP32?
  4. Should I try Position Hold mode next?

════════════════════════════════════════════════════════════

:rocket: NEXT STEPS

Short Term:
β”œβ”€ Add GPS module
β”œβ”€ Test LOITER mode
β”œβ”€ Optimize PID tuning further
└─ More flight time testing

Long Term:
β”œβ”€ Autonomous missions
β”œβ”€ FPV integration
β”œβ”€ Advanced navigation features
└─ Build documentation for Indian community

════════════════════════════════════════════════════════════

:loudspeaker: HAPPY TO HELP!

I’m documenting everything and happy to help other Indian builders
who want to build ESP32 ArduPilot drones. Feel free to ask questions!

This project proves that ESP32 is a VIABLE platform for ArduPilot,
especially for budget-conscious builders and educational purposes.

Looking forward to contributing more to this amazing community! :raising_hands:

Best regards,
Aaditya bharti
India

════════════════════════════════════════════════════════════

esp32 ardupilot #MadeInIndia #OpenSource #DroneBuilding

4 Likes

Good work - flight looks quite nice too.
It will be interesting to see how Autotune goes once you’ve got a GPS unit working.

Feel free to send a .bin log file if we can help with anything.

1 Like

Wow, looks realy good.
I am using a Holybro M10 mini GPS & compass module. It can be easily connected to one free UART of the ESP32 for GPS and the I2C for compass.

1 Like

Or for budget, the cheap UBlox 6M works decent enough.

If I had known an ESP32 based drone would be this reliable, I would have made one for my project instead of spending on a Pixhawk. Nice work

1 Like

Thanks for your suggestion. Actually I tried but

it does’nt worked.

Can you please say what doesn’t work means?

Can you also add the parts list for this particular build?

On which Ardupilot FW version is your ESP32 FW based?
On which UART Baudrate you tried your UBLOX 6M. This module is not able to run on 234000 Baud.

I am using 1.3.83 mission planner configurator version and using firmware bin file from this repository GitHub - Jehanzeb1973/ESP32-ArduPilot: Precompiled Ardupilot Code for ESP32 and when I was using ublox neo 6m gps module esp fc, it was not connecting with any satelite.

So you are not compiling your own ESP32 Firmware only using this precompiled version?
As far as I have seen you don’t have a SD card so you don’t have the possibility to create log files.
What shows up in Mission Planer HUD regarding the GPS?
NO GPS or NO FIX?
Are there more messages in the message window during startup of the FC?
Can you show all this messages?

I am getting NO FIX error in MP. tommorow I will share you the massages.

Did you tried it outside and long enough?
It takes several minutes until first fix from cold start.

yes I tried in open ground and wait for satelite connection around half hour but does’nt worked.

when you tested the gps how much time it taken.

Ok, half an hour on open sky should be normally enough time. I get a GPS fix within 15 min if it is cold start with unknown time and pos.
Did you get a correct time from the module?
Are you able to test it seperate maybe with a USB 2 TTL UART converter?

If you have set your parameters right (which I think you did since the message is NO FIX), my bet is that you got interchanged TX/RX cables. Please verify this. Even after verifying, try swapping them anyway.

If this fails, try Ublox’s software for configuring their GPS and see if you receive any information.

If the FC shows NO FIX than the FC is receiving some information from GPS. In this case TX/RX must be correct.
If the FC shows NO GPS than the FC is not getting correct information from GPS. This can have several reasons. One could be indeed a wrong wiring.

Thanks for the clarification. I had a similar experience but I guess I must have seen the No GPS message when I got the UART lines interchanged. Sorry for the misleading information @Ab_create

Hello Sir,

I think there are only two UARTs available:

  • UART0 β†’ TX0 (GPIO1), RX0 (GPIO3)

  • UART1 β†’ TX1 (GPIO17), RX1 (GPIO16)

GPIO1 and GPIO3 are used for serial communication, but GPIO16 and GPIO17 are currently configured as motor output pins. Due to this pin conflict, my GPS module is not connecting properly.

If you have a firmware .bin file with a different motor pin configuration (so that UART pins can be used for GPS), please share it with me at this email address: bhartiaaditya741@gmail.com.

Thank you for your support.

As far as I know, the 6M supports UART, I2C and SPI. So maybe try I2C or SPI and connect to the same bus as the IMU, baro or even the spare I2C interface you have. You may have to configure the protocol in the u-center software.

Also may I ask why you configured the secondary UART pins as motor outputs?