Skip to main content

v2.x Python language bindings for ev3dev

Project description Documentation Status Chat at

A Python3 library implementing an interface for ev3dev devices, letting you control motors, sensors, hardware buttons, LCD displays and more from Python code.

If you haven’t written code in Python before, you’ll need to learn the language before you can use this library.

Getting Started

This library runs on ev3dev. Before continuing, make sure that you have set up your EV3 or other ev3dev device as explained in the ev3dev Getting Started guide. Make sure you have an ev3dev-stretch version greater than 2.2.0. You can check the kernel version by selecting “About” in Brickman and scrolling down to the “kernel version”. If you don’t have a compatible version, upgrade the kernel before continuing.


To start out, you’ll need a way to work with Python. We recommend the ev3dev Visual Studio Code extension. If you’re interested in using that, check out our Python + VSCode introduction tutorial and then come back once you have that set up.

Otherwise, you can can work with files via an SSH connection with an editor such as nano, use the Python interactive REPL (type python3), or roll your own solution. If you don’t know how to do that, you are probably better off choosing the recommended option above.

The template for a Python script

Every Python program should have a few basic parts. Use this template to get started:

#!/usr/bin/env python3
from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, SpeedPercent, MoveTank
from ev3dev2.sensor import INPUT_1
from import TouchSensor
from ev3dev2.led import Leds

# TODO: Add code here

The first line should be included in every Python program you write for ev3dev. It allows you to run this program from Brickman, the graphical menu that you see on the device screen. The other lines are import statements which give you access to the library functionality. You will need to add additional classes to the import list if you want to use other types of devices or additional utilities.

You should use the .py extension for your file, e.g.

If you encounter an error such as /usr/bin/env: 'python3\r': No such file or directory, you must switch your editor’s “line endings” setting for the file from “CRLF” to just “LF”. This is usually in the status bar at the bottom. For help, see our FAQ page.

Important: Make your script executable (non-Visual Studio Code only)

To be able to run your Python file, your program must be executable. If you are using the ev3dev Visual Studio Code extension, you can skip this step, as it will be automatically performed when you download your code to the brick.

To mark a program as executable from the command line (often an SSH session), run chmod +x

You can now run via the Brickman File Browser or you can run it from the command line by preceding the file name with ./: ./

Controlling the LEDs with a touch sensor

This code will turn the LEDs red whenever the touch sensor is pressed, and back to green when it’s released. Plug a touch sensor into any sensor port before trying this out.

ts = TouchSensor()
leds = Leds()

print("Press the touch sensor to change the LED color!")

while True:
    if ts.is_pressed:
        leds.set_color("LEFT", "GREEN")
        leds.set_color("RIGHT", "GREEN")
        leds.set_color("LEFT", "RED")
        leds.set_color("RIGHT", "RED")

If you’d like to use a sensor on a specific port, specify the port like this:

ts = TouchSensor(INPUT_1)

Running a single motor

This will run a LEGO Large Motor at 75% of maximum speed for 5 rotations.

m = LargeMotor(OUTPUT_A)
m.on_for_rotations(SpeedPercent(75), 5)

You can also run a motor for a number of degrees, an amount of time, or simply start it and let it run until you tell it to stop. Additionally, other units are also available. See the following pages for more information:

Driving with two motors

The simplest drive control style is with the MoveTank class:

tank_drive = MoveTank(OUTPUT_A, OUTPUT_B)

# drive in a turn for 5 rotations of the outer motor
# the first two parameters can be unit classes or percentages.
tank_drive.on_for_rotations(SpeedPercent(50), SpeedPercent(75), 10)

# drive in a different turn for 3 seconds
tank_drive.on_for_seconds(SpeedPercent(60), SpeedPercent(30), 3)

There are also MoveSteering and MoveJoystick classes which provide different styles of control. See the following pages for more information:

Using text-to-speech

If you want to make your robot speak, you can use the Sound.speak method:

from ev3dev2.sound import Sound

sound = Sound()
sound.speak('Welcome to the E V 3 dev project!')

Make sure to check out the User Resources section for more detailed information on these features and many others.

User Resources

Library Documentation
Class documentation for this library can be found on our Read the Docs page . You can always go there to get information on how you can use this library’s functionality.
Demo Code
There are several demo programs that you can run to get acquainted with this language binding. The programs are available at
One of our community members, @ndward, has put together a great website with detailed guides on using this library which are targeted at beginners. If you are just getting started with programming, we highly recommend that you check it out at!
Frequently-Asked Questions
Experiencing an odd error or unsure of how to do something that seems simple? Check our our FAQ to see if there’s an existing answer. is a great resource for finding guides and tutorials on using ev3dev, straight from the maintainers.
If you are having trouble using this library, please open an issue at our Issues tracker so that we can help you. When opening an issue, make sure to include as much information as possible about what you are trying to do and what you have tried. The issue template is in place to guide you through this process.

Upgrading this Library

You can upgrade this library from the command line as follows. Make sure to type the password (the default is maker) when prompted.

sudo apt-get update
sudo apt-get install --only-upgrade python3-ev3dev2

Developer Resources

Python Package Index
The Python language has a package repository where you can find libraries that others have written, including the latest version of this package.

Python 2.x and Python 3.x Compatibility

Some versions of the ev3dev distribution come with both Python 2.x and Python 3.x installed but this library is compatible only with Python 3.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for python-ev3dev2, version 2.0.0b1
Filename, size File type Python version Upload date Hashes
Filename, size python-ev3dev2-2.0.0b1.tar.gz (58.0 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page