Physical computing with GPIO Zero - oggcamp

A1995c9abe48450ce2f82d93ca0b863f?s=47 Ben Nuttall
November 01, 2015

Physical computing with GPIO Zero - oggcamp

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

A1995c9abe48450ce2f82d93ca0b863f?s=128

Ben Nuttall

November 01, 2015
Tweet

Transcript

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

    UK Charity 1129409
  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
  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)
  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)
  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
  6. LED + Button from gpiozero import LED, Button led =

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

    LED(17) button = Button(3) led.source = button.values
  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
  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
  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")
  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
  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()
  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
  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
  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
  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)
  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)
  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)
  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
  20. Analogue - potentiometers from gpiozero import MCP3008 pot = MCP3008()

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

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

    = PWMLED(2) pot = MCP3008() led.source = pot.values
  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
  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
  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
  26. Analogue - potentiometers from gpiozero import PWMLED, MCP3008 led =

    PWMLED(2) pot = MCP3008() led.source = pot.values
  27. GPIO Zero - beta • www.pythonhosted.org/gpiozero – Installation instructions –

    Documentation – Examples • GitHub Issues – Suggestions – Feedback • Contact me – ben@raspberrypi.org – @ben_nuttall on Twitter • #gpiozero on Twitter
  28. CamJam EduKit • £5 starter kit (kit 1) • £7

    sensors kit (kit 2) • £17 robotics kit (kit 3) • Free worksheets • Very reusable
  29. The MagPi

  30. The MagPi

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

    UK Charity 1129409