With the advent of the low cost Raspberry Pi computer, anyone with a soldering iron and some basic Python skills can take everyday objects and transform them into fully networked, smart devices.
In this talk, I will show you how I hacked a Raspberry Pi into my home alarm system, turning my network of IP cameras into motion triggered sensors. I will show you how to build basic input and output circuits and introduce you to the RPi.GPIO Python module. We’ll talk about how you can build a RESTful server on your Raspberry Pi to enable remote access. And finally, more ideas for hacking everyday objects around the home!
No prior electronics knowledge required.
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
5. 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
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
8. 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
9. Building an Input Circuit
Resistor
Implements electrical resistance
Reduce current flow
Building the Internet of Things
with Raspberry Pi
10. 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
11. Building an Input Circuit - The diagram
Building the Internet of Things
with Raspberry Pi
12. 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
13. 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
14. Building an Output Circuit
Building the Internet of Things
with Raspberry Pi
21. 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
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
#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
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
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
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 - 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
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 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
34. Example - Bell
Building the Internet of Things
with Raspberry Pi
35. The Raspberry Pi Alarm
Building the Internet of Things
with Raspberry Pi
39. 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
40. 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
41. Neil Broers
@nbroers
neil@foo.co.za
github.com/nbroers
Building the Internet of Things
with Raspberry Pi