Driving an ESC/Brushless-Motor Using Raspberry Pi




Nothing much to talk about - Still in school.

Hey there!!! In this instructable I will show you how to program an ESC and drive a brushless-motor in a desired speed using Raspberry Pi 3.

I recommend you to READ THE WHOLE INSTRUCTABLE BEFORE MAKING IT even though I'm typing load of crap here. I am making this instructable because I didn't find any tutorial for this topic, maybe because the ones who already knew how to do it were too lazy and selfish to help others. Also, make sure you are going through precautions at every step, its kinda important if you don't wanna screw up your life.

An Electronic Speed Controller or simply called ESC is an electronic circuit which is basically used to control a brushless-motor. It takes a signal from a micro-controller and convert it into three-phase output of limited voltage. So, It runs a brushless-motor by sending a sequence of output signals to it.

We can say that it is like a servo which also takes input in pulsing signals so we will use Pi's Pulse Width Modulation (PWM) system.

To use PWM in Raspberry Pi, we need to initialize PIGPIO library in daemon(which means running the process in background) which sends DMA timed pulses from Python. Then we will calibrate and arm the ESC and start giving some speed to the motor.

Just to make it clear, Arming is like telling the ESC "dude, you're good to go, start the motor now." just like you have to pull the barrel of a pistol and put the safety down before shooting. An ESC has a lot of modes but for the sake of this instructable we will not go in details but focus only in driving the motor.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Precautions

1. Make sure you have that PIGPIO library installed, if not... you know what to do.

2.Don't be stupid like me and attach the prop adapter or the propeller to the motor, something bad can happen like really bad.

3. Do not hold the motor while its in motion, it will fly you off if you're too light or it could burn you down to ashes if you're too heavy which you probably are because brushless-motors are nasty beasts.

4. You're smart right.. I don't think I have to tell you about the result if you have bad connections. As it is said..

"Even the smallest things can trigger an avalanche."

5. Wrong battery polarity and you're done with your ESC.

6. WATCH FOR THE RED WIRE OF THE ESC, DO NOT USE IT.... consider it as your arch-nemesis.

7. Make sure powering your pi good, isn't that obvious.

Step 2: Required Items

Raspberry Pi (to control your ESC)

Brushless-Motor (.....obviously)

Electronic Speed Controller [ESC] (.....obviously)

Computer (if you are using Pi in headless mode)

Power Bank (to use Pi portably)

Li-Po Battery (.....obviously)

M-F wires (.....obviously)

Step 3: Connections

Connect the parts like the above picture. Yes! That RED WIRE OF THE ESC HAS NO FUNCTION (at least in this project). IT CAN BURN YOUR PI'S PROCESSOR, so watch out for that or get yelled by your mom !

You can connect the Motor wires however you want with the ESC i.e you can connect red wire to the third blue wire and black wire with second blue wire and so on. IF YOU WANT TO REVERSE THE ROTATION OF THE MOTOR, JUST SWAP THE RED WIRE WITH THE YELLOW WIRE.

DO NOT CONNECT THE BATTERY YET, you will do it while running the program. There's a reason behind everything, there's a reason that you are here looking at this screen, there's a reason that you're still alive.. and all that stuff.

I made these fritzing parts just for....... myself but you know "sharing is caring", download it from here :-

Step 4: Programming With Python

Download that python program below and execute it in your pi AFTER you have finished with the connections.

Watch the video for first time run, if you're confused..

If this program looks confusing to you actually I'm a pro you know but if it looks as if a noob had written this program, I'm learning ok...

When you will execute it, the program will give you five options like this :

calibrate OR manual OR control OR arm OR stop

You have to enter the option by typing the exact word. You can also switch among functions anytime.

The function of these options goes like these :-


This function is for first time use or later if you see some throttle problems. Don't worry if you've done it again.

This option will automatically calibrate your motor's throttle, arm it and then switches to control function. The calibrate procedure goes as follows as in manual mode :-


Connect the battery

You will hear two beeps

Wait for a tune


Wait for some time


Wait for some time


Wait for a sec

ARMED (>1000, to get motion)


You can use this function if you want to control or program your ESC manually.


This function lets you control the speed of motor using 'a','d','q' and 'e'. This function requires arming of the ESC first.


This function will let you arm your ESC automatically and will switch to control function.

The arming procedure goes as follows:-


