A simple interface to GPIO devices with Raspberry Pi, developed and maintained by Ben Nuttall and Dave Jones.
Component interfaces are provided to allow a frictionless way to get started with physical computing:
from gpiozero import LED
from time import sleep
led = LED(17)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
With very little code, you can quickly get going connecting your components together:
from gpiozero import LED, Button
from signal import pause
led = LED(17)
button = Button(3)
button.when_pressed = led.on
button.when_released = led.off
pause()
You can advance to using the declarative paradigm along with provided to describe the behaviour of devices and their interactions:
from gpiozero import OutputDevice, MotionSensor, LightSensor
from gpiozero.tools import booleanized, all_values
from signal import pause
garden = OutputDevice(17)
motion = MotionSensor(4)
light = LightSensor(5)
garden.source = all_values(booleanized(light, 0, 0.1), motion)
pause()
See the chapter on Source/Values for more information.
The library includes interfaces to many simple everyday components, as well as some more complex things like sensors, analogue-to-digital converters, full colour LEDs, robotics kits and more. See the Recipes chapter of the documentation for ideas on how to get started.
GPIO Zero builds on a number of underlying pin libraries, including RPi.GPIO and pigpio, each with their own benefits. You can select a particular pin library to be used, either for the whole script or per-device, according to your needs. See the section on changing the pin factory.
A "mock pin" interface is also provided for testing purposes. Read more about this in the section on mock pins.
GPIO Zero is installed by default in the Raspberry Pi OS desktop image, available from raspberrypi.org. To install on Raspberry Pi OS Lite or other operating systems, including for PCs using remote GPIO, see the Installing chapter.
Comprehensive documentation is available at https://gpiozero.readthedocs.io/. Please refer to the Contributing and Development chapters in the documentation for information on contributing to the project.
If you have a feature request or bug report, please open an issue on GitHub. If you have a question or need help, this may be better suited to our GitHub discussion board, the Raspberry Pi Stack Exchange or the Raspberry Pi Forums.
Warning
GPIO Zero 1.6.x is the last to support Python 2. GPIO Zero 2.x will support Python 3 only.
- Alex Chan
- Alex Eames
- Andrew Scheller
- Barry Byford
- Carl Monk
- Claire Pollard
- Clare Macrae
- Dan Jackson
- Daniele Procida
- damosurfer
- David Glaude
- Delcio Torres
- Edward Betts
- Fatih Sarhan
- G.S.
- Ian Harcombe
- Jack Wearden
- Jeevan M R
- Josh Thorpe
- Kyle Morgan
- Linus Groh
- Mahallon
- Maksim Levental
- Martchus
- Martin O'Hanlon
- Mike Kazantsev
- Paulo Mateus
- Phil Howard
- Philippe Muller
- Rick Ansell
- Robert Erdin
- Russel Winder
- Ryan Walmsley
- Schelto van Doorn
- Sofiia Kosovan
- Steve Amor
- Stewart Adcock
- Thijs Triemstra
- Tim Golden
- Yisrael Dov Lebow
See the contributors page on GitHub for more info.