rasberry pi

32
I I S S S S U U E E 0 0 7 7 - - N N O O V V 2 2 0 0 1 1 2 2 A Magazine for Raspberry Pi Users h h t t t t p p : : / / / / w w w w w w . . t t h h e e m m a a g g p p i i . . c c o o m m Raspberry Pi is a trademark of The Raspberry Pi Foundation. This magazine was created using a Raspberry Pi computer. T T h h i i s s I I s s s s u u e e . . . . . . I I n n t t e e r r u u p p t t s s S S o o l l a a r r P P i i T T u u r r b b o o M M o o d d e e P P i i E E v v o o l l u u t t i i o o n n C C + + + + P P l l u u s s . . . . . . A A n n i i n n t t e e r r v v i i e e w w w w i i t t h h t t h h e e R R a a s s p p b b i i a a n n d d e e v v e e l l o o p p e e r r s s M M a a k k e e y y o o u u r r o o w w n n l l a a d d d d e e r r g g a a m m e e u u s s i i n n g g P P C C B B ' ' s s T T h h e e b b a a s s i i c c s s o o f f G G N N U U m m a a k k e e A A r r d d u u i i n n o o A A n n d d R R a a s s P P i i G G e e t t C C o o n n n n e e c c t t e e d d ! ! A A c c h h a a n n c c e e t t o o w w i i n n a a P P I I N N K K R R a a s s P P i i C C a a s s e e ! ! Support us even more by buying the printed copy of this mag!

Upload: ron-kupper

Post on 11-Mar-2016

224 views

Category:

Documents


0 download

DESCRIPTION

Electronics, computer

TRANSCRIPT

Page 1: rasberry Pi

IISSSSUUEE 0077 -- NNOOVV 22001122

AA MMaaggaazziinnee ffoorr RRaassppbbeerrrryy PPii UUsseerrss

hh tt tt pp :: // // wwwwww .. tt hh eemmaaggpp ii .. cc oomm

Raspberry Pi is a trademark of The Raspberry Pi Foundation.This magazine was created using a Raspberry Pi computer.

TT hh ii ss II ss ss uu ee .. .. ..

•• II nn tt ee rr uu pp tt ss•• SS oo ll aa rr PP ii•• TT uu rr bb oo MMoodd ee•• PP ii EE vv oo ll uu tt ii oo nn•• CC++ ++

PP ll uu ss .. .. ..•• AAnn ii nn tt ee rr vv ii eeww ww ii tt hh tt hh eeRRaa ss pp bb ii aa nn dd ee vv ee ll oo pp ee rr ss•• MMaa kk ee yy oo uu rr oowwnn ll aa dd dd ee rrgg aammee uu ss ii nn gg PPCCBB '' ss•• TT hh ee bb aa ss ii cc ss oo ff GGNNUU mmaa kk ee

AArrdduuiinnoo AAnnddRRaassPPii GGeettCCoonnnneecctteedd!!

AA cchh aa nn cc ee tt ooww ii nn aa PP II NNKKRRaa ssPP ii CC aa ss ee !!

Support us even moreby buying the printedcopy of this mag!

Page 2: rasberry Pi

Welcome to Issue 7,

The Raspberry Pi and Arduino are a perfect match for real time applicationswhere a bit more CPU power is needed for control. Coupling the two devicestogether opens up the possibility to use a wealth of Arduino sheilds too. We lookforward to seeing some really interesting projects in the future.

There is an interview from the lead developer of Raspbian (Debian build for theRaspberry Pi), competitions and a selection of programming articles to get yourteeth into.

If you would prefer to receive your copy of The MagPi in hard copy, visithttp://www.modmypi.com and place your order now!

Ash Stone, Chief Editor of The MagPi

Page 3: rasberry Pi

Contents

Page 4: rasberry Pi

$ sudo apt-get install arduino

$ sudo apt-get install python-serial mercurial$ hg clone https://bitbucket.org/tino/pyfirmata$ cd pyfirmata$ sudo python setup.py install

$ cd .. ; sudo rm -r pyfirmata

Page 5: rasberry Pi

arduino_firmata_ty.py

$ python arduino_firmata_tk.py

Page 6: rasberry Pi

