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

Physical Computing with Python and Raspberry Pi - EuroPython 2017

Physical Computing with Python and Raspberry Pi - EuroPython 2017

Talk given at EuroPython 2017

Ben Nuttall

July 14, 2017
Tweet

More Decks by Ben Nuttall

Other Decks in Programming

Transcript

  1. Ben Nuttall • Raspberry Pi Community Manager • Based in

    Cambridge, UK • Creator of gpiozero python library • Columnist on opensource.com • github.com/bennuttall • twitter.com/ben_nuttall • [email protected]
  2. Raspberry Pi Foundation • Educational charity founded in 2009 •

    Incorporates: – Raspberry Pi Trading Ltd – Code Club – CoderDojo • Trading profits fund education programmes raspberrypi.org/about
  3. Our mission “Putting the power of digital making into the

    hands of people all over the world” So that people are: • Capable of understanding and shaping an increasingly digital world • Able to solve the problems that matter to them, both as makers and entrepreneurs • Equipped for the jobs of the future raspberrypi.org/about
  4. We do this by providing... • Low-cost, high-performance computers •

    Outreach and education programmes • Free resources and teacher training p
  5. Current models • Raspberry Pi 3 • 64-bit quad-core ARMv8

    @ 1.2GHz • 1GB RAM • $35 • Raspberry Pi Zero / Zero W • 32-bit single-core ARMv6 @ 1GHz • 512MB RAM • $5 / $10 raspberrypi.org/products
  6. Moving on from IDLE... • We have included a new

    IDE called Thonny • We are investing in developing Nicholas Tollervery’s Mu editor – watch this space! ntoll.org/article/mu-pi
  7. Physical computing • Flashy lights • Motors & robots •

    Photo & video • Sensors • Internet of Things • Home automation
  8. GPIO • 3V3, 5V • GPIO, SPI, I2C, UART •

    GPIO = variable 3V3 pinout.xyz
  9. 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)
  10. Python - GPIO Zero from gpiozero import LED from time

    import sleep led = LED(17) while True: led.on() sleep(1) led.off() sleep(1)
  11. 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()
  12. 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
  13. .value >>> led = PWMLED(17) >>> pot = MCP3008() >>>

    led.value = pot.value >>> while True: ... led.value = pot.value
  14. Source / Values from gpiozero import LED, Button led =

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

    negated led = LED(4) button = Button(17) led.source = negated(button.values)
  16. Combining values Output Device .value .values .source Input Device .value

    .values Source tool Input Device .value .values
  17. AND logic gate 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)
  18. 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
  19. Is the internet working? from gpiozero import LED, PingServer from

    gpiozero.tools import negated green = LED(17) red = LED(18) google = PingServer('google.com') green.source = google.values green.source_delay = 60 red.source = negated(green.values)
  20. 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
  21. Supporting multiple pin libraries • RPi.GPIO • Implemented in C,

    current default • Available in PyPI & apt repository (installed by default in Raspbian) • RPIO • Implemented in C, supports hardware PWM, supports Pi 1 only (dead project) • Available in PyPI • pigpio • Python wrapper for C library, supports lots of protocols, runs as daemon, supports remote connections • Available in PyPI & apt repository (installed by default in Raspbian) • Native • Pure Python, limited functionality, experimental • Included in gpiozero source • MockPin & MockPWMPin • Pure Python, used in test suite • Included in gpiozero source
  22. pigpio - remote GPIO from Pi or PC from gpiozero

    import LED from gpiozero.pins.pigpio import PiGPIOFactory from signal import pause factory = PiGPIOFactory('192.168.0.2') led = LED(22, pin_factory=factory) led.blink() pause()
  23. pigpio - remote GPIO from Pi or PC $ export

    GPIOZERO_PIN_FACTORY=pigpio $ export PIGPIO_ADDR=192.168.0.2 $ python3 led.py from gpiozero import LED from signal import pause led = LED(22) led.blink() pause()
  24. MockPin $ GPIOZERO_PIN_FACTORY=mock python3 >>> from gpiozero import LED >>>

    led = LED(22) >>> led.blink() >>> led.value True >>> led.value False
  25. MockPin >>> from gpiozero import LED >>> led = LED(22)

    >>> button = Button(23) >>> led.source = button.values >>> led.value False >>> button.pin.drive_low() >>> led.value True
  26. Sense HAT • Special made for Tim Peake's Astro Pi

    mission • Sensors, LED display & joystick • Great for science, games and creativity • Works on any Pi model • Emulators also available raspberrypi.org/products/sense-hat
  27. Sense HAT >>> from sense_hat import SenseHat >>> sense =

    SenseHat() >>> sense.show_message(“Hello world”)
  28. Sense HAT >>> sense.temperature 25.0 >>> sense.humidity 45.0 >>> sense.accelerometer

    {'pitch': 0.0, 'roll': 0.0, 'yaw': 0.0} >>> sense.gyroscope {'pitch': 0.0, 'roll': 0.0, 'yaw': 0.0} >>> sense.orientation {'pitch': 0.0, 'roll': 0.0, 'yaw': 0.0}
  29. Sense HAT from sense_hat import SenseHat sense = SenseHat() while

    True: r = 255 * sense.humidity / 100 sense.clear(r, 0, 0) pythonhosted.org/sense-hat
  30. Picamera • 8 megapixels (v2) – v1 was 5mpx •

    Visible light & infra-red versions available • 1080p30, 720p60 and VGA90 video • Command line interface and Python library raspberrypi.org/products/camera-module-v2
  31. Picamera - capture from picamera import PiCamera from time import

    sleep camera = PiCamera() camera.start_preview() sleep(3) camera.capture('/home/pi/Desktop/image.jpg') camera.stop_preview()
  32. Picamera – record video from picamera import PiCamera from time

    import sleep camera = PiCamera() camera.start_preview() camera.start_recording('/home/pi/video.h264') sleep(10) camera.stop_recording() camera.stop_preview()
  33. Picamera + GPIO push button from picamera import PiCamera from

    gpiozero import Button camera = PiCamera() button = Button(17) camera.start_preview() button.wait_for_press() camera.capture('/home/pi/Desktop/image.jpg') camera.stop_preview()
  34. Picamera image effects from picamera import PiCamera from time import

    sleep camera = PiCamera() camera.start_preview() for effect in camera.IMAGE_EFFECTS: camera.image_effect = effect camera.annotate_text = effect sleep(1) camera.stop_preview()
  35. Google AIY Projects kit • Free with The MagPi #57

    • Google Voice HAT + speaker • Google assistant • Write code to process custom voice commands – “Lights on” – “Robot go forward” – “Take a picture” aiyprojects.withgoogle.com
  36. PyPI & ARM Wheels • PyPI doesn’t support uploading ARM

    wheels :( • I have a project called piwheels – I build all PyPI packages on a Raspberry Pi 3 – I host a Python package repository on the same Pi • Next gen PyPI (warehouse) now supports uploading ARM wheels :) • See my lightning talk slides at speakerdeck.com/bennuttall • See the project at github.com/bennuttall/piwheels github.com/bennuttall/piwheels
  37. Python libraries • Play with, and contribute to: – gpiozero

    – picamera – sense hat – more! • Help maintainers upgrade modules to Python 3 • Create your own Python libraries for Raspberry Pi things
  38. The MagPi • Community magazine established in 2012 (as free

    PDF download) • Now the official Raspberry Pi magazine • Paper copies on sale in UK/US shops and online • Still a free PDF download • Occasionally comes with a free computer • Book series (also available for free) raspberrypi.org/magpi
  39. Raspberry Jam • Independently organised community events • Family-friendly •

    Mix of meetup / conference / workshop styles • Raspberry Jam Guidebook and more resources available • Contact me about setting one up! raspberrypi.org/jam
  40. Code Club • Free volunteer-led after school clubs for children

    • Projects provided using Scratch, HTML and Python • Training and support provided for volunteers • Help translating materials codeclubworld.org