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

Physical computing with GPIO Zero - oggcamp

Ben Nuttall
November 01, 2015

Physical computing with GPIO Zero - oggcamp

Presentation given at oggcamp 2015 on the new GPIO Zero Python library

Ben Nuttall

November 01, 2015
Tweet

More Decks by Ben Nuttall

Other Decks in Programming

Transcript

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

    View Slide

  2. Ben Nuttall

    Education Developer Advocate
    at the Raspberry Pi Foundation
    – Software & project development
    – Learning resources & teacher
    training
    – Outreach

    Hobbyist turned employee

    Based in Cambridge (but from
    the North)

    @ben_nuttall on Twitter

    View Slide

  3. Python – RPi.GPIO
    import RPi.GPIO as GPIO
    from time import sleep
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    led = 17
    GPIO.setup(led, GPIO.OUT)
    while True:
    GPIO.output(led, True)
    sleep(1)
    GPIO.output(led, False)
    sleep(1)

    View Slide

  4. Python – GPIO Zero
    from gpiozero import LED
    from time import sleep
    led = LED(17)
    while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)

    View Slide

  5. LED
    from gpiozero import LED
    from time import sleep
    led = LED(17)
    led.on() # on
    led.off() # off
    led.toggle() # on­>off or off­>on
    led.blink() # flash on/off continuously

    View Slide

  6. LED + Button
    from gpiozero import LED, Button
    led = LED(17)
    button = Button(3)
    button.when_pressed = led.on
    button.when_released = led.off

    View Slide

  7. Source + Values
    from gpiozero import LED, Button
    led = LED(17)
    button = Button(3)
    led.source = button.values

    View Slide

  8. LED - PWM
    from gpiozero import PWMLED
    from time import sleep
    led = PWMLED(17)
    led.on() # on
    led.off() # off
    led.value = 0.5 # half brightness

    View Slide

  9. Motion sensor
    from gpiozero import LED, MotionSensor
    led = LED(2)
    sensor = MotionSensor(3)
    sensor.when_motion = led.on
    sensor.when_no_motion = led.off

    View Slide

  10. Light sensor
    from gpiozero import LED, LightSensor
    led = LED(2)
    sensor = LightSensor(3)
    while True:
    sensor.wait_for_light()
    print("It's light!")
    sensor.wait_for_dark()
    print("It's dark")

    View Slide

  11. Traffic Lights
    from gpiozero import TrafficLights
    lights = TrafficLights(9, 10, 11)
    lights.on() # all on
    lights.off() # all off
    lights.red.on() # red on
    lights.toggle() # swap state of all lights

    View Slide

  12. Traffic Lights sequence
    lights.green.on()
    lights.amber.off()
    lights.red.off()
    while True:
    sleep(10)
    lights.green.off()
    lights.amber.on()
    sleep(1)
    lights.amber.off()
    lights.red.on()
    sleep(10)
    lights.amber.on()
    sleep(1)
    lights.green.on()
    lights.amber.off()
    lights.red.off()

    View Slide

  13. TrafficHat
    from gpiozero import TrafficHat
    th = TrafficHat()
    th.lights.red.on()
    th.lights.amber.on()
    th.button.when_pressed = th.on
    th.button.when_released = th.off

    View Slide

  14. TrafficHat - PWM
    from gpiozero import TrafficHat
    th = TrafficHat(pwm=True)
    th.lights.red.value = 0.2
    th.lights.amber.value = 0.4
    th.lights.green.value = 0.8

    View Slide

  15. Push button stop motion
    from gpiozero import Button
    from picamera import PiCamera
    button = Button(4)
    with PiCamera() as camera:
    camera.start_preview()
    frame = 1
    while True:
    button.wait_for_press()
    camera.capture('/home/pi/frame%03d.jpg' % frame)
    frame += 1

    View Slide

  16. Full colour LED
    from gpiozero import RGBLED
    led = RGBLED(2, 3, 4)
    led.red.on() # full red
    led.color = (1, 0, 1) # purple
    led.blue = 0.3 # dim the blue value to 0.3
    # now (1, 0, 0.3)

    View Slide

  17. Motor
    from gpiozero import Motor
    from time import sleep
    motor = Motor(forward=17, backward=18)
    while True:
    motor.forward()
    sleep(5)
    motor.backward()
    sleep(5)

    View Slide

  18. Robot
    from gpiozero import Robot
    from time import sleep
    robot = Robot(left=(17, 18), right=(22, 23))
    while True:
    robot.forward()
    sleep(10)
    robot.left()
    sleep(1)

    View Slide

  19. Button controlled Robot
    from gpiozero import RyanteckRobot, Button
    robot = RyanteckRobot()
    left = Button(26)
    right = Button(16)
    fw = Button(21)
    bw = Button(20)
    fw.when_pressed = robot.forward
    fw.when_released = robot.stop
    left.when_pressed = robot.left
    left.when_released = robot.stop
    right.when_pressed = robot.right
    right.when_released = robot.stop
    bw.when_pressed = robot.backward
    bw.when_released = robot.stop

    View Slide

  20. Analogue - potentiometers
    from gpiozero import MCP3008
    pot = MCP3008()
    while True:
    print(pot.value)

    View Slide

  21. Dial up the brightness!
    from gpiozero import PWMLED, MCP3008
    led = PWMLED(2)
    pot = MCP3008()
    while True:
    led.value = pot.value

    View Slide

  22. Dial up the brightness!
    from gpiozero import PWMLED, MCP3008
    led = PWMLED(2)
    pot = MCP3008()
    led.source = pot.values

    View Slide

  23. Analogue - potentiometers
    from gpiozero import RGBLED, MCP3008
    led = RGBLED(red=2, green=3, blue=4)
    red_pot = MCP3008(channel=0)
    green_pot = MCP3008(channel=1)
    blue_pot = MCP3008(channel=2)
    while True:
    led.red = red_pot.value
    led.green = green_pot.value
    led.blue = blue_pot.value

    View Slide

  24. Analogue - potentiometers
    from gpiozero import RGBLED, MCP3008
    led = RGBLED(red=2, green=3, blue=4)
    red_pot = MCP3008(channel=0)
    green_pot = MCP3008(channel=1)
    blue_pot = MCP3008(channel=2)
    led.red.source = red_pot.values
    led.green.source = green_pot.values
    led.blue.source = blue_pot.values

    View Slide

  25. GPIO Music Box
    from gpiozero import Button
    import pygame.mixer
    from pygame.mixer import Sound
    pygame.mixer.init()
    def play(pin):
    sound = sound_pins[pin]
    print("playing note from pin %s" % pin)
    sound.play()
    sound_pins = {
    2: Sound("samples/drum_tom_mid_hard.wav"),
    3: Sound("samples/drum_cymbal_open.wav"),
    }
    buttons = [Button(pin) for pin in sound_pins]
    for button in buttons:
    sound = sound_pins[button.pin]
    button.when_pressed = sound.play

    View Slide

  26. Analogue - potentiometers
    from gpiozero import PWMLED, MCP3008
    led = PWMLED(2)
    pot = MCP3008()
    led.source = pot.values

    View Slide

  27. GPIO Zero - beta

    www.pythonhosted.org/gpiozero
    – Installation instructions
    – Documentation
    – Examples

    GitHub Issues
    – Suggestions
    – Feedback

    Contact me
    [email protected]
    – @ben_nuttall on Twitter

    #gpiozero on Twitter

    View Slide

  28. CamJam EduKit

    £5 starter kit (kit 1)

    £7 sensors kit (kit 2)

    £17 robotics kit (kit 3)

    Free worksheets

    Very reusable

    View Slide

  29. The MagPi

    View Slide

  30. The MagPi

    View Slide

  31. Physical computing with GPIO Zero
    Ben Nuttall
    Raspberry Pi Foundation
    UK Charity 1129409

    View Slide