import pyfirmatafrom Tkinter import *

# Create a new board object,# specifying serial port;# could be /dev/ttyUSB0 for older# Arduinosboard = pyfirmata.Arduino('/dev/ttyACM0')

# start an iterator thread so# serial buffer doesn't overflowiter8 = pyfirmata.util.Iterator(board)iter8.start()

# set up pins# A0 Input (LM35)pin0 = board.get_pin('a:0:i')# D3 PWM Output (LED)pin3 = board.get_pin('d:3:p')

# IMPORTANT! discard first reads# until A0 gets something validwhile pin0.read() is None:

pass

def get_temp():# LM35 reading in deg C to labellabel_text = "Temp: %6.1f C" % (

pin0.read() * 5 * 100)label.config(text = label_text)# reschedule after half secondroot.after(500, get_temp)

def set_brightness(x):# set LED# Scale widget returns 0 .. 100# pyfirmata expects 0 .. 1.0pin3.write(float(x) / 100.0)

def cleanup():# clean up on exit# and turn LED back offpin3.write(0)board.exit()

# set up GUIroot = Tk()# ensure cleanup() is called on exitroot.wm_protocol("WM_DELETE_WINDOW",cleanup)

# draw a big slider for LED brightnessscale = Scale(root,

command = set_brightness,orient = HORIZONTAL,length = 400,label = 'Brightness')

scale.pack(anchor = CENTER)

# place label up against scale widgetlabel = Label(root)label.pack(anchor = 'nw')

# start temperature read looproot.after(500, get_temp)# run Tk event looproot.mainloop()

Page 7: rasberry Pi

Last Month's Winners!.

!

NOVEMBER COMPETITION

Page 8: rasberry Pi

A Little RayOf Sunshine…

While browsing for interesting Raspberry Pi devices, I cameacross the following item from CottonPickersPlace.

Page 9: rasberry Pi
Page 10: rasberry Pi
Page 11: rasberry Pi

$ cd$ git clonegit://git.drogon.net/wiringPi$ cd WiringPi$ ./bulid

$ cd$ git clonegit://git.drogon.net/ladder$ cd ladder

$ ./ladderTest.sh

$ ./tuxx.sh

Page 12: rasberry Pi

Setting Up The Pins

echo Hello there.

How to share GPIO resources among multiple applications,and use of interrupts to replace wasteful status check loops.

12

Page 13: rasberry Pi

echo Hello there. >file_01

echo 23 >/sys/class/gpio/export

echo out>/sys/class/gpio/gpio23/direction

echo low >/sys/class/gpio/gpio23/directionecho high>/sys/class/gpio/gpio23/direction

echo 1 >/sys/class/gpio/gpio23/valueecho 0 >/sys/class/gpio/gpio23/value

echo 1 >/sys/class/gpio/gpio23/active_low

Continues on the next page

PleasenoteGPIO reference changes forpins 3,5,7&13onRevision2.0

13

Page 14: rasberry Pi

The Program

gpio_control 23 export

ryniker@raspberrypi:~$ gpio_control16 exportexport failed: Device or resource busy

14

Page 15: rasberry Pi

Another Python program

Expanding The GPIO

A Summary of The URLs

By Richard Ryniker

15

Page 16: rasberry Pi

An interview with Mike Thompson

Page 17: rasberry Pi

Mike Thompson is a Computer Engineer living inthe San Francisco Bay Area. He has a diversebackground in embedded systems design,handheld/mobile application development, PCapplication development and large scale Internetsystems design. He is a serial entrepreneur whoco-founded two previous companies and is thefounder and a lead developer for Raspbian, theleading operating system for the Raspberry Pi.

Page 18: rasberry Pi
Page 19: rasberry Pi

$ sudo raspi-config

$ sudo raspi-config

Page 20: rasberry Pi

$ sudo apt-get update$ sudo apt-get upgrade -y

Page 21: rasberry Pi
Page 22: rasberry Pi

PPII--EEVVOOLLUUTTIIOONN

Page 23: rasberry Pi
Page 24: rasberry Pi

