The Raspberry Pi is a small credit-card sized linux computer. Developers and hobbyists around the world are creating miraculous applications and projects, and now you can join them. Last year we presented Raspberry Pi, What We Have Learned So Far, This year's presentation covers the first steps to using your Pi. From the basics, like burning your SD Card to creating a News Reader, you will learn GPIO Basics and simple Python tools. Communication between other components using SPI or I2C will also be covered. It is recommended, but not required that you have a Raspberry Pi, some knowledge of Python and simple electronics.
29. UNO MEGA DUE Pi Model A Pi Model B
Operating
Voltage
SRAM
FLASH-
Memory
Clock Speed
USB Host
Network
Audio /Video
Current I/O
pins
Digital I/O Pins
Analog Input
Pins
Price
5V 5V 3.3V 3.3V 3.3V
2 KB 8 KB 96 KB 265 MB 512 MB
32 KB 256 KB 512 KB up to 64 MB up to 64 MB
16 MHz 16 MHz 84 MHz 700 MHz* 700 MHz*
n/a n/a 1 1 2
n/a n/a n/a n/a
10/100 wired
Ethernet RJ45
n/a n/a n/a
HDMI, Composite
Video,
TRS-audio jack
HDMI, Composite
Video,
TRS-audio jack
40 mA 40 mA total 130 mA 2 to 16 mA 2 to 16 mA
14 (6 PWM) 54 (15 PWM) 54 (12 PWM) 17 (1 PWM) 17 (1 PWM)
6 16
12
2DAC Analog Out
0* 0*
$30 $59 $50 $25 $35
43. Creating Your Image
1. Download and Unzip the .img from www.raspberrypi.com
2. Format the SD Card to clear all Data
Windows
Users:
Use
Win32DiskImager
Mac Users:
in a Terminal--
sudo diskutil unmount /dev/disk1s1
sudo dd bs=1m if=(Insert Location of .img) of=(SD Card)
sync
sudo diskutil eject /dev/rdisk1
53. #! /usr/bin/python
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
#use the common numeration,
#also the one found on the Adafruit Cobbler
led = 25
delay = .5
GPIO.setup(led, GPIO.OUT)
#Set 'led' as and Output
while True:
GPIO.output(led, True) #led On
time.sleep(delay) #wait 'delay' seconds
GPIO.output(led, False) #led off
time.sleep(delay) #wait another 'delay' seconds
59. SPI requires four signals:
clock (SCLK)
master output/slave input (MOSI)
master input/slave output (MISO)
slave select (SS) or (CS) chip-select
Ra!berryPi
Se#al Pe#pheral Interface Bus - SPI
60. pi@raspberrypi ~ $ cat /etc/modprobe.d/raspi-blacklist.conf
# blacklist spi and i2c by default (many users don't need them)
blacklist spi-bcm2708
blacklist i2c-bcm2708
Loading Kernel Modules:
Edit the raspi-blacklist.conf, so that the spi module gets loaded,
Reboot, and confirm with lsmod that ‘spidev’ and ‘spi_bcm2708’ are now loaded and
ls /dev/spi* shows two spi devices: /dev/spidev0.0 and /dev/spidev0.1
Installing Dependencies:
sudo apt-get install python-dev git-core
Install Python bindings for Linux SPI access through spidev:
cd ~
git clone git://github.com/doceme/py-spidev
cd py-spidev/
sudo python setup.py install
... which creates /usr/local/lib/python2.7/dist-packages/spidev.so
SPI
64. #! /usr/bin/python
#Written By Tom Paulus, @tompaulus, www.tompaulus.com
import time
import spidev
import RPi.GPIO as GPIO
spi = spidev.SpiDev()
light_adc = 7
statusLED = 25
GPIO.setmode(GPIO.BCM)
GPIO.setup(statusLED, GPIO.OUT)
print Press CTRL+Z to exit
def analogRead(port):
Read the given ADC port and preform the necessary shifting of bits
spi.open(0, 0)
if (port 7) or (port 0):
print 'analogRead -- Port Error, Must use a port between 0 and 7'
return -1
r = spi.xfer2([1, (8 + port) 4, 0])
value = ((r[1] 3) 8) + r[2]
spi.close()
return value
while True:
GPIO.output(statusLED, True)
print analogRead(light_adc)
time.sleep(.125)
GPIO.output(statusLED, False)
time.sleep(.175)
70. I2C connects the same two signal lines
to all slaves. I.e. addressing is required
and all devices need a unique address
SDA - Serial Data
SCL - Serial Clock
Ra!berryPi
Inter-IC Bus - I2C
71. pi@raspberrypi ~ $ cat /etc/modprobe.d/raspi-blacklist.conf
# blacklist spi and i2c by default (many users don't need them)
blacklist spi-bcm2708
blacklist i2c-bcm2708
Loading Kernel Modules:
- Edit the raspi-blacklist.conf, so that the i2c module gets enabled.
- Add the following lines to /etc/modules
i2c-dev
i2c-bcm2708
Reboot, and confirm ls /dev/i2c*
shows
/dev/i2c-0
/dev/i2c-1
Installing Dependencies:
sudo apt-get install python-smbus i2c-tools
With i2c devices connected, run somthing like this, to discover devices addresses.
sudo i2cdetect -y 0
I2C
73. #! /usr/bin/python
#Written By Tom Paulus, @tompaulus, www.tompaulus.com
import time
import spidev
import RPi.GPIO as GPIO
from Adafruit_LEDBackpack.Adafruit_7Segment import SevenSegment
import smbus
GPIO.setmode(GPIO.BCM)
segment = SevenSegment(address=0x70) # which port the display is
spi = spidev.SpiDev()
light_adc = 7
l = list()
statusLED = 25
print Press CTRL+Z to exit
GPIO.setup(statusLED, GPIO.OUT)
def analogRead(port):
Read the given ADC port and preform the necessary shifting of bits
spi.open(0, 0)
if (port 7) or (port 0):
print 'analogRead -- Port Error, Must use a port between 0 and 7'
return -1
r = spi.xfer2([1, (8 + port) 4, 0])
value = ((r[1] 3) 8) + r[2]
spi.close()
return value
74. def movavg(list, length, value):
A function that smooths the results by averaging a list
#Courtesy Wolf Paulus
list.append(value)
if length len(list):
del list[0]
sum = 0
for x in list[:]:
sum += x
return sum / len(list)
while True:
GPIO.output(statusLED, True)
segment.writeInt(movavg(l, 4, analogRead(light_adc)))
time.sleep(.125)
GPIO.output(statusLED, False)
time.sleep(.175)
**This program uses a modified library**
100. class Scroller():
def splitString(self, s, lineLength):
# s = 'The Quick Brown Fox Jumps Over The Lazy Dog' #Test String
string = ''
length = 0
k = 0 #Counter Variable
wordLength = list()
strings = list()
lines = list()
words = s.strip().split()
for k in range(0, len(words)): #Make a list of the word lengths
length = len(words[k])
wordLength.append(length)
k = 0 #Reset Counter
while k len(words):
if len(string) + len(words[k]) + 1 lineLength:
if len(string) == 0:
string += words[k]
else:
string = string + ' ' + words[k]
k += 1
else:
strings.append(string)
string = ''
if k == len(words):
strings.append(string)
string = ''
k = 0 #Reset Counter
101. while k len(strings): #Format for Our Display
if k == len(strings) - 1:
line = strings[k]
lines.append(line)
break
else:
line = strings[k] + 'n' + strings[k + 1]
lines.append(line)
k += 2
return lines
if __name__ == '__main__':
s = raw_input('Enter the string to be separatedn').replace('n', '')
tools = Scroller()
print tools.splitString(s, 16)
102. The Quick Brown Fox Jumps Over The Lazy Dog
['The Quick BrownnFox Jumps Over', 'The Lazy Dog']
103. class NewsAPI:
def get(self,count,key):
Get the homepage form HackerNews
:return: JSON object
url = 'http://api.usatoday.com/open/articles/topnews/news?count='+str(count)+'days=0page=0encoding=jsonapi_key='+key
d = requests.get(url)
JSON = d.json()
return JSON
while True:
z = 0
if update:
nJson = API.get(15, API_KEY)
length = len(nJson['stories'])
for x in range(0, length):
articles.append(nJson['stories'][x]['title'])
update = False
display = tools.splitString(articles[currentTitle], 16)
for y in range(0, len(display)):
z += 1
Timer(y * 2, rotate, args=[display[y]]).start()
time.sleep(z * 2 + 2)
currentTitle = (currentTitle + 1) % len(articles)
109. Summary
Wow! We have learned a lot!!
1. Initial Setup of the Raspberry Pi
2. Made a little LED blink
3. Dealt with an AnalogValue and Displayed it
4.The Basics of JSON
5. Got our feet wet by finding the Time in different places
6. Used our new Knowledge to find the Weather
7.What’s new in the News?
110.
111. Slides:
Code Used in this Talk:
http://tompaulus.com/talks
https://github.com/tpaulus/DCC-April13
Email:
tom@tompaulus.com
112. Slides:
Code Used in this Talk:
http://tompaulus.com/talks
https://github.com/tpaulus/DCC-April13
Email:
tom@tompaulus.com