Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Physical computing with GPIO Zero - Peterborough Raspberry Jam

Ben Nuttall
November 28, 2015

Physical computing with GPIO Zero - Peterborough Raspberry Jam

Getting started with GPIO Zero talk given at Peterborough Raspberry Jam

Ben Nuttall

November 28, 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size slide

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

    View full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size 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 full-size 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 full-size slide

  25. GPIO Music Box
    from gpiozero import Button
    import pygame.mixer
    from pygame.mixer import Sound
    pygame.mixer.init()
    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 full-size slide

  26. Install GPIO Zero

    Pre-installed in Raspbian Jessie since 21 Nov

    Update with:
    sudo apt­get update

    Install with:
    sudo apt­get install python3­gpiozero
    or:
    sudo apt­get install python­gpiozero

    View full-size slide

  27. GPIO Zero

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

    GitHub Issues
    – Suggestions
    – Feedback

    Contact me
    [email protected]
    – @ben_nuttall on Twitter

    #gpiozero on Twitter

    View full-size slide

  28. CamJam EduKit

    £5 starter kit (kit 1)

    £7 sensors kit (kit 2)

    £17 robotics kit (kit 3)

    Free worksheets

    Very reusable

    View full-size slide

  29. Raspberry Pi blog

    View full-size slide

  30. Conductive paint

    View full-size slide

  31. Conductive thread

    View full-size slide

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

    View full-size slide