is a central part of building packages of compiled code or documentation on a LINUX system. When runsit reads one or more text files containing targets and dependencies. The targets are only executed if a file is notpresent or is newer than the output file. The syntax also allows multiple dependencies, such that some files arerequired to be built before others. Starting with a first example,

Similar to scripting languages, comments start with a hash or pound character (#). The target has nospaces or tabs in front of it and is followed by a colon. Dependencies for the target can be added after the colon. Theactions are given on lines after the target name and must be prefixed by a tab character. If white spaces are usedmake will report an error.

By default looks for a file called . Therefore, use (described in the issue 3 C cave article) tocreate a file called containing the example above. Then type

The first time is typed the command executes the target, which uses the command to create anempty file of the right name. The second time is typed it, it finds that the file already exists and no action isneeded.

For examples with dependencies, a small C example can be used. In a new directory, create three files:

and

The basics of GNU Make

MMaakkiinngg ccooddee ddeevveellooppmmeenntt ffaasstteerr

24

Page 25: rasberry Pi

Now create a new file called containing,

This time typing make will cause each file to be compiled into a file. Then the files are linked together to forman executable called . The target is the first target in the file and is therefore the defaulttarget. When runs it checks the dependencies of , which are that the and

files exist and are not newer than the target . If the files do not exist then the target tomake the file is run. Any target other than the default target can be run by typing the target name after thecommand, e.g.

Writing files where each of the file names needs to be specified can rapidly become very time consuming.Automatic variables can be used instead of explicitly specified targets,

This has exactly the same as action as the previous one. The automatic variable is the target name,are the names of all of the dependencies, and is the name of the first prerequisite. For each file required by thedefault target, make tries the wildcard . If the file is missing make will report an error.

Wildcards can also be used to define a list of objects from the list of files in the present working directory,

where is a variable. In this case, all of the files in the present working directory are used to build anexecutable called . The command lists all files which match the pattern . Thenremoves the ending an replaces it with . The resulting list is assigned to the variable. Try using

to update each file time stamp and then re-run make to see what happens.

files can have many layers of dependencies. For software distribution on multiple platforms, the Makefiles aretypically generated from templates using the tool.

Article by W. H. Bell

25

Page 26: rasberry Pi

#include <iostream>using namespace std;

int main(){

//Output a message.cout << “Hello, welcome to C++” << endl;return 0;

}

Page 27: rasberry Pi

#include <iostream>using namespace std;

int main(){

//Create 2 variablesint a, b;a = 1;b = 2;

//Output the sum of these variablescout << “a + b = ” << a + b << endl;return 0;

}

#include <iostream>using namespace std;

int main(){

//Create 2 variablesint a, b;

//Ask for and store user inputcout << “Input the first number: ”;cin >> a;

cout << “Input the second number: ”;cin >> b;

//Output the sum of these variablescout << a << “ + ” << b << “ = ” << a + b << endl;return 0;

}

Page 28: rasberry Pi
Page 29: rasberry Pi
Page 30: rasberry Pi

# line generator with command line arguments# By Colin Deady - 03 October 2012

import os, pygame, argparse, sysfrom pygame.locals import *

# initialise pygame (to render the image)pygame.init()

# Define two functions that will be used:

# 1) fnAppend2Log will write a line to a log filedef fnAppend2Log( line2write ):

logfile = open('lines.log', 'a')logfile.write(line2write + '\n')logfile.close()

# 2) fnPlotLines will render a quarter of the shape.# Uses the previous co-ordinates as the new starting co-ordinatesdef fnPlotLines(quarter, sX, sY, eX, eY, incSX, incSY, incEX, incEY ):

fnAppend2Log(quarter + ' quarter co-ordinates:')

# calculate and loop through line co-ordinatesfor i in range(0,iterations, args.step):

nSX = sX + (incSX * i) # start XnSY = sY + (incSY * i) # start YnEX = eX + (incEX * i) # end XnEY = eY + (incEY * i) # end Y

# draw a line between the pair of co-ordinates.pygame.draw.line(screen,(lineColour),(nSX,nSY),(nEX,nEY),1)

python lines.py -h

python lines.py -s 3 -t 4

Page 31: rasberry Pi

# construct a string for the window title and the log filecoordText = '('+str(nSX)+','+str(nSY)+')-

('+str(nEX)+','+str(nEY)+')'# render the image line by line (takes longer)?if args.renderlines == 'y':

pygame.display.update();pygame.display.set_caption(coordText)

# output co-ordinates to the logfnAppend2Log(coordText)

# return the final calculated co-ordinatesreturn (nSX, nSY, nEX, nEY);

# define the command line arguments:parser = argparse.ArgumentParser(description='Render shape')parser.add_argument('-s', action='store', dest='scale', type=int,

default=2, help='Render size, default=2, 200x200px)')parser.add_argument('-t', action='store', dest='step', type=int,

default=5,help='Lower step values for denser lines (default=5)')

