$30 off During Our Annual Pro Sale. View Details »

GPIO Zero

GPIO Zero

Talk given at the Raspberry Pi Big Birthday Weekend

Ben Nuttall

March 04, 2017
Tweet

More Decks by Ben Nuttall

Other Decks in Programming

Transcript

  1. GPIO Zero
    Ben Nuttall
    Raspberry Pi Foundation
    UK Charity 1129409

    View Slide

  2. Ben Nuttall

    Raspberry Pi Community Manager

    Based in Cambridge

    Creator of gpiozero python library

    Columnist on opensource.com

    github.com/bennuttall

    twitter.com/ben_nuttall

    [email protected]

    View Slide

  3. GPIO Pins – General Purpose
    Input/Output

    View Slide

  4. GPIO Zero: a friendly API for GPIO devices
    from gpiozero import LED
    led = LED(17)
    led.on()

    View Slide

  5. Multi-paradigm: procedural
    from gpiozero import LED, Button
    led = LED(17)
    button = Button(4)
    while True:
    if button.is_pressed:
    led.on()
    else:
    led.off()

    View Slide

  6. Multi-paradigm: event-driven
    from gpiozero import LED, Button
    led = LED(17)
    button = Button(4)
    button.when_pressed = led.on
    button.when_released = led.off

    View Slide

  7. Multi-paradigm: declarative
    from gpiozero import LED, Button
    led = LED(17)
    button = Button(4)
    led.source = button.values

    View Slide

  8. GPIO Zero supports...

    View Slide

  9. GPIO Zero Device Hierarchy!

    View Slide

  10. .value
    >>> led = PWMLED(17)
    >>> led.value
    0.0
    >>> led.on()
    >>> led.value
    1.0
    >>> led.value = 0

    View Slide

  11. .value
    >>> led = PWMLED(17)
    >>> pot = MCP3008()
    >>> led.value = pot.value

    View Slide

  12. .value
    >>> led = PWMLED(17)
    >>> pot = MCP3008()
    >>> led.value = pot.value
    >>> while True:
    ... led.value = pot.value

    View Slide

  13. Source / Values
    Output Device
    .value
    .values
    .source
    Input Device
    .value
    .values

    View Slide

  14. Source / Values
    Output Device
    .value
    .values
    .source
    Input Device
    .value
    .values

    View Slide

  15. Source/Values
    from gpiozero import LED, Button
    led = LED(17)
    button = Button(2)
    led.source = button.values

    View Slide

  16. Processing values
    Output Device
    .value
    .values
    .source
    Input Device
    .value
    .values
    function

    View Slide

  17. Source tools
    from gpiozero import Button, LED
    from gpiozero.tools import negated
    led = LED(4)
    btn = Button(17)
    led.source = negated(btn.values)

    View Slide

  18. Combining values
    Output Device
    .value
    .values
    .source
    Input Device
    .value
    .values
    Source tool
    Input Device
    .value
    .values

    View Slide

  19. Source tools
    from gpiozero import Button, LED
    from gpiozero.tools import all_values
    button_a = Button(2)
    button_b = Button(3)
    led = LED(17)
    led.source = all_values(button_a.values, button_b.values)

    View Slide

  20. Supporting multiple back-ends

    RPi.GPIO

    Implemented in C, current default

    RPIO

    Implemented in C

    pigpio

    Python wrapper for C library, runs as daemon, remote pins

    Native

    Pure Python, limited functionality, experimental

    MockPin & MockPWMPin

    Pure Python, used in test suite

    View Slide

  21. MockPin
    $ GPIOZERO_PIN_FACTORY=MockPin python3
    >>> from gpiozero import LED
    >>> led = LED(22)
    >>> led.blink()
    >>> led.value
    True
    >>> led.value
    False

    View Slide

  22. MockPin
    >>> from gpiozero import LED
    >>> from gpiozero.pins.mock import MockPin
    >>> led = LED(22)
    >>> button = Button(23)
    >>> led.source = button.values
    >>> pin = MockPin(23)
    >>> led.value
    False
    >>> pin.drive_low()
    >>> led.value
    True

    View Slide

  23. pigpio - remote GPIO from Pi or PC

    View Slide

  24. pigpio - remote GPIO from Pi or PC
    from gpiozero import LED
    from gpiozero.pins.pigpiod import PiGPIOPin
    led = LED(PiGPIOPin(22, host='192.168.0.2'))
    led.blink()

    View Slide

  25. pigpio - remote GPIO from Pi or PC
    $ PIGPIO_ADDR=192.168.0.2 python3 led.py
    from gpiozero import LED
    led = LED(22)
    led.blink()

    View Slide

  26. Internal devices

    TimeOfDay

    PingServer

    CPUTemperature

    More coming soon

    Make your own!

    View Slide

  27. Energenie tortoise lamp
    from gpiozero import Energenie, TimeOfDay
    from datetime import time
    lamp = Energenie(1)
    daytime = TimeOfDay(time(8), time(20))
    lamp.source = daytime.values

    View Slide

  28. Is the internet working?
    from gpiozero import LED, PingServer
    from gpiozero.tools import negated
    green = LED(17)
    red = LED(18)
    google = PingServer('google.com')
    google.source_delay = 60
    green.source = google.values
    red.source = negated(green.values)

    View Slide

  29. CPU Temperature
    from gpiozero import LEDBarGraph, CPUTemperature
    cpu = CPUTemperature(min_temp=50, max_temp=90)
    leds = LEDBarGraph(2, 3, 4, 5, 6, 7, 8, pwm=True)
    leds.source = cpu.values

    View Slide

  30. guizero

    View Slide

  31. PIXEL x86

    View Slide

  32. PIXEL x86 – Remote GPIO

    View Slide

  33. GitHub

    View Slide

  34. What's coming?

    View Slide

  35. What's coming?

    More GPIO devices, more internal devices

    More protocols (I2C, one wire, etc.)

    Improved documentation

    Improved Remote GPIO support including Pi Zero OTG

    Improved advanced features

    GUI representation for real and mock pins

    pinout command line tool

    View Slide

  36. pinout command line tool

    View Slide

  37. Read the docs!

    View Slide

  38. Contributors

    Core team:
    – Ben Nuttall
    – Dave Jones
    – Andrew Scheller

    Contributors:
    – Martin O'Hanlon
    – Steve Amor
    – David Glaude
    – Edward Betts
    – Alex Chan
    – Thijs Triemstra
    – Schelto vanDoorn
    – Alex Eames
    – Barry Byford
    – Clare Macrae
    – Tim Golden
    – Phil Howard

    View Slide

  39. The MagPi #55

    View Slide

  40. GPIO Zero Book

    View Slide

  41. GPIO Zero
    Ben Nuttall
    Raspberry Pi Foundation
    UK Charity 1129409

    View Slide