Date post: | 13-Jun-2015 |
Category: |
Software |
Upload: | neil-broers |
View: | 784 times |
Download: | 1 times |
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 Thingswith Raspberry Pi
Building the Internet of Thingswith Raspberry Pi
Building the Internet of Thingswith Raspberry Pi
Building the Internet of Thingswith 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
General-purpose input/output pins (GPIO)
Building the Internet of Thingswith Raspberry Pi
• 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
The Hardware
Building the Internet of Thingswith Raspberry Pi
Building an Input Circuit
Opto-coupler / Opto-isolator
Transfers electrical signals between two isolated circuits by using light
Building the Internet of Thingswith Raspberry Pi
Building an Input Circuit
Building the Internet of Thingswith Raspberry Pi
Resistor
Implements electrical resistanceReduce current flow
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 Thingswith Raspberry Pi
Pull-up resistor
Building an Input Circuit - The diagram
Building the Internet of Thingswith Raspberry Pi
Building an Output Circuit - The components
Building the Internet of Thingswith Raspberry Pi
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 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 Thingswith Raspberry Pi
Building an Output Circuit
Building the Internet of Thingswith Raspberry Pi
Veroboard / Stripboard
Building the Internet of Thingswith Raspberry Pi
26pin IDC ribbon cable + crimp connector
Building the Internet of Thingswith Raspberry Pi
Shortcuts!
Building the Internet of Thingswith Raspberry Pi
Accessories
The Software
Building the Internet of Thingswith Raspberry Pi
Building the Internet of Thingswith Raspberry Pi
Finding your Pi's hardware revision
cat /proc/cpuinfo
Code(s) Model and revision2 Model B Revision 1.03 Model B Revision 1.0 + ECN0001 4, 5, 6 Model B Revision 2.0
Building the Internet of Thingswith Raspberry Pi
Software considerations
• The software is the easy part!
• Possible to damage the Pi• Triple check your pin
configuration
Building the Internet of Thingswith 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 Thingswith 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 Thingswith 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 Thingswith 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 Thingswith Raspberry Pi
Inputs - Setupimport 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 Thingswith Raspberry Pi
Inputs - Pollingif 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 Thingswith 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 Thingswith 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 Thingswith 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 Thingswith Raspberry Pi
Outputs - Setup
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
Building the Internet of Thingswith 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 Thingswith Raspberry Pi
Example - Bell
Building the Internet of Thingswith Raspberry Pi
The Raspberry Pi Alarm
Building the Internet of Thingswith Raspberry Pi
On Github
Building the Internet of Thingswith Raspberry Pi
github.com/nbroers/hal
What’s next?
Building the Internet of Thingswith Raspberry Pi
Questions?
Building the Internet of Thingswith Raspberry Pi
Parts list12V 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 Thingswith Raspberry Pi
ReferencesInput 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 wikihttp://sourceforge.net/p/raspberry-gpio-python/wiki/Home/
Raspberry Pi Technical Infohttp://elinux.org/RPi_Low-level_peripherals
GPIO quick referencehttp://raspi.tv/2014/rpi-gpio-quick-reference-updated-for-raspberry-pi-b
Exit Cleanlyhttp://raspi.tv/2013/rpi-gpio-basics-3-how-to-exit-gpio-programs-cleanly-avoid-warnings-and-protect-your-pi
Building the Internet of Thingswith Raspberry Pi
Neil Broers
@nbroers
[email protected] github.com/nbroers
Building the Internet of Thingswith Raspberry Pi