parser.add_argument('-r', action='store', dest='renderlines',choices=('y','n'), default='y',help='Render line by line (Y) or finished object (n)')

args = parser.parse_args()

# Define the variables that will be neededsz = 100*args.scale # size in pixels horiz x vert of a quarter imageiterations = sz +5 # number of lines to render per quarterlineColour = 0,0,255 # the colour of the line to draw (blue)

# open a pygame screen on which to render our objects# the image size is twice the object to be rendered as we render 4 quartersscreen = pygame.display.set_mode([sz*2,sz*2],0,32)

# Draw the lines, quarter by quarter, returning the co-ordinate pairs# The starting co-ordinates equal the end from the last quarter renderedsx, sy, ex, ey = fnPlotLines('Top left', sz, 0, sz, sz, 0, 1, -1, 0 )sx, sy, ex, ey = fnPlotLines('Bottom left', ex, ey, sx, sy, 1, 0, 0, 1 )sx, sy, ex, ey = fnPlotLines('Bottom right', ex, ey, sx, sy, 0, -1, 1, 0 )sx, sy, ex, ey = fnPlotLines('Top right', ex, ey, sx, sy, -1, 0, 0, -1 )

# if rendering each line is suppressed then display the final imageif args.renderlines == 'n':

pygame.display.update();

# save the rendered image to a filepygame.image.save(screen, 'lineimage.png')

# display the result for 10 secondspygame.time.wait(10000)

Page 32: rasberry Pi

Feedback & Question TimeQ: Regarding the Skutter series,you mention a robot arm can bemounted. Could you pleasespecify which robot arm andwhere I can get it?

Richard

A: Skutter is a long-term series,with the first article published inissue 1 of The MagPi. Thiscontains some backgroundinformation: "The robotic arm kitcalled the OWI Edge is currentlyavailable from Maplin electronicsand it uses a simple USB interfaceto control it."http://www.maplin.co.uk/robotic-arm-kit-with-usb-pc-interface-266257

Q: Is it going to be possible toview the mag on an iPad in thenear future or am I missing thepoint?

John

A: The Issuu site we use hasrecently started to supportHTML5, so it should now work oniPads and iPhones etc. You canalso download the PDF and view itwithin iBooks. We are currentlyworking with a developerregarding a Newsstand app.

Thank you for making a printededition of The MagPi availablefrom http://www.modmypi.com. Ialways print out each issuebecause I prefer to read frompaper rather than online. Imaginemy surprise to discover that thecost is only £2.49. It almost coststhat much for me to print out 32colour pages myself!

Ian

Q: As a new user of theRaspberry Pi I'm very interested inyour excellent magazine. I havehad no difficulty reading yourIssues 1 to 6 on my desktopcomputer that uses Linux Mint 13.Imagine my disappointment whenI found that, of the six issues, Ican only open Issue 3 on myRaspberry Pi. Not being familiarwith the MuPDF program thatRaspbian uses, I thought I'd bettercheck by installing and testingMuPDF on my Linux Mintmachine. The result is that everyMagPi issue opens without aproblem using MuPDF on myLinux machine. This is possiblynot your technical problem but Ithought you would want to knowthat a significant and growingnumber of Raspberry Pi ownerscannot read your magazine.

Lloyd

A: This problem extends to manyother PDF files. MuPDF seems towork fine for some users but notothers. Personally I have removedMuPDF and use xPDF instead,which works with everything. Youcan do this with the followingcommands:$ s u d o a p t - g e t r emo v e MuPDF

$ s u d o a p t - g e t i n s t a l l x PDF