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

Physical Computing with Python and Raspberry Pi - All Things Open 2017

Physical Computing with Python and Raspberry Pi - All Things Open 2017

Talk given at ATO 2017 in Raleigh, NC

Ben Nuttall

October 23, 2017
Tweet

More Decks by Ben Nuttall

Other Decks in Programming

Transcript

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

    Cambridge, UK • Columnist on opensource.com • @ben_nuttall on Twitter
  2. Raspberry Pi Foundation • Educational charity founded in 2009 •

    Incorporates: – Raspberry Pi Trading Ltd – Code Club – CoderDojo – Raspberry Pi Foundation North America • 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. Physical computing • Flashy lights • Motors & robots •

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

    GPIO = variable 3V3 pinout.xyz
  8. Python - GPIO Zero from gpiozero import LED from time

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

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

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

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

    .values Source tool Input Device .value .values
  15. 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)
  16. 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
  17. 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
  18. 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()
  19. 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()
  20. MockPin $ GPIOZERO_PIN_FACTORY=mock python3 >>> from gpiozero import LED >>>

    led = LED(22) >>> led.blink() >>> led.value True >>> led.value False
  21. 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
  22. 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
  23. Sense HAT >>> from sense_hat import SenseHat >>> sense =

    SenseHat() >>> sense.show_message(“Hello world”)
  24. 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}
  25. 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
  26. 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
  27. 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()
  28. 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()
  29. 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()
  30. 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()
  31. Google AIY Projects kit • Free with The MagPi #57

    • Now available to buy • Google Voice HAT + speaker • Google assistant • Write code to process custom voice commands – “Lights on” – “Robot go forward” – “Take a picture” aiyprojects.withgoogle.com
  32. Mythic Beasts Pi Cloud • Raspberry Pi 3 in the

    cloud a data centre • NFS filesystem (no SD card) • SSH into a Pi in minutes mythic-beasts.com
  33. 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 or other giveaway • Book series (buy or download for free) raspberrypi.org/magpi
  34. 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
  35. Code Club • Free volunteer-led after school clubs for children

    aged 9-13 • Projects provided using Scratch, HTML and Python • Training and support provided for volunteers • Help translating materials codeclubworld.org
  36. CoderDojo • Free volunteer-led youth clubs for under-18s • Informal,

    lots of variety • Resources online coderdojo.com
  37. Raspberry Pi booth • Booth #41 • Behind the registration

    desk • Come say hi! • Ask questions • Tell me about your projects • Find a Raspberry Jam near you – or help set one up