Using arduino and raspberry pi for internet of things
1. Using Arduino and Raspberry Pi
for Internet of Things
Sudar Muthu (@sudarmuthu)
http://hardwarefun.com/
http://github.com/sudar
2. Who am I?
Research Engineer by profession
I build robots as a hobby
Playing with Arduino for more than 4 years
Blogger about Arduino at http://hardwarefun.com
Moderator for Arduino India forum
http://hardwarefun.com 2
3. Objective
Introduce Arduino
Introduce Raspberry Pi
Emphasis on IoT
See how both can be used for IoT
http://hardwarefun.com 3
5. What is Arduino?
Visual Basic for hardware
Includes both Hardware and software
http://hardwarefun.com 5
Photo credit Arduino team
6. Different Arduino types
Arduino Uno (The one I am going to use today)
Arduino Mega
Arduino Due
Lillypad
Arduino BT
Arduino Ethernet
.. and clones
http://hardwarefun.com 6
8. Specs (Uno, Leonardo)
Type Value
Microcontroller ATmega328
Operating Voltage 5v
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 6
Flash Memory 32 KB (ATmega328) of which 0.5 KB used
by bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz
http://hardwarefun.com 8
9. Identify these components in
Microcontroller
Power jacket
USB jacket
Digital pins
Analog pins
Reset button
Arduino
http://hardwarefun.com 9
10. Identify these components in
Arduino
Voltage Regulator
Power Pins (how many are there?)
Ground Pins (how many are there?)
Vin Pin
Rx and Tx Pins
ICSP Headers
http://hardwarefun.com 10
11. Identify these components in
Power Led
Rx and Tx Led’s
Test Led
Crystal
Anything else?
Arduino
http://hardwarefun.com 11
13. Different ways to power up Arduino
Using USB cable
Using DC power jacket
Giving voltage directly into Vin pin
Giving regulated voltage directly into 5V pin
http://hardwarefun.com 13
17. Making a LED blink
Insert a LED in pin 13
Open File->Examples->Basics->Blink
Select Tools->Boards->Arduino Uno
Select File->Upload (or press ctrl+u)
You should get the message “Done upload”
Your Led should blink
Congrats you can program Arduino now
http://hardwarefun.com 17
19. People with electronics background
Did I miss anything?
Hint: Ohm’s Law
http://hardwarefun.com 19
20. Anatomy of an Arduino sketch
http://hardwarefun.com 20
21. Printing values through Serial
Uno has one UART hardware port, using which we
can exchange information with computer
Very useful for debugging
Works at a specified baud rate
Use Serial Monitor to read values
SoftwareSerial is also available
http://hardwarefun.com 21
23. How to use a breadboard
The first two and the last two rows are connected
In all the other rows, columns are connected
Connect the first and last row to power
Connect the second and second last row to ground
http://hardwarefun.com 23
28. Reading Analog values from sensors
Connect the LDR on pin A0 and Gnd
LDR’s resistance varies based on the amount of light
present
Read the current value using analogRead()
Print the value in Serial Monitor
http://hardwarefun.com 28
29. Control an LED based on light
void setup(){
pinMode(13, OUTPUT);
}
void loop(){
int val = analogRead(A0);
if (val > 50) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
}
http://hardwarefun.com 29
31. Analog Output
What is PWM?
Analog like behavior using digital output
Works by switching the LED on and off regularly
Changing the brightness of a Led
http://hardwarefun.com 31
32. This is just the tip of an
iceberg
http://hardwarefun.com 32
There are tons of other
features to Arduino which I
have not talked about
35. LoT is an overloaded term
But I like this definition…
“The Internet of Things is the interconnection of
uniquely identifiable embedded computing devices
within the existing Internet infrastructure”
http://hardwarefun.com 35
36. Connecting Arduino to Internet
Ethernet Shield
WIFI Shield
3G Shield
Using another intermediate component
http://hardwarefun.com 36
37. Demo of network connectivity
using Arduino
http://hardwarefun.com 37
43. Set the status of GPIO Pins
https://github.com/sudar/r http://hardwarefun.com asp4b3erry-pi-sketches/blob/master/led-blink/led-blink.py
44. Set the status of GPIO Pins
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
try:
while True:
GPIO.output(12, GPIO.HIGH)
time.sleep(1)
GPIO.output(12, GPIO.LOW)
time.sleep(1)
finally:
GPIO.cleanup()
https://github.com/sudar/raspberry-http://hardwarefun.com 44 pi-sketches/blob/master/led-blink/led-blink.py
45. Demo
Let there be Light
https://github.com/sudar/r http://hardwarefun.com 45aspberry-pi-sketches/blob/master/led-blink/led-blink.py
46. Changing the brightness of the LED
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
p = GPIO.PWM(12, 50) # channel=12 frequency=50Hz
p.start(0)
try:
while True:
for dc in range(0, 101, 5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
for dc in range(100, -1, -5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
finally:
p.stop()
GPIO.cleanup()
http://hardwarefun.com 46
https://github.com/sudar/raspberry-pi-sketches/blob/master/led-blink/pwm.py
47. Demo
Can you see the brightness changing?
https://github.com/sudar/raspberry-http://hardwarefun.com 47 pi-sketches/blob/master/led-blink/pwm.py
48. Reading the status of the Pin
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
try:
while True:
if GPIO.input(11):
print "Button is on"
else:
print "Button is off"
time.sleep(0.1)
finally:
GPIO.cleanup()
http://hardwarefun.com 48
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py
49. Reading the status of the Pin
http://hardwarefun.com 49
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py
50. Demo
What happens when the button is pressed?
http://hardwarefun.com 50
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-input/button-input.py
51. Combining Input and Output
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(12, GPIO.OUT)
try:
while True:
if GPIO.input(11):
print "Button is on"
GPIO.output(12, 1)
else:
GPIO.output(12, 0)
time.sleep(0.1)
finally:
GPIO.cleanup()
http://hardwarefun.com 51
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-and-led/button-and-led.py
52. Combining Input and Output
http://hardwarefun.com 52
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-and-led/button-and-led.py
53. Demo
Let’s control the LED by pressing the button
http://hardwarefun.com 53
https://github.com/sudar/raspberry-pi-sketches/blob/master/button-and-led/button-and-led.py
56. Interacting with webcam
“PyGame” provides easy interface
Can get fancy using “opencv”
Both USB and GPIO interface are supported
http://hardwarefun.com 56
57. Distributed Computing
Each Pi can be used as cheap node
Form grids using a cluster of Pi’s
Can share CPU, memory and disk space
http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/
distributed-computing/
http://hardwarefun.com 57
58. Limitations
No built-in Analog to Digital support
Can’t run Inductive load (motors)
Is not real-time (CPU might be busy)
No “safe circuits” present
Operates at 3.3V and is not directly compatible with
Arduino voltage
http://hardwarefun.com 58
60. Advantages of Raspberry Pi
Entire Linux software stack is available
It is very easy to connect to internet
Can be programmed using variety of programming
languages
http://hardwarefun.com 60
61. Disadvantage of Raspberry Pi
Accessing hardware is not real-time. If the CPU is
busy, then interfacing with hardware can be delayed
No built-in Analog to Digital converter available
Does not have enough power to drive inductive loads
The hardware design is not open source. Even though
it is not a big deal, for some people it might a deal
breaker
http://hardwarefun.com 61
62. Advantages of Arduino
Very easy to get started
Very easy to extend it and has tons of user
contributed shields and libraries. Shields are available
to do pretty much anything
Can be used to for real-time applications
Everything (both hardware, software and IDE) are
open source
Not much programming knowledge needed to do
basic stuff
http://hardwarefun.com 62
63. Disadvantages of Arduino
Not very powerful when compared with Raspberry Pi
(Micro processor vs Micro controller)
You need to program using either Arduino or C/C++
(or assembly if you really want to)
Connecting to internet is slightly difficult (you have
shields and libraries, but is not straight forward), but
not impossible.
http://hardwarefun.com 63
64. In Short..
Feature Raspberry Pi Arduino
Processor Speed 700 MHz 16 MHz
Programming Language No limit Arduino, C/C++
Real-time Hardware No real-time In real-time
Analog to Digital Convertor No Yes
Hardware Design Closed source Open source
Internet Connection Very easy Not easy, but doable
http://hardwarefun.com 64
"Internet of Things" by Wilgengebroed on Flickr - Cropped and sign removed from Internet of things signed by the author.jpg. Licensed under Creative Commons Attribution 2.0 via Wikimedia Commons - http://commons.wikimedia.org/wiki/File:Internet_of_Things.jpg#mediaviewer/File:Internet_of_Things.jpg