Introduction: Driving an ESC/Brushless-Motor Using Raspberry Pi

About: 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.

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