Wait for a sec..


Wait for a sec..

ARMED (>1000, to get motion)


This function is to stop the ESC and the program. Suppose, you screw up something you can execute this function and stop everything.

Step 5: Go Beyond

"Once we accept our limits, we go beyond them." - Albert Einstein

Once you're done with your ESC and mastered it (kind of), its your turn to make your project out of it.

There are things I gotta say that :-

I made this instructable just for fun and with heart.

I do not intend to violate someone with my words.

I will not be responsible for any damage done to your parts.

Try to make your own program and experiment, it will give you more knowledge.

Comment below for any issues or problems you found regarding this instructable, I'm here to help.

More Instructables coming soon.... I guess?

Microcontroller Contest 2017

Participated in the
Microcontroller Contest 2017

2 People Made This Project!


  • Made with Math Contest

    Made with Math Contest
  • Multi-Discipline Contest

    Multi-Discipline Contest
  • Robotics Contest

    Robotics Contest

26 Discussions


3 months ago

perfect, you explained that bit of BL motors i couldn't figure out, you have to CALIBRATE the esc first, then pulse it, life saver.

i am not python but now i know the procedure i can do this in nodejs/angular/react, thanks.

1) Indent Format Error: file->open->esc.py in geanie and select all text, format->tabify region and file->save.
2) run from the command line rather than geanie F5 which moans about stuff use: $ python ESC.py
3) pigpio is usually already running so will generate an error = 'Can't initialise pigpio library' you can comment out the os.system line np

1 reply

Reply 7 weeks ago

past days I have been trying to use node js with pigpio.
But I can't get anything to happen when trying to calibrate. (( My ESC is calibrated by holding down it's button until led on it turns red (works when I do it with rc reciver) and then it blinks once do the calibration for forward and so on. )) For some reason the ESC gets stuck at the (first) red light when turning it on for calibration.

Do you have any suggestion or an example how you did it? :)


Question 7 weeks ago

Is there an updated version of the python file for python 3? I'm trying to run the current file using Python 3.5.3 and i'm getting a lot of errors.


Question 6 months ago on Step 5

Hello sir,
i made same as you
But at time of connection of 4 ESC at a time program can't work
How i made program for 4 ESC runnung at a time

2 answers

Reply 5 months ago

I am Going to make drone that can operate through Laptop i dont Know Proper Code For Forward Backward ..
Can u plz Help me


6 months ago

the code work perfectly for me, thanks. However, how do you get the ESC, the brushless motor and that Li-Po battery on your Fritzing library, did you have to draw them yourself?


6 months ago

if i want to start 4 motors simultaneously so is that above code is same or any changes in code ?? if yes so what is change ?


8 months ago on Step 5

Ca marche super bien ! :) Merci pour le code.


Question 10 months ago

How do you connect 4 ESC to raspberry pi


Question 1 year ago

So I'm having trouble with this

Everytime I run the program, it always says NameError: name 'calibrate' is not defined. I keep trying to fix it but it still won't work. Can someone help me with this?

Tariq sha

1 year ago

sir is there any method to control multiple brush-less DC motors with single ESC
if not then how will we connect multiple ESC to raspberry pi

1 reply
LovemorTariq sha

Reply 1 year ago

If you connect multiple esc to seperate GPIO pins it should work fine i guess


Question 1 year ago

Good afternoon, i have a problem, when i tried to calibrate the motor it does not make the falling tone after i conected to the battery, i have intalled the library an check if everithig its ok, if anyone know the solution of this problem please tell me the solution, thanks!!!


1 year ago

I am wanting to run my ESC in reverse. Do you know how to do that?


Question 1 year ago on Step 4

I tried the commands just as you wrote,
when I got to calibrate the engine, the engine did not stop making sound and strange sounds (like combo sounds-bip and bipbip),
you know why? and how to fix this?


1 year ago

I tried the commands just as you wrote,
when I got to calibrate the engine, the engine did not stop making sound and strange sounds (like combo sounds-bip and bipbip),
you know why? and how to fix this?


2 years ago

Thank you for the code, it work very well. But on some line it contain condentation of mixed spaces and tabs and that generate python errors und the code break. After i corrected it, the code worked perfectly. Thank you again..

1 reply

Reply 1 year ago

Did you run the quadcopter using raspi3 by connecting all the 4 esc to the gpio pins?