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

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