Building the Internet of Things with Raspberry Pi
Who am I? I am a Software Developer and Architect at Energy Partners Caution – I am not an Electronic Engineer! Building the Internet of Things with Raspberry Pi
Building the Internet of Things with Raspberry Pi
Building the Internet of Things with Raspberry Pi
Model A Model B Model B+ $25 $35 $35 1 USB port 2 USB ports 4 USB ports No Ethernet 10/100 Ethernet 10/100 Ethernet SD card slot SD card slot Micro SD card slot Building the Internet of Things with Raspberry Pi
General-purpose input/output pins (GPIO) • GPIO pins can be configured to be input or output • Input values are readable - HIGH or LOW (3v3 or 0v) • Output values are writable/readable Building the Internet of Things with Raspberry Pi
The Hardware Building the Internet of Things with Raspberry Pi
Building an Input Circuit Opto-coupler / Opto-isolator Transfers electrical signals between two isolated circuits by using light Building the Internet of Things with Raspberry Pi
Building an Input Circuit Resistor Implements electrical resistance Reduce current flow Building the Internet of Things with Raspberry Pi
Pull-up / pull-down resistors • Pull-up resistors are connected to the high voltage (3.3V) • Pull-down resistors are connected to ground • Initialize an input pin to a known state when nothing is connected to it Building the Internet of Things with Raspberry Pi Pull-up resistor
Building an Input Circuit - The diagram Building the Internet of Things with Raspberry Pi
Building an Output Circuit - The components Transistor • Used to amplify and switch electronic signals and electrical power • A voltage or current applied to one pair of the transistor's terminals changes the current through another pair of terminals. Building the Internet of Things with Raspberry Pi
Building an Output Circuit - The components Relay • Electrically operated switch • Many relays use an electromagnet to mechanically operate a switch • To control a circuit by a low-power signal Building the Internet of Things with Raspberry Pi
Building an Output Circuit Building the Internet of Things with Raspberry Pi
Veroboard / Stripboard Building the Internet of Things with Raspberry Pi
26pin IDC ribbon cable + crimp connector Building the Internet of Things with Raspberry Pi
Shortcuts! Building the Internet of Things with Raspberry Pi
Accessories
The Software Building the Internet of Things with Raspberry Pi
Building the Internet of Things with Raspberry Pi
Finding your Pi's hardware revision cat /proc/cpuinfo Code(s) Model and revision 2 Model B Revision 1.0 3 Model B Revision 1.0 + ECN0001 4, 5, 6 Model B Revision 2.0 Building the Internet of Things with Raspberry Pi
Software considerations • The software is the easy part! • Possible to damage the Pi • Triple check your pin configuration Building the Internet of Things with Raspberry Pi
Introducing RPi.GPIO • Depending on your distro, probably already installed • If not, use pip: sudo pip install rpi.gpio Building the Internet of Things with Raspberry Pi
Basic usage #To import the RPi.GPIO module: import RPi.GPIO as GPIO #Select the pin numbering scheme: GPIO.setmode(GPIO.BOARD) # or GPIO.setmode(GPIO.BCM) Building the Internet of Things with Raspberry Pi
Exit Cleanly • Inputs are safer than outputs • Shorting outputs to ground can damage the PI • Any ports not reset before script exit will remain as is • Always perform cleanup before script exits Building the Internet of Things with Raspberry Pi
Exit Cleanly import RPi.GPIO as GPIO # the rest of your code goes here GPIO.cleanup() # remember, a program doesn't necessarily # exit at the last line! Building the Internet of Things with Raspberry Pi
Inputs - Setup import RPi.GPIO as GPIO #GPIO numbering GPIO.setmode(GPIO.BCM) channel = 7 GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP) # or GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) Building the Internet of Things with Raspberry Pi
Inputs - Polling if GPIO.input(channel): print('Input was HIGH') else: print('Input was LOW') # Or, in a loop while GPIO.input(channel) == GPIO.LOW: # wait 10 ms time.sleep(0.01) Building the Internet of Things with Raspberry Pi
Inputs - wait_for_edge() • blocks execution until an edge is detected • GPIO.RISING, GPIO.FALLING or GPIO.BOTH GPIO.wait_for_edge(channel, GPIO.RISING) Building the Internet of Things with Raspberry Pi
Inputs - event_detected() • Designed to be used in a loop with other things # add rising edge detection on a channel GPIO.add_event_detect(channel, GPIO.RISING) do_something() if GPIO.event_detected(channel): print('Button pressed') Building the Internet of Things with Raspberry Pi
Inputs - Threaded callbacks • RPi.GPIO runs a second thread for callback functions GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback) Building the Internet of Things with Raspberry Pi
Outputs - Setup import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(12, GPIO.OUT) Building the Internet of Things with Raspberry Pi
Outputs #Set output to HIGH GPIO.output(12, GPIO.HIGH) #Set output to LOW GPIO.output(12, GPIO.LOW) #Read the state of the output GPIO.input(12) Building the Internet of Things with Raspberry Pi
Example - Bell Building the Internet of Things with Raspberry Pi
The Raspberry Pi Alarm Building the Internet of Things with Raspberry Pi
On Github github.com/nbroers/hal Building the Internet of Things with Raspberry Pi
What’s next? Building the Internet of Things with Raspberry Pi
Questions? Building the Internet of Things with Raspberry Pi
Parts list 12V input circuit: • Optocoupler: LTV-847 - http://www.mantech.co.za/ProductInfo.aspx?Item=340M0324 • Resistor: 1K Ohm - http://www.mantech.co.za/ProductInfo.aspx?Item=64M0009 Output circuit: • Resistor: 100k ohm • Resistor: 10k ohm • Transistor (NPN Transistor): P2N2222AG - http://www.mantech.co.za/ProductInfo.aspx?Item=72M3626 • Relay: EDR101A1200Z - http://www.mantech.co.za/ProductInfo.aspx?Item=35M1045 • Diode: 1N4007: http://www.mantech.co.za/ProductInfo.aspx?Item=64M0027 Extras: • 26pin IDC ribbon cable crimp connector - http://www.mantech.co.za/ProductInfo.aspx?Item=14M8762 • Ribbon cable - http://www.mantech.co.za/ProductInfo.aspx?Item=45M0001 • Single core cable • Veroboard - http://www.mantech.co.za/ProductInfo.aspx?Item=64M0010 Building the Internet of Things with Raspberry Pi
References Input Circuit design: http://raspberrypihobbyist.blogspot.com/2012/09/gpio-input-circuit_19.html Output Circuit design: http://raspberrypihobbyist.blogspot.com/2012/10/revision-to-relay-circuit.html RPi.GPIO wiki http://sourceforge.net/p/raspberry-gpio-python/wiki/Home/ Raspberry Pi Technical Info http://elinux.org/RPi_Low-level_peripherals GPIO quick reference http://raspi.tv/2014/rpi-gpio-quick-reference-updated-for-raspberry-pi-b Exit Cleanly http://raspi.tv/2013/rpi-gpio-basics-3-how-to-exit-gpio-programs-cleanly-avoid-warnings-and-protect-your-pi Building the Internet of Things with Raspberry Pi
Neil Broers @nbroers neil@foo.co.za github.com/nbroers Building the Internet of Things with Raspberry Pi

