Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Ben Nuttall ● Education Developer Advocate at the Raspberry Pi Foundation – Software & project development – Learning resources & teacher training – Community outreach ● @ben_nuttall on Twitter

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Python – GPIO Zero from gpiozero import LED led = LED(17) led.blink()

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Button + Picamera from gpiozero import Button From picamera import PiCamera button = Button(3) camera = PiCamera() button.when_pressed = camera.start_preview button.when_released = camera.stop_preview

Slide 10

Slide 10 text

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 led.pulse() # coming in v1.2

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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")

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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()

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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)

Slide 19

Slide 19 text

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)

Slide 20

Slide 20 text

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)

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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.source = zip(red_pot.values, green_pot.values, blue_pot.values)

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

GPIO Zero ● gpiozero.readthedocs.org – Installation instructions – Documentation – Examples ● GitHub Issues – Suggestions – Feedback ● Contact me – [email protected] – @ben_nuttall on Twitter ● #gpiozero on Twitter

Slide 30

Slide 30 text

CamJam EduKit ● £5 starter kit (kit 1) ● £7 sensors kit (kit 2) ● £17 robotics kit (kit 3) ● Free worksheets (soon to be GPIO Zero) ● Very reusable

Slide 31

Slide 31 text

GPIO Zero ● Pre-installed in Raspbian Jessie ● Available with apt: – sudo apt-get update – sudo apt-get install python3-gpiozero – sudo apt-get install python-gpiozero

Slide 32

Slide 32 text

The MagPi

Slide 33

Slide 33 text

The MagPi

Slide 34

Slide 34 text

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