Learn how to build real Internet of Things (IoT) applications with pure Python and General Purpose Input/Output (GPIO). Thanks to devices like the Raspberry Pi and Intel Edison, full Linux systems with GPIO are accessible to the masses. Learn how build a true IoT device using only hardware and core Python libraries and hardware costing less than $50 US.
5. PHYSICAL ACCESS SYSTEM
Comprised of Raspberry Pi B, power
converter, electronic door latch, inline
switch. Software is Raspbian with Python
2.7 and Twisted.
7. STARTER KIT HARDWARE
• Raspberry Pi
• Micro USB with AC converter for power
• Cat 5 network cable
• USB Keyboard
• HDMI cable
• HDMI capable display – not shown
• 3.3V LED with (2) female to female connectors
10. GENERAL PURPOSE INPUT/OUTPUT (GPIO)
• A generic pin on an integrated circuit (IC) whose
behavior is controlled at runtime
• Use to control and transfer data to and from
external devices to the IC
• Available on all general purpose IC boards
11. IT’S ALL IN THE FILE SYSTEM
• Linux GPIO Sysfs Interface for Userspace
• Root directory is at /sys/class/gpio
• Control Interfaces
• Pin Interfaces
12. CONTROL INTERFACE
• “export” creates a node to expose a GPIO port
to the user space
• “echo 18 > /sys/class/gpio/export” will create a
gpio18 node at “/sys/class/gpio/gpio18”
• “unexport” removes the node for a GPIO port
from the user space
• “echo 18 > /sys/class/gpio/unexport” removes
the gpio18 node
13. GPIO SIGNALS
• “direction” determines the direction of a pin. Valid
values are “in” and “out”. “in” is used for interrupts
• “echo out > /sys/class/gpio/gpio18/direction” will
set GPIO pin 18 ’s direction as out
• “value” is the value of a pin. It reads a “0” or “1”.
Any on-zero value written will be interpreted as
“1”. When reading the value ”high” evaluates to ”1”
and “low” evaluates to “0” unless overridden by
“active_low”
• “echo 1 > /sys/class/gpio/gpio18/value” sets the
value of GPIO 18 to “1” and closes the circuit
• “cat /sys/class/gpio/gpio18/value” would return “1”
after the statement above
14. GPIO SIGNALS CONTINUED
• “edge” is used to tell the GPIO when to write to
”value” when “direction” is “in”. Valid values are
“none”, “rising”, ”falling”, and “both”.
• “echo both > sys/class/gpio/gpio18/edge” will
trigger an interrupt when voltage increases or
decreases
• “active_low” is used to invert the effect of
“edge” of “value”. Valid values are “1`” and “0”.
“1” inverts and “0” sets standard.
• “echo 1> sys/class/gpio/gpio18/active_low” will
invert the values of high and low
20. RASPBERRY PI
Pros
• Moderately Inexpensive (~35 USD)
• Flexible platform
• Lots of guides and tutorials
• GUI interface for beginners
• Aptitude package manager
• Great starter platform
Cons
• Requires special cable to do away with keyboard
and monitor
• Under powered
• No built in Analog to Digital Converter (ADC)
• A bit on the large side
• ARM processor
21. INTEL EDISON
Pros
• X86 based Atom processor
• Ample power, RAM, and storage
• Multiple form factors
• Arduino developer board can use standard
Arduino backplanes
• Easy to setup Wi-Fi
• Arduino board has Analog to Digital Converter
and Python library
Cons
• Can be a bit pricy (~110 USD)
• Not as many guides and tutorials
• Documentation is a bit confusing at times
• Evolving platform
• Sysfs GPIO is flakey
22. DRONESMITH LUCI
Pros
• Easy to build unmanned vehicles
• No real electrical understanding needed
• Just uses some simple scripting
• Based on Intel Edison
Cons
• Expensive
• Still in early development phase
• No real direct development – just scripting
routes.
24. BEAGLEBONE BLACK
Pros
• Inexpensive (~50 USD)
• Can be a full computer
• Has add-on ecosystem
• Lots of connectivity
• On-board Analog to Digital Converter (ADC)
Cons
• Low power
• ARM chipset
25. FURTHER READING
• Raspberry Pi: https://www.raspberrypi.org/
• Linux Kernel GPIO Sysfs: https://www.kernel.org/doc/Documentation/gpio/sysfs.txt
• Examples for GPIO in Bash and PHP: https://github.com/aenglander/iot-examples
• Twisted: http://twistedmatrix.com/
• Intel Edison: http://www.intel.com/content/www/us/en/do-it-yourself/edison.html
• CHIP: https://getchip.com/pages/chip
• Luci: http://www.dronesmith.io/luci/
26. CONTACT INFO
• @adam_englander on Twitter
• adam@launchkey.com
• aenglander on Freenode
• aenglander on GitHub
• adamenglander on Linkedn