Building the Internet of Things with Raspberry Pi

  • 1.
    Building the Internetof Things with Raspberry Pi
  • 2.
    Who am I? I am a Software Developer and Architect at Energy Partners Caution – I am not an Electronic Engineer! Building the Internet of Things with Raspberry Pi
  • 3.
    Building the Internetof Things with Raspberry Pi
  • 4.
    Building the Internetof Things with Raspberry Pi
  • 5.
    Model A ModelB Model B+ $25 $35 $35 1 USB port 2 USB ports 4 USB ports No Ethernet 10/100 Ethernet 10/100 Ethernet SD card slot SD card slot Micro SD card slot Building the Internet of Things with Raspberry Pi
  • 6.
    General-purpose input/output pins(GPIO) • GPIO pins can be configured to be input or output • Input values are readable - HIGH or LOW (3v3 or 0v) • Output values are writable/readable Building the Internet of Things with Raspberry Pi
  • 7.
    The Hardware Buildingthe Internet of Things with Raspberry Pi
  • 8.
    Building an InputCircuit Opto-coupler / Opto-isolator Transfers electrical signals between two isolated circuits by using light Building the Internet of Things with Raspberry Pi
  • 9.
    Building an InputCircuit Resistor Implements electrical resistance Reduce current flow Building the Internet of Things with Raspberry Pi
  • 10.
    Pull-up / pull-downresistors • Pull-up resistors are connected to the high voltage (3.3V) • Pull-down resistors are connected to ground • Initialize an input pin to a known state when nothing is connected to it Building the Internet of Things with Raspberry Pi Pull-up resistor
  • 11.
    Building an InputCircuit - The diagram Building the Internet of Things with Raspberry Pi
  • 12.
    Building an OutputCircuit - The components Transistor • Used to amplify and switch electronic signals and electrical power • A voltage or current applied to one pair of the transistor's terminals changes the current through another pair of terminals. Building the Internet of Things with Raspberry Pi
  • 13.
    Building an OutputCircuit - The components Relay • Electrically operated switch • Many relays use an electromagnet to mechanically operate a switch • To control a circuit by a low-power signal Building the Internet of Things with Raspberry Pi
  • 14.
    Building an OutputCircuit Building the Internet of Things with Raspberry Pi
  • 15.
    Veroboard / Stripboard Building the Internet of Things with Raspberry Pi
  • 16.
    26pin IDC ribboncable + crimp connector Building the Internet of Things with Raspberry Pi
  • 17.
    Shortcuts! Building theInternet of Things with Raspberry Pi
  • 18.
  • 19.
    The Software Buildingthe Internet of Things with Raspberry Pi
  • 20.
    Building the Internetof Things with Raspberry Pi
  • 21.
    Finding your Pi'shardware revision cat /proc/cpuinfo Code(s) Model and revision 2 Model B Revision 1.0 3 Model B Revision 1.0 + ECN0001 4, 5, 6 Model B Revision 2.0 Building the Internet of Things with Raspberry Pi
  • 22.
    Software considerations •The software is the easy part! • Possible to damage the Pi • Triple check your pin configuration Building the Internet of Things with Raspberry Pi
  • 23.
    Introducing RPi.GPIO •Depending on your distro, probably already installed • If not, use pip: sudo pip install rpi.gpio Building the Internet of Things with Raspberry Pi
  • 24.
    Basic usage #Toimport the RPi.GPIO module: import RPi.GPIO as GPIO #Select the pin numbering scheme: GPIO.setmode(GPIO.BOARD) # or GPIO.setmode(GPIO.BCM) Building the Internet of Things with Raspberry Pi
  • 25.
    Exit Cleanly •Inputs are safer than outputs • Shorting outputs to ground can damage the PI • Any ports not reset before script exit will remain as is • Always perform cleanup before script exits Building the Internet of Things with Raspberry Pi
  • 26.
    Exit Cleanly importRPi.GPIO as GPIO # the rest of your code goes here GPIO.cleanup() # remember, a program doesn't necessarily # exit at the last line! Building the Internet of Things with Raspberry Pi
  • 27.
    Inputs - Setup import RPi.GPIO as GPIO #GPIO numbering GPIO.setmode(GPIO.BCM) channel = 7 GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP) # or GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) Building the Internet of Things with Raspberry Pi
  • 28.
    Inputs - Polling if GPIO.input(channel): print('Input was HIGH') else: print('Input was LOW') # Or, in a loop while GPIO.input(channel) == GPIO.LOW: # wait 10 ms time.sleep(0.01) Building the Internet of Things with Raspberry Pi
  • 29.
    Inputs - wait_for_edge() • blocks execution until an edge is detected • GPIO.RISING, GPIO.FALLING or GPIO.BOTH GPIO.wait_for_edge(channel, GPIO.RISING) Building the Internet of Things with Raspberry Pi
  • 30.
    Inputs - event_detected() • Designed to be used in a loop with other things # add rising edge detection on a channel GPIO.add_event_detect(channel, GPIO.RISING) do_something() if GPIO.event_detected(channel): print('Button pressed') Building the Internet of Things with Raspberry Pi
  • 31.
    Inputs - Threadedcallbacks • RPi.GPIO runs a second thread for callback functions GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback) Building the Internet of Things with Raspberry Pi
  • 32.
    Outputs - Setup import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(12, GPIO.OUT) Building the Internet of Things with Raspberry Pi
  • 33.
    Outputs #Set outputto HIGH GPIO.output(12, GPIO.HIGH) #Set output to LOW GPIO.output(12, GPIO.LOW) #Read the state of the output GPIO.input(12) Building the Internet of Things with Raspberry Pi
  • 34.
    Example - Bell Building the Internet of Things with Raspberry Pi
  • 35.
    The Raspberry PiAlarm Building the Internet of Things with Raspberry Pi
  • 36.
    On Github github.com/nbroers/hal Building the Internet of Things with Raspberry Pi
  • 37.
    What’s next? Buildingthe Internet of Things with Raspberry Pi
  • 38.
    Questions? Building theInternet of Things with Raspberry Pi
  • 39.
    Parts list 12Vinput circuit: • Optocoupler: LTV-847 - http://www.mantech.co.za/ProductInfo.aspx?Item=340M0324 • Resistor: 1K Ohm - http://www.mantech.co.za/ProductInfo.aspx?Item=64M0009 Output circuit: • Resistor: 100k ohm • Resistor: 10k ohm • Transistor (NPN Transistor): P2N2222AG - http://www.mantech.co.za/ProductInfo.aspx?Item=72M3626 • Relay: EDR101A1200Z - http://www.mantech.co.za/ProductInfo.aspx?Item=35M1045 • Diode: 1N4007: http://www.mantech.co.za/ProductInfo.aspx?Item=64M0027 Extras: • 26pin IDC ribbon cable crimp connector - http://www.mantech.co.za/ProductInfo.aspx?Item=14M8762 • Ribbon cable - http://www.mantech.co.za/ProductInfo.aspx?Item=45M0001 • Single core cable • Veroboard - http://www.mantech.co.za/ProductInfo.aspx?Item=64M0010 Building the Internet of Things with Raspberry Pi
  • 40.
    References Input Circuitdesign: http://raspberrypihobbyist.blogspot.com/2012/09/gpio-input-circuit_19.html Output Circuit design: http://raspberrypihobbyist.blogspot.com/2012/10/revision-to-relay-circuit.html RPi.GPIO wiki http://sourceforge.net/p/raspberry-gpio-python/wiki/Home/ Raspberry Pi Technical Info http://elinux.org/RPi_Low-level_peripherals GPIO quick reference http://raspi.tv/2014/rpi-gpio-quick-reference-updated-for-raspberry-pi-b Exit Cleanly http://raspi.tv/2013/rpi-gpio-basics-3-how-to-exit-gpio-programs-cleanly-avoid-warnings-and-protect-your-pi Building the Internet of Things with Raspberry Pi
  • 41.
    Neil Broers @nbroers neil@foo.co.za github.com/nbroers Building the Internet of Things with Raspberry Pi