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

A1995c9abe48450ce2f82d93ca0b863f?s=128

Ben Nuttall

October 23, 2017
Tweet

More Decks by Ben Nuttall

Other Decks in Programming

Transcript

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

    UK Charity 1129409
  2. Ben Nuttall • Raspberry Pi Community Manager • Based in

    Cambridge, UK • Columnist on opensource.com • @ben_nuttall on Twitter
  3. Over 10 million Raspberry Pis sold

  4. Over 15 million Raspberry Pis sold

  5. 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
  6. 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
  7. We do this by providing... • Low-cost, high-performance computers •

    Outreach and education programmes • Free resources and teacher training p
  8. 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
  9. Raspbian desktop raspberrypi.org/downloads

  10. Raspbian x86 rpf.io/x86

  11. GPIO Pins – General Purpose Input/Output

  12. Physical computing • Flashy lights • Motors & robots •

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

    GPIO = variable 3V3 pinout.xyz
  14. GPIO components

  15. Add-on boards / HATs

  16. GPIO with Scratch

  17. Python - GPIO Zero from gpiozero import LED from time

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

    LED(17) led.blink()
  19. GPIO Zero supports...

  20. GPIO Zero Device Hierarchy!

  21. 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()
  22. 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
  23. Multi-paradigm: declarative from gpiozero import LED, Button led = LED(17)

    button = Button(4) led.source = button.values
  24. .value >>> led = PWMLED(17) >>> led.value 0.0 >>> led.on()

    >>> led.value 1.0 >>> led.value = 0
  25. .value >>> led = PWMLED(17) >>> pot = MCP3008() >>>

    led.value = pot.value
  26. .value >>> led = PWMLED(17) >>> pot = MCP3008() >>>

    led.value = pot.value >>> while True: ... led.value = pot.value
  27. Source / Values Output Device .value .values .source Input Device

    .value .values
  28. Source / Values Output Device .value .values .source Input Device

    .value .values
  29. Source / Values from gpiozero import LED, Button led =

    LED(17) button = Button(2) led.source = button.values
  30. Processing values Output Device .value .values .source Input Device .value

    .values function
  31. Source tools from gpiozero import Button, LED from gpiozero.tools import

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

    .values Source tool Input Device .value .values
  33. 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)
  34. Energenie

  35. 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
  36. 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
  37. pigpio - remote GPIO from Pi or PC

  38. 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()
  39. 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()
  40. MockPin $ GPIOZERO_PIN_FACTORY=mock python3 >>> from gpiozero import LED >>>

    led = LED(22) >>> led.blink() >>> led.value True >>> led.value False
  41. 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
  42. pinout command line tool

  43. 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
  44. Sense HAT

  45. Sense HAT >>> from sense_hat import SenseHat >>> sense =

    SenseHat() >>> sense.show_message(“Hello world”)
  46. 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}
  47. 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
  48. Astro Pi: Your code in space astro-pi.org

  49. Sense HAT Web Emulator trinket.io/sense-hat

  50. Sense HAT Desktop Emulator sense-emu.readthedocs.io

  51. 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
  52. 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()
  53. 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()
  54. 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()
  55. 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()
  56. Picamera image effects

  57. Web Streaming github.com/waveform80/pistreaming

  58. Picamera + OpenCV pyimagesearch.com

  59. 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
  60. 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
  61. 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
  62. How you can get involved...

  63. 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
  64. Raspberry Jam near you? raspberrypi.org/jam

  65. Raspberry Jam big birthday weekend rpf.io/bday

  66. 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
  67. CoderDojo • Free volunteer-led youth clubs for under-18s • Informal,

    lots of variety • Resources online coderdojo.com
  68. 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
  69. Physical computing with Raspberry Pi Ben Nuttall Raspberry Pi Foundation

    UK Charity 1129409