the magpi issue 14 en

36
I I S S S S U U E E 1 1 4 4 - - J J U U L L 2 2 0 0 1 1 3 3 A A M M a a  g  g a a z z i i n n e e f   f  o o r r R  R  a a s s  p  p b b e e r r r r y y P P i i U U s s e e r r s s 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 R Ra as sp pb be er rr y y P Pi i i i s s a a t t r r a ad de ema ar r k k o of f T Th he e R Ra as sp pb be er r r y y P Pi i F Fo ou un nd da at t i i o on n. . T Th hi i s s m ma ag ga az zi i n ne e w wa as s c cr e ea at t e ed d u us si i n ng g a a R Ra as sp pb be er r r r y y P Pi i c co om mp pu ut t e er r . . G G e e t t p p r r i i n n t t e e d d c c o o p p i i e e s s a a t t t t h h e e m m a a g g p p i i . . c c o o m m I I  /  / O O a a n n d d l l o o g g i i c c e e x x p p a a n n s s i i o o n n R R o o b b o o t t i i c c a a r r m m c c o o n n t t r r o o l l P P a a r r a a l l l l e e l l p p r r o o c c e e s s s s i i n n g g B B o o o o t t c c a a m m p p r r e e p p o o r r t t L L E E D D m m a a t t r r i i x x C C h h a a r r m m J J A A V V A A T T h h e e c c a a m m e e r r a a m m o o d d u u l l e e Win a 512MB Raspb erry Pi & interfacing goodies 

Upload: nebojsa-mihajlovic

Post on 02-Apr-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 1/36

IISSSSUUEE 1144 -- JJUULL 22001133

A A 

M M 

a a  g  g a a z z i i n n e e f   f  o o r r R  R  a a s s  p  p b b e e r r r r y y P P i i U U s s e e r r s s 

hh tt tt pp :: /  /  /  / ww ww ww .. tt hh ee mm aa gg pp ii .. cc oo mmRRaassppbbeerrrryy PPii iiss aa ttrraaddeemmaarrk k ooff TThhee RRaassppbbeerrrryy PPii FFoouunnddaattiioonn..TThhiiss mmaaggaazziinnee wwaass ccrreeaatteedd uussiinngg aa RRaassppbbeerrrryy PPii ccoommppuutteerr..

GGeett pprriinntteedd ccooppiieess

aatt tthheemmaaggppii..ccoomm

II /  / OO aanndd llooggiicc eexxppaannssiioonn

RRoobboottiicc aarrmm ccoonnttrrooll

PPaarraalllleell pprroocceessssiinngg

BBoooottccaammpp rreeppoorrtt

LLEEDD mmaattrriixxCChhaarrmm

JJAAVVAA

TThhee ccaammeerraa

mmoodduullee

Win a 512MB 

Raspberry Pi 

& interfacing 

goodies 

Page 2: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 2/36

A s h S t o n e      - C h i e f E d i t o r / A d m i n i s t r a t i o n / P r o o f R e a d i n g      

W . H . B e l l    - I s s u e E d i t o r / L a y o u t / G r a p h i c s / A d m i n i s t r a t i o n      

B r y a n B u t l e r    - P a g e D e s i g n / G r a p h i c s      

I a n M c A l p i n e      - L a y o u t / T e s t e r / P r o o f R e a d i n g      

C h r i s ' t z j ' S t a g g      - T e s t e r    

C o l i n D e a d y      - L a y o u t / P r o o f R e a d i n g      

M a t t J u d g e      - W e b s i t e / A d m i n i s t r a t i o n      

A a r o n S h a w        - L a y o u t    

S h e l t o n C a r u t h e r s      - P r o o f R e a d i n g      

T h e M a g P i T e a m          

M e l t w a t e r    - P r o o f R e a d i n g      

S a i Y a m a n o o r    - T e s t e r    

J a m e s N e l s o n      - P r o o f R e a d i n g      

A d r i a n H a r p e r    - L a y o u t    

P a u l C a r p e n t e r    - T e s t e r    

D a v e A l l a n      - T e s t e r    

C l a i r e P r i c e      - P r o o f R e a d i n g      

P h i l T e s s e y m a n      - T e s t e r    

S t e v e D r e w        - L a y o u t    

14

W e l c o m e t o t h e 1 4 t h i s s u e o f T h e M a g P i - a n o t h e r f u l l y l o a d e d g u i d e t o a l l t h i n g s R a s p b e r r y P i !    

T h i s m o n t h w e b e g i n o u r j o u r n e y i n i n t r o d u c i n g t h e n e w e s t m o d u l e i n t h e R a s p b e r r y P i w o r l d , t h e      

c a m e r a , w i t h a g r e a t g u i d e w r i t t e n b y J a m e s H u g h e s o n s e t u p a n d b a s i c o p e r a t i o n . T h e c o n c l u s i o n o f    

t h i s a r t i c l e w i l l b e f o u n d i n n e x t m o n t h ' s e d i t i o n w h e r e J a m e s b u i l d s o n t h e s e f o u n d a t i o n s w i t h h i n t s a n d      

t i p s o n a d v a n c e d u s a g e .  

W e r e l o a d t h e M a t r i x w i t h p a r t t w o o f t h e i n t e r e s t i n g P i M a t r i x a r t i c l e , t a k e a l o o k a t t h e G u z u n t y b o a r d      

a n d r e v i e w t h e e v e r p o p u l a r S o u t h W e s t R a s p b e r r y P i B o o t C a m p s .  

W e b r i n g y o u m o r e o n t h e p r o g r a m m i n g l a n g u a g e s C h a r m , S c r a t c h a n d P y t h o n p l u s b r i n g y o u t h e f i r s t    

M a g P i a r t i c l e o n t h e p o p u l a r l a n g u a g e , J a v a .  

I a m p l e a s e d t o r e p o r t t h a t a l l p r e - o r d e r V o l u m e 1 M a g P i b u n d l e s o r d e r e d v i a K i c k s t a r t e r o r    

t h e m a g p i . c o m h a v e n o w s h i p p e d . W e w i l l s o o n h a v e i n d i v i d u a l i s s u e s c o m i n g t o p r i n t . W e h o p e y o u      

e n j o y t h e p r i n t e d e d i t i o n s a n d t h a n k y o u a g a i n f o r y o u r s u p p o r t a n d p a t i e n c e i n h e l p i n g m a k e t h e d r e a m        

a r e a l i t y .  

A s h S t o n e      

C h i e f E d i t o r o f T h e M a g P i  

Page 3: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 3/36

Page 4: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 4/36

D I F F I C U L T Y : B E G I N N E R        

J a m e s H u g h e s      

G u e s t W r i t e r    

B A S I C O P E R A T I O N        

G e t t i n g t o g r i p s w i t h t h e c a m e r a m o d u l e      

T h e R a s p b e r r y P i c a m e r a - p a r t 1    

A f e w w e e k s a g o , t h e R a s p b e r r y P i F o u n d a t i o n      

l a u n c h e d t h e i r f i r s t p e r i p h e r a l , a 5 M P c a m e r a .  

P r i c e d a t $ 2 5 , t h e s a m e p r i c e a s t h e m o d e l A , i t ’ s      

a v e r y s m a l l P C B o n w h i c h i s a n O m n i v i s i o n      

O V 5 6 4 7 c a m e r a m o d u l e . I t c o n n e c t s t o e i t h e r t h e      

M o d e l A o r M o d e l B R a s p b e r r y P i u s i n g a 1 5 c m        

1 5 w a y r i b b o n c o n n e c t o r .  

O v e r t h e c o u r s e o f t h i s s e r i e s I w i l l t a k e y o u      

t h r o u g h i n i t i a l c o n n e c t i o n o f t h e c a m e r a t o y o u r    

R a s p b e r r y P i a n d w i l l s h o w y o u s o m e o f t h e      

b a s i c c o m m a n d s u s e d t o t a k e b o t h s t i l l a n d v i d e o      

i m a g e r y . A t t h e e n d , s o m e o f t h e m o r e      

s o p h i s t i c a t e d f e a t u r e s w i l l a l s o b e e x p l a i n e d . N o t    

e v e r y o p t i o n w i l l b e c o v e r e d ( n e w o p t i o n s a r e      

b e i n g a d d e d a l l t h e t i m e s o i t ’ s d i f f i c u l t t o k e e p      

u p ) b u t h o p e f u l l y t h i s a r t i c l e w i l l g i v e e n o u g h      

i n f o r m a t i o n f o r y o u t o b e a b l e t o c o v e r m o s t    

i m a g e t a k i n g t a s k s . F i r s t l y t h o u g h , a d e s c r i p t i o n      

o f h o w t h e c a m e r a m o d u l e c a m e t o b e . . .  

H i s t o r y      

F r o m i t s f i r s t l a u n c h t h e R a s p b e r r y P i h a s h a d a      

c o n n e c t o r o n i t t o a t t a c h a c a m e r a t o t h e G P U        

( t h e V i d e o C o r e 4 G r a p h i c s P r o c e s s i n g U n i t o n      

t h e R a s p b e r r y P i ) . T h i s c o n n e c t i o n u s e s t h e C S I -    

2 e l e c t r i c a l p r o t o c o l a n d i s a s t a n d a r d u s e d i n      

m o s t m o b i l e p h o n e s . I t i s a n e x t r e m e l y f a s t    

c o n n e c t i o n , w h i c h o n t h e R a s p b e r r y P i i s      

c a p a b l e o f s e n d i n g 1 0 8 0 p s i z e d i m a g e s      

( 1 9 2 0 x 1 0 8 0 x 1 0 b p p ) a t 3 0 f r a m e s p e r s e c o n d ,  

o r l o w e r r e s o l u t i o n a t e v e n h i g h e r f r a m e r a t e s . I t    

h a d a l w a y s b e e n i n t e n d e d a t s o m e p o i n t t o      

r e l e a s e a c a m e r a m o d u l e t h a t c o u l d u s e t h i s      

c o n n e c t i o n , a s t h e a b i l i t y t o s t r e a m h i g h s p e e d      

v i d e o d a t a t h r o u g h t h e G P U w i t h o u t a n y      

i n t e r a c t i o n w i t h t h e A R M p r o c e s s o r w o u l d a l w a y s      

m a k e t h e c a m e r a m u c h m o r e e f f i c i e n t t h a n a n y      

U S B a t t a c h e d w e b c a m . I t w o u l d a l s o e n a b l e t h e      

u s e o f t h e G P U ’ s a b i l i t y t o e n c o d e H 2 6 4 v i d e o ,  

o r J P E G i m a g e s i n h a r d w a r e .  

I t t u r n s o u t t h a t p r o d u c t i s i n g a t i n y P C B l i k e t h e      

c a m e r a b o a r d i s n o t a q u i c k t a s k ! T h e p r o t o t y p e      

w a s r e - d e s i g n e d t o r e m o v e s o m e u n n e c e s s a r y      

c o m p o n e n t s , b u t m o r e i m p o r t a n t l y , t o m o v e t h e      

c a m e r a c r y s t a l , u s e d f o r t i m i n g , t o t h e P C B i t s e l f .  

Page 5: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 5/365     

E l e c t r o m a g n e t i c c o m p a t i b i l i t y ( E M C ) t e s t i n g h a d      

s h o w n t h a t t h e 2 5 M h z c l o c k p r o v i d e d b y t h e      

G P U c a u s e d t o o m u c h i n t e r f e r e n c e a s i t p a s s e d      

u p t h e r i b b o n c a b l e t o t h e P C B . A d d i n g a c r y s t a l  

t o t h e P C B i t s e l f s t o p p e d t h i s i n t e r f e r e n c e . A        

c o u p l e m o r e b o a r d d e s i g n s l a t e r , t o h e l p w i t h      

p r o d u c t i o n l i n e m a n u f a c t u r e a n d t e s t i n g , a n d      

e v e n t u a l l y , a b o u t a y e a r a f t e r t h e f i r s t p r o t o t y p e s ,  

t h e p r o d u c t i o n b o a r d w a s r e a d y .  

M e a n w h i l e , w o r k h a d b e e n o n g o i n g t o w r i t e a      

c o u p l e o f a p p l i c a t i o n s t o m a k e u s e o f t h e      

c a m e r a , t o u p d a t e t h e G P U f i r m w a r e t o s u p p o r t    

t h e c a m e r a , a n d t o i m p r o v e t h e c a m e r a t u n i n g a s      

t h e b a s i c t u n i n g a l r e a d y i n p l a c e h a d a n u m b e r o f    

o b v i o u s d e f e c t s .  

C a m e r a t u n i n g i s a c o m p l e x t a s k , w h i c h h a s      

b e e n c o v e r e d o n t h e R a s p b e r r y P i w e b s i t e , s o I  

w o n ’ t r e p e a t i t h e r e . S u f f i c e i t t o s a y , t h e e n d      

r e s u l t s a r e w e l l w o r t h t h e e x t r a e f f o r t p u t i n b y      

D a v i d P l o w m a n w h i l e a t B r o a d c o m . T h a n k s      

D a v i d .  

S o , w i t h t h e h i s t o r y o u t o f t h e w a y , l e t ’ s t a k e a      

l o o k a t g e t t i n g y o u r c a m e r a g o i n g .  

S e t t i n g u p      

F i r s t l y , i t ’ s i m p o r t a n t t o s t a r t w i t h a w a r n i n g .  

C a m e r a s l i k e t h e s e a r e s t a t i c s e n s i t i v e . Y o u      

s h o u l d e a r t h y o u r s e l f p r i o r t o h a n d l i n g t h e P C B ( a      

s i n k t a p / f a u c e t o r s i m i l a r s h o u l d s u f f i c e i f y o u      

d o n ’ t h a v e a n e a r t h i n g s t r a p ) .  

T h e r e a r e o n l y t w o c o n n e c t i o n s t o m a k e , t h e      

r i b b o n c a b l e n e e d s t o b e a t t a c h e d t o t h e c a m e r a      

P C B a n d t h e R a s p b e r r y P i i t s e l f . Y o u n e e d t o g e t    

i t t h e r i g h t w a y r o u n d o r t h e c a m e r a w i l l n o t w o r k .  

O n t h e c a m e r a P C B , t h e b l u e b a c k i n g o n t h e      

c a b l e s h o u l d b e a w a y f r o m t h e P C B , a n d o n t h e      

R a s p b e r r y P i i t s h o u l d b e t o w a r d s t h e e t h e r n e t    

c o n n e c t i o n ( o r w h e r e t h e e t h e r n e t c o n n e c t o r    

w o u l d b e i f y o u a r e u s i n g a m o d e l A ) .  

A l t h o u g h t h e c o n n e c t o r s o n t h e P C B a n d t h e P i  

a r e d i f f e r e n t , t h e y w o r k i n a s i m i l a r w a y . O n t h e      

R a s p b e r r y P i , y o u n e e d t o p u l l u p t h e t a b s o n      

e a c h e n d o f t h e c o n n e c t o r .  

I t s h o u l d s l i d e u p e a s i l y , a n d b e a b l e t o p i v o t    

a r o u n d s l i g h t l y . F u l l y i n s e r t t h e r i b b o n c a b l e i n t o      

t h e s l o t , e n s u r i n g i t i s s t r a i g h t , t h e n g e n t l y p r e s s      

d o w n t h e t a b s t o c l i p i t i n t o p l a c e . T h e c a m e r a      

P C B i t s e l f a l s o r e q u i r e s y o u t o p u l l t h e t a b s a w a y      

f r o m t h e b o a r d , g e n t l y i n s e r t t h e c a b l e , t h e n p u s h      

t h e t a b s b a c k .  

T h e P C B c o n n e c t o r i s a l i t t l e m o r e a w k w a r d t h a n      

t h e o n e o n t h e P i i t s e l f . T h e r e i s a v i d e o a t    

h t t p : / / y o u t u . b e / G I m e V q H Q z s E w h i c h s h o w s t h e      

c o n n e c t i o n s b e i n g m a d e .  

S o , w e n o w h a v e t h e h a r d w a r e a l l a t t a c h e d , w e      

n o w n e e d t o m a k e s u r e w e h a v e t h e c o r r e c t    

s o f t w a r e i n s t a l l e d . A s e x p l a i n e d a b o v e , t h e r e a r e      

s o m e c o m m a n d l i n e a p p s t o i n s t a l l , a n d a      

f i r m w a r e u p g r a d e w i t h t h e c a m e r a d r i v e r a n d      

t u n i n g t o i n s t a l l . T h i s p r o c e s s m a y n o t b e      

n e c e s s a r y i n f u t u r e a s n e w e r d i s t r o ’ s a r e      

Page 6: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 6/36

r e l e a s e d w h i c h a l r e a d y c o n t a i n t h e r e q u i r e d f i l e s .  

T o u p d a t e t h e f i r m w a r e , l i b r a r i e s a n d      

a p p l i c a t i o n s , e x e c u t e t h e f o l l o w i n g i n s t r u c t i o n s      

o n t h e c o m m a n d l i n e .  

sudo apt-get updatesudo apt-get upgrade

N o w y o u n e e d t o e n a b l e c a m e r a s u p p o r t u s i n g      

t h e r a s p i - c o n f i g p r o g r a m y o u w i l l h a v e u s e d      

w h e n y o u f i r s t s e t u p y o u r R a s p b e r r y P i .  

sudo raspi-config

U s e t h e c u r s o r k e y s t o m o v e t o t h e c a m e r a      

o p t i o n a n d s e l e c t e n a b l e . W h e n y o u e x i t r a s p i -    

c o n f i g i t w i l l a s k t o r e b o o t . T h e e n a b l e o p t i o n w i l l  

e n s u r e t h a t o n r e b o o t t h e c o r r e c t G P U f i r m w a r e      

w i l l b e r u n n i n g ( w i t h t h e c a m e r a d r i v e r a n d      

t u n i n g ) , a n d t h e G P U m e m o r y s p l i t i s s u f f i c i e n t t o      

a l l o w t h e c a m e r a t o a c q u i r e e n o u g h m e m o r y t o      

r u n c o r r e c t l y . R u n n i n g a c a m e r a a n d a s s o c i a t e d      

e n c o d e r d o e s t a k e u p a b i g c h u n k o f m e m o r y , a s      

t h e i m a g e s a r e l a r g e , a n d t h e r e n e e d s t o b e a t    

l e a s t t w o o f t h e m i n m e m o r y a t a n y t i m e i n o r d e r    

t o p r o v i d e a d o u b l e ( i n s o m e c a s e s t r i p l e ) b u f f e r    

w h i c h p r e v e n t s ' t e a r i n g ' o f i m a g e s d u r i n g d i s p l a y .  

C h e c k i n g i t w o r k s      

O K , w e h a v e c o n n e c t e d t h e h a r d w a r e , a n d      

i n s t a l l e d t h e s o f t w a r e . N o w w e n e e d t o s e e i f i t i s      

a l l w o r k i n g c o r r e c t l y ! T h e q u i c k e s t w a y i s j u s t t o      

t y p e i n      

raspistill -t 5000

T h i s r u n s t h e s t i l l s c a p t u r e p r o g r a m f o r 5      

s e c o n d s ( o r 5 0 0 0 m i l l i s e c o n d s . N o t e t h a t a l l  

t i m e s u s e d a r e i n m i l l i s e c o n d s ) . Y o u s h o u l d s e e      

t h e w h o l e d i s p l a y r e p l a c e d w i t h a m o v i n g i m a g e      

o f w h a t e v e r t h e c a m e r a i s l o o k i n g a t . I f y o u d o n ’ t    

s e e t h e p r e v i e w a p p e a r , o r t h e r e a r e e r r o r    

m e s s a g e s d i s p l a y e d , g o s t r a i g h t t o t h e      

T r o u b l e s h o o t i n g s e c t i o n a t t h e e n d o f t h e a r t i c l e !    

S o , w h a t c a n i t d o ?      

A s w i t h a n y c a m e r a , i t c a n w o r k i n t w o w a y s . W e      

c a n c a p t u r e s t i l l i m a g e s , j u s t l i k e a c a m e r a , o r w e      

c a n c a p t u r e v i d e o , l i k e a c a m c o r d e r . T h e t w o      

d e m o a p p l i c a t i o n s p r o v i d e d h a n d l e t h e s e t a s k s      

s e p a r a t e l y . A l t h o u g h i t w o u l d b e q u i t e p o s s i b l e t o      

c o m b i n e t h e m i n t o o n e a p p l i c a t i o n , t h a t m a k e s      

t h e c o d e m o r e c o m p l i c a t e d , a n d a s d e m o c o d e a      

l o t o f e f f o r t w a s p u t i n t o m a k e i t a s e a s y t o      

u n d e r s t a n d a s p o s s i b l e . A s a n a s i d e , t h e C        

l a n g u a g e s o u r c e c o d e f o r t h e a p p l i c a t i o n s i s      

p u b l i c l y a v a i l a b l e f r o m t h e F o u n d a t i o n ' s g i t h u b      

r e p o s i t o r y . A n y o n e i s w e l c o m e t o p l a y a r o u n d      

w i t h i t a n d a l t e r i t f o r t h e i r p a r t i c u l a r p u r p o s e s .  

T h e c o d e i s w e l l c o m m e n t e d a n d u s e s t h e      

D o x y g e n c o m m e n t i n g s c h e m e s o y o u c a n      

p r o d u c e H T M L d o c u m e n t a t i o n d i r e c t l y f r o m t h e      

s o u r c e c o d e .  

S o , o n t o t h e a p p s t h e m s e l v e s . T h e y a r e      

c o m m a n d l i n e a p p l i c a t i o n s , a n d d o n o t n e e d t o      

b e r u n f r o m a d e s k t o p e n v i r o n m e n t s i n c e t h e      

p r e v i e w o u t p u t f r o m t h e a p p s i s s u p e r i m p o s e d      

o v e r t h e t o p o f a n y d e s k t o p o r c o n s o l e b e i n g      

u s e d . T y p i n g j u s t t h e n a m e o f t h e a p p l i c a t i o n , o r    

a d d i n g - - h e l p o r - ? t o t h e c o m m a n d l i n e w i l l  

p r o d u c e a l i s t o f a l l t h e a v a i l a b l e o p t i o n s . T h e l i s t    

i s q u i t e l o n g , s o y o u m a y w a n t t o p i p e t h e o u t p u t    

i n t o ‘ l e s s ’ s o y o u c a n s c r o l l u p a n d d o w n t o r e a d      

i t . 

raspistill | lessraspivid | less

Page 7: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 7/367     

B a s i c o p t i o n s      

B o t h a p p l i c a t i o n s u s e t h e - t o p t i o n t o s p e c i f y t h e      

l e n g t h o f t i m e i n m i l l i s e c o n d s t h e y s h o u l d      

c o n t i n u e r u n n i n g .  

S o “ r a s p i s t i l l - t 3 0 0 0 ” w i l l r u n t h e c a m e r a f o r 3      

s e c o n d s .  

I n t h e s t i l l s c a s e , a n d i f a f i l e n a m e i s s p e c i f i e d ,  

t h e c a p t u r e o f t h e s t i l l w i l l t a k e p l a c e a t t h e e n d o f    

t h e t i m e p e r i o d . I n t h e v i d e o c a s e , a n d a g a i n i f a      

f i l e n a m e i s s p e c i f i e d , t h e c a p t u r e s t a r t s s t r a i g h t    

a w a y a n d w i l l b e a s l o n g a s t h e t i m e p e r i o d .  

T o s p e c i f y t h e f i l e n a m e o f t h e o u t p u t f i l e , y o u u s e      

t h e - o o p t i o n . T h e f o l l o w i n g c o m m a n d r u n s t h e      

c a m e r a f o r 2 s e c o n d s a n d a t t h e e n d o f t h e      

p e r i o d w i l l t a k e a s t i l l i m a g e , s a v i n g i t t o t h e f i l e      

i m a g e . j p g .  

raspistill -o image.jpg -t 2000

T h i s c o m m a n d w i l l d o t h e s a m e b u t w i l l s a v e a 2      

s e c o n d H 2 6 4 v i d e o f i l e c a l l e d v i d e o . h 2 6 4      

raspivid -o video.h264 -t 2000

Y o u d o n ’ t n e e d t o s p e c i f y a f i l e n a m e f o r t h e      

o u t p u t - i f y o u d o n ’ t t h e n n o c a p t u r e i s d o n e , b u t    

t h e p r e v i e w w i l l s t i l l b e r u n f o r t h e s p e c i f i e d t i m e .  

I f y o u d o n ’ t s p e c i f y a t i m e , t h e n 5 s e c o n d s i s      

u s e d a s a d e f a u l t .  

T h e f o l l o w i n g w i l l t a k e a p i c t u r e a f t e r 5 s e c o n d s .  

raspistill -o image.jpg

S o w e h a v e m a d e s o m e f i l e s , b u t h o w d o w e s e e      

w h a t t h e y l o o k l i k e ? W e l l , t o v i e w J P G i m a g e s ,  

t h e F B I p r o g r a m i s q u i t e u s e f u l . Y o u c a n i n s t a l l i t    

q u i c k l y u s i n g :  

sudo apt-get install fbi

T h e n y o u c a n e a s i l y d i s p l a y y o u r J P G i m a g e s ,  

z o o m i n a n d o u t ( u s e - a n d + ) e t c .  

fbi image.jpg

T o v i e w v i d e o , y o u c a n u s e t h e a l r e a d y i n s t a l l e d      

o m x p l a y e r .  

omxplayer video.h264

P r e v i e w o p t i o n s      

Y o u c a n s p e c i f y w h e t h e r y o u w a n t t h e p r e v i e w        

d i s a b l e d ( - n ) , o r w h e t h e r i t i s t o a p p e a r f u l l  

s c r e e n ( - f ) o r i n a w i n d o w ( - p ) . Y o u c a n a l s o      

s p e c i f y w h a t o p a c i t y ( - o p ) t h e p r e v i e w w i n d o w i s      

t o h a v e ( s o y o u c a n s e e t h e d e s k t o p u n d e r n e a t h      

i f n e c e s s a r y ) .  

T o d i s p l a y t h e p r e v i e w i n a w i n d o w a t p o s i t i o n      

1 0 0 , 1 0 0 , w i d t h 5 0 0 , h e i g h t 4 0 0 a n d a t 5 0 %          

o p a c i t y ( 0 - t r a n s p a r e n t t o 2 5 5 - o p a q u e ) , e n t e r :  

raspistill -p 100,100,500,400 -op 128 -oimage.jpg

T o d i s a b l e p r e v i e w c o m p l e t e l y , e n t e r :  

raspistill -n -o image.jpg

J o i n u s i n i s s u e 1 5 o f T h e M a g P i w h e r e s o m e o f    

t h e m o r e a d v a n c e d f e a t u r e s w i l l b e d i s c u s s e d !    

T r o u b l e s h o o t i n g      

I f y o u r c a m e r a i s n o t w o r k i n g , t h e r e a r e a n u m b e r    

o f t h i n g s t o c h e c k t o e n s u r e i t i s s e t u p c o r r e c t l y .  

1 ) A r e t h e r i b b o n c o n n e c t o r s a l l f i r m l y s e a t e d a n d      

t h e r i g h t w a y r o u n d ? 2 ) I s t h e c a m e r a m o d u l e      

c o n n e c t o r f i r m l y a t t a c h e d t o t h e c a m e r a P C B ?      

3 ) H a v e y o u r u n s u d o a p t - g e t u p d a t e , s u d o a p t -    

g e t u p g r a d e ? 4 ) H a v e y o u r u n r a s p i - c o n f i g a n d      

e n a b l e d t h e c a m e r a ?      

S o , i f t h i n g s a r e s t i l l n o t w o r k i n g , t r y t h e f o l l o w i n g :  

E r r o r : r a s p i s t i l l / r a s p i v i d n o t f o u n d .   T h i s      

p r o b a b l y m e a n s y o u r u p d a t e / u p g r a d e f a i l e d i n      

s o m e w a y . T r y i t a g a i n .  

E r r o r : E N O M E M d i s p l a y e d .   C a m e r a i s n o t    

s t a r t i n g u p . C h e c k a l l c o n n e c t i o n s a g a i n .  

E r r o r : E N O S P C d i s p l a y e d .   C a m e r a i s      

p r o b a b l y r u n n i n g o u t o f G P U m e m o r y . C h e c k      

c o n f i g . t x t i n t h e / b o o t / f o l d e r . T h e g p u _ m e m        

o p t i o n s h o u l d b e a t l e a s t 1 2 8 .  

Page 8: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 8/36

D I F F I C U L T Y : B E G I N N E R        

P e t e r L a v e l l e      

G u e s t W r i t e r    

P Y T H O N C O N T R O L      

C o n t r o l u s i n g a P y t h o n s c r i p t    

C o n t r o l l i n g t h e M a p l i n / O W I r o b o t    

r o b o t i c a r m          

I n t r o d u c t i o n      

T h i s a r t i c l e e x p a n d s o n t h e w o r k b y J a m i e S c o t t ,  

e t a l i n t h e W i k i h o w a r t i c l e a t    

h t t p : / / w w w . w i k i h o w . c o m / U s e - a - U S B - R o b o t i c -    

A r m - w i t h - a - R a s p b e r r y - P i - ( M a p l i n ) a n d a l l o w s      

y o u t o c o n t r o l t h e m o v e m e n t o f t h e a r m u s i n g a      

s e q u e n c e o f i n s t r u c t i o n s r e a d f r o m a C S V        

( C o m m a S e p a r a t e d V a r i a b l e s ) f o r m a t t e d f i l e b y a      

P y t h o n s c r i p t .  

T h i s a r t i c l e a s s u m e s y o u a r e u s i n g t h e R a s p b i a n      

d i s t r i b u t i o n b u t y o u s h o u l d a l s o b e a b l e t o g e t    

t h i s w o r k i n g u s i n g t h e O c c i d e n t a l i s d i s t r i b u t i o n      

f r o m A d a f r u i t . ( M o r e i n f o r m a t i o n a b o u t t h i s      

d i s t r i b u t i o n c a n b e f o u n d a t    

h t t p : / / l e a r n . a d a f r u i t . c o m / a d a f r u i t - r a s p b e r r y - p i -    

e d u c a t i o n a l - l i n u x - d i s t r o / o v e r v i e w ) .  

C o n f i g u r i n g y o u r R a s p b e r r y P i    

B e f o r e y o u c a n s t a r t u s i n g t h e s c r i p t , t h e r e a r e a      

f e w t h i n g s y o u w i l l h a v e t o d o t o g e t y o u r    

R a s p b e r r y P i r e a d y . T h e f i r s t t h i n g y o u w i l l n e e d      

t o d o i s a d d t h e u s e r a c c o u n t y o u a r e u s i n g o n      

t h e R a s p b e r r y P i t o t h e ' p l u g d e v ' g r o u p .  

A s s u m i n g y o u a r e u s i n g t h e d e f a u l t ' p i ' u s e r    

a c c o u n t , t h e c o m m a n d t o d o t h i s w i l l b e :  

sudo usermod -aG plugdev pi

T h e n e x t s t e p i s t o a d d a u d e v r u l e t o a l l o w t h e      

' p i ' u s e r t o s e n d c o m m a n d s t o t h e a r m . T o d o      

t h i s , c r e a t e a f i l e c a l l e d / e t c / u d e v / r u l e s . d / 8 5 -    

r o b o t a r m . r u l e s , u s i n g t h e c o m m a n d :  

sudo nano /etc/udev/rules.d/85-robotarm.rules

w i t h t h e c o n t e n t s b e l o w :  

SUBSYSTEM=="usb", ATTRS{idVendor}=="1267",

ATTRS{idProduct}=="0000", ACTION=="add",

GROUP="plugdev", MODE="0666"

T o s a v e t h e f i l e , p r e s s c t r l - x a n d t h e n p r e s s ‘ Y ’  

f o l l o w e d b y E n t e r .  

Y o u ’ l l t h e n n e e d t o i n s t a l l t h e P y t h o n U S B        

l i b r a r i e s . I f o u n d t h a t t h e o n e f r o m t h e A p t    

r e p o s i t o r y w a s s l i g h t l y o u t o f d a t e , s o I h a d t o      

i n s t a l l t h e A p t v e r s i o n f i r s t a n d t h e n u p g r a d e i t    

u s i n g t h e p i p c o m m a n d . T h e c o m m a n d b e l o w        

w i l l d o t h i s :  

sudo apt-get install python-pip -y

sudo pip install pyusb --upgrade

W h e n t h e P y t h o n U S B l i b r a r i e s h a v e b e e n      

i n s t a l l e d , r e b o o t y o u r R a s p b e r r y P i s o t h a t t h e      

c h a n g e s t o u d e v a n d t h e ' p i ' u s e r a c c o u n t t a k e      

e f f e c t w i t h t h e c o m m a n d :  

Page 9: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 9/369     

sudo shutdown -r now

C o n n e c t t h e a r m          

W h e n t h e R a s p b e r r y P i h a s b e e n r e b o o t e d ,  

c o n n e c t t h e a r m t o a f r e e U S B p o r t a n d t u r n i t o n .  

A U S B h u b s h o u l d n o t b e n e e d e d h e r e . T o c h e c k      

t h a t t h e P i h a s s u c c e s s f u l l y d e t e c t e d t h e a r m ,  

e x e c u t e t h e c o m m a n d :  

dmesg | grep usb | grep 1267

I f t h e a r m h a s b e e n d e t e c t e d s u c c e s s f u l l y y o u      

s h o u l d s e e o u t p u t s i m i l a r t o t h e l i n e b e l o w :  

[ 252.790554] usb 1-1.3: New USB device

found, idVendor=1267, idProduct=0000

I f y o u d o n ’ t s e e t h e r e s u l t a b o v e , t u r n o f f    

t h e a r m u s i n g t h e p o w e r s w i t c h , u n p l u g      

f r o m t h e U S B p o r t , p l u g t h e a r m b a c k i n      

a n d t u r n t h e p o w e r b a c k o n .  

G e t t i n g t h e c o d e      

T h e s c r i p t s c a n b e f o u n d o n G i t h u b a t    

h t t p s : / / g i t h u b . c o m / p e t e r l a v e l l e / m a p l i n a r m        

Y o u c a n c l o n e t h e r e p o s i t o r y d i r e c t l y o n t o y o u r    

P i i f y o u h a v e t h e G i t c l i e n t i n s t a l l e d . I n s t a l l i n g      

t h e G i t c l i e n t o n R a s p b i a n i s a s s i m p l e a s      

r u n n i n g t h e c o m m a n d :  

sudo apt-get install git-core

W h e n y o u h a v e t h e G i t c l i e n t i n s t a l l e d , r u n t h e      

c o m m a n d :  

git clone

https://github.com/peterlavelle/maplinarm

t o p u l l d o w n a c o p y o f t h e P y t h o n c o d e . T h i s      

c o m m a n d w i l l c l o n e t h e r e p o s i t o r y i n t o a      

s u b d i r e c t o r y c a l l e d ‘ m a p l i n a r m ’ a n d s h o u l d p u l l  

d o w n t h e f i l e s l i s t e d b e l o w :  

cd maplinarm/

ls

commander.py commands.csv maplinrobot.py

README.md

M a k i n g t h e s c r i p t s e x e c u t a b l e      

N o w w e n e e d t o m a k e t h e s c r i p t s e x e c u t a b l e b y      

t h e R a s p b e r r y P i . T o d o t h i s , c h a n g e i n t o t h e      

d i r e c t o r y y o u c l o n e d t h e r e p o s i t o r y d o w n t o u s i n g      

t h e c d c o m m a n d a n d r u n t h e c o m m a n d c h m o d      

7 5 5 * . p y T h i s w i l l g i v e a l l f i l e s e n d i n g i n ‘ . p y ’  

e x e c u t a b l e p e r m i s s i o n s . Y o u c a n d o u b l e - c h e c k      

t h i s w i t h t h e c o m m a n d l s - l a * . p y a n d l o o k i n g f o r    

t h e ‘ x ’ i n t h e l e f t - h a n d c o l u m n o f t h e o u t p u t o n      

e a c h l i n e . S e e e x a m p l e l i s t i n g b e l o w :  

P r o g r a m m i n g t h e a r m          

O k , n o w o n t o t h e g o o d p a r t . T h e s c r i p t    

c o m m a n d e r . p y w i l l r e a d i n c o m m a n d s f r o m a      

C S V f i l e p a s s e d t o i t a s a n a r g u m e n t .  

T h e r e i s a n e x a m p l e f i l e c a l l e d ‘ c o m m a n d s . c s v ’  

i n t h e G i t r e p o s i t o r y t o h e l p y o u g e t s t a r t e d . S o      

l e t s o p e n t h i s f i l e u p a n d t a k e a l o o k w i t h t h e      

c o m m a n d :  

nano commands.csv

C o n t e n t s a r e i n c l u d e d b e l o w f o r r e f e r e n c e :  

shoulder-up,1.00,1.00

elbow-down,1.00,2.00

base-clockwise,4.00,1.00

shoulder-down,1.00,1.00

grip-close,1.00,1.00

base-anti-clockwise,4.00,2.00

grip-open,1.00,1.00

elbow-up,1.00,2.00

drwxrwxr-x 3 pete pete 4096 May 19 14:11 .

drwx------ 37 pete pete 4096 May 19 14:11 ..

-rwxrwxr-x 1 pete pete 1726 May 19 14:11 commander.py

-rwxrwxr-x 1 pete pete 2388 May 19 14:11 maplinrobot.py

git clone https://github.com/peterlavelle/maplinarm

Cloning into 'maplinarm'...

remote: Counting objects: 35, done.

remote: Compressing objects: 100% (23/23), done.

remote: Total 35 (delta 8), reused 12 (delta 2)

Unpacking objects: 100% (35/35), done.

Page 10: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 10/360     

A s y o u c a n s e e h e r e , t h e b a s i c f o r m a t f o r e a c h      

c o m m a n d i s :  

command,duration,pause

command -  a n y v a l i d c o m m a n d f o u n d i n t h e      

m a p l i n r o b o t . p y s c r i p t    

duration-   t h e t i m e i n s e c o n d s t o e x e c u t e t h e      

c o m m a n d f o r . M a k e s u r e a l l v a l u e s a r e e n t e r e d      

t o t w o d e c i m a l p l a c e s . e . g , f o r 1 s e c o n d s p e c i f y a      

v a l u e o f 1 . 0 0 h e r e .  

pause -  t h e t i m e i n s e c o n d s t o w a i t b e f o r e      

e x e c u t i n g t h e n e x t c o m m a n d i n t h e s e q u e n c e .  

M a k e s u r e a l l v a l u e s a r e e n t e r e d t o t w o d e c i m a l  

p l a c e s . e . g , f o r 1 s e c o n d s p e c i f y a v a l u e o f 1 . 0 0      

h e r e .  

T h e c o m m a n d e r . p y s c r i p t w i l l e x e c u t e e a c h l i n e      

i n t h e C S V f i l e a s a s e p a r a t e c o m m a n d f o r t h e      

d u r a t i o n y o u s e t a n d w i l l w a i t f o r t h e n u m b e r o f    

s e c o n d s s e t i n t h e p a u s e v a l u e b e f o r e m o v i n g o n      

t o t h e n e x t c o m m a n d i n t h e s e q u e n c e .  

V a l i d c o m m a n d s a n d a d e s c r i p t i o n f o r e a c h c a n      

b e f o u n d b e l o w :  

base-anti-clockwise -  R o t a t e s t h e b a s e a n t i -    

c l o c k w i s e      

base-clockwise -  R o t a t e s t h e b a s e c l o c k w i s e      

shoulder-up -  R a i s e s t h e s h o u l d e r    

shoulder-down-   L o w e r s t h e s h o u l d e r    

elbow-up -  R a i s e s t h e e l b o w        

elbow-down-   L o w e r s t h e e l b o w        

wrist-up -  R a i s e s t h e w r i s t    

wrist-down -  L o w e r s t h e w r i s t    

grip-open-   O p e n s t h e g r i p      

grip-close -  C l o s e s t h e g r i p      

light-on -  T u r n s o n t h e L E D i n t h e g r i p      

light-off-   T u r n s t h e L E D i n t h e g r i p o f f    

stop -  S t o p s a l l m o v e m e n t o f t h e a r m        

T r y t h i s o u t y o u r s e l f b y e d i t i n g t h e      

c o m m a n d s . c s v f i l e i n t h e r e p o s i t o r y a n d      

r e p l a c i n g t h e c o n t e n t s w i t h y o u r o w n i n s t r u c t i o n s      

t o t h e a r m .  

R u n n i n g y o u r p r o g r a m          

R u n n i n g y o u r p r o g r a m i s a s s i m p l e a s r u n n i n g      

t h e c o m m a n d . / c o m m a n d e r . p y c o m m a n d s . c s v      

f r o m t h e c o m m a n d l i n e o n y o u r R a s p b e r r y P i .  

T h e s c r i p t w i l l o u t p u t e a c h s t e p o f y o u r p r o g r a m        

a s i t r u n s i t . Y o u c a n f i n d a e x a m p l e o u t p u t o f m y      

t e r m i n a l b e l o w a s a n e x a m p l e r u n u s i n g t h e      

c o m m a n d s . c s v f i l e i n t h e r e p o s i t o r y :  

./commander.py commands.csv

Running command 'shoulder-up' for a duration

of 1.000000 second(s) with a pause of 1.000000

second(s)

Sending command shoulder-up

T h e s e r i e s o f c o m m a n d s w i l l t h e n f i n i s h w i t h :  

Done.

All commands executed. Stopping the arm

T h a t ’ s i t . I f y o u h a v e a n y i d e a s o n h o w t h i s c o u l d      

b e i m p r o v e d o r e x p a n d e d ( m a y b e b y a d d i n g      

s o m e s o r t o f c o n t r o l l o g i c t o t h e c o m m a n d s f i l e ,  

f o r e x a m p l e ) t h e n f e e l f r e e t o c o n t a c t m e v i a t h e      

c o n t a c t f o r m o n m y b l o g a t    

h t t p : / / s o l d e r i n t h e v e i n s . c o . u k / c o n t a c t - m e /    

W h e r e t o b u y ?      

I n t h e U K t h e r o b o t a r m i s a v a i l a b l e f r o m M a p l i n      

( h t t p : / / w w w . m a p l i n . c o . u k - c o d e A 3 7 J N ) o r    

e l s e w h e r e f r o m R o b o t i k i t s      

( h t t p : / / w w w . o w i r o b o t . c o m - c o d e s O W I - 5 3 5 a n d      

5 3 5 - U S B ) .  

Page 11: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 11/36

Page 12: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 12/362     

D I F F I C U L T Y : A D V A N C E D        

P h i l i p M u n t s      

G u e s t W r i t e r    

I / O , A / D & T I M I N G        

U s i n g a n A R M C o r t e x - M 0 m i c r o c o n t r o l l e r    

I n p u t / O u t p u t P r o c e s s o r    

A s a n e m b e d d e d s y s t e m d e v e l o p e r , I a w a i t e d      

t h e r e l e a s e o f t h e R a s p b e r r y P i w i t h g r e a t    

i n t e r e s t a n d a n t i c i p a t i o n . I o r d e r e d o n e e a r l y o n      

a n d , l i k e m a n y o t h e r s , w a i t e d f o r i t t o a r r i v e .  

T h e r e a r e m a n y , m a n y e m b e d d e d s y s t e m        

p o s s i b i l i t i e s f o r a $ 3 5 L i n u x c o m p u t e r .  

L i n u x b r i n g s a g r e a t d e a l o f c a p a b i l i t y t o t h e p a r t y ,  

e s p e c i a l l y w i t h r e g a r d s t o n e t w o r k i n g a n d U S B        

s u p p o r t . B u t o n e t h i n g L i n u x s y s t e m s , i n c l u d i n g t h e      

R a s p b e r r y P i , l a c k : m i c r o s e c o n d I / O ( i n p u t / o u t p u t )    

s i g n a l t i m i n g r e s o l u t i o n . T h e m u l t i u s e r , m u l t i t a s k i n g ,  

v i r t u a l m e m o r y f o u n d a t i o n o f L i n u x s i m p l y p r e v e n t s i t    

f r o m r e s p o n d i n g t o o r t i m i n g e x t e r n a l e v e n t s w i t h      

p r e d i c t a b l e m i c r o s e c o n d r e s o l u t i o n .  

S o m e i n t e r e s t i n g p r o j e c t s t h a t w o u l d r e q u i r e      

m i c r o s e c o n d t i m i n g r e s o l u t i o n i n c l u d e :  

• I R ( I n f r a r e d ) r e m o t e c o n t r o l p r o t o c o l s , s u c h a s t h e      

L E G O ® P o w e r F u n c t i o n s R C p r o t o c o l ;  

• D C C ( D i g i t a l C o m m a n d C o n t r o l ) f o r m o d e l  

r a i l r o a d s ;  

• U l t r a s o n i c r a n g i n g w i t h a d e v i c e l i k e t h e P a r a l l a x      

u l t r a s o n i c d i s t a n c e s e n s o r .  

T h e o t h e r c a p a b i l i t i e s o f L i n u x a r e s o c o m p e l l i n g t h a t    

a t t e m p t s h a v e b e e n m a d e f r o m t i m e t o t i m e t o g r a f t i n      

r e a l t i m e s u p p o r t . N o n e o f t h e s e h a v e b e e n      

p a r t i c u l a r l y s u c c e s s f u l , a t l e a s t i n t e r m s o f “ m i n d      

s h a r e ” . B u t f o r t u n a t e l y t h e r e i s a n o t h e r w a y : t h e I / O        

p r o c e s s o r ( F i g u r e 1 ) .  

F i g u r e 1    - I / O P r o c e s s o r    

I / O P r o c e s s o r    

A n I / O P r o c e s s o r i s s i m p l y a s e p a r a t e c o m p u t e r    

d e d i c a t e d t o I / O o p e r a t i o n s , u s u a l l y a c t i n g a s a s l a v e      

t o t h e “ m a i n ” o r “ r e a l ” p r o c e s s o r . T h e I / O p r o c e s s o r    

r u n s i t s o w n s o f t w a r e , s e p a r a t e f r o m t h e m a i n      

p r o c e s s o r . D e p e n d i n g o n t h e i m p l e m e n t a t i o n , t h e I / O        

p r o c e s s o r s o f t w a r e m a y o r m a y n o t b e a l t e r a b l e f r o m        

t h e m a i n p r o c e s s o r .  

T h e I / O p r o c e s s o r i d e a i s n o t n e w . T h e I B M 7 0 9 4      

m a i n f r a m e c o m p u t e r o f 1 9 6 2 c o u l d u s e a 7 0 4 4      

c o m p u t e r f o r a l l I / O . P r o c e s s i n g w a s p e r f o r m e d o n      

t h e 7 0 9 4 a n d I / O d o n e o n t h e 7 0 4 4 . E v e n t h e o r i g i n a l  

I B M P C , r e l e a s e d i n 1 9 8 1 , h a d a n 8 0 4 8 8 - b i t    

m i c r o c o n t r o l l e r i n t h e k e y b o a r d t o h a n d l e k e y p r e s s      

t i m i n g . T o d a y , t h e I / O p r o c e s s o r i d e a h a s b e e n      

p u s h e d a l l t h e w a y d o w n t o s i n g l e c h i p s y s t e m s : T h e      

N X P L P C 4 3 0 0 , i t s e l f a s i n g l e c h i p A R M C o r t e x - M 4      

m i c r o c o n t r o l l e r , i n c l u d e s a s e p a r a t e A R M C o r t e x - M 0      

m i c r o c o n t r o l l e r , f o r r e a l t i m e p r o c e s s i n g , o n t h e s a m e      

c h i p .  

Page 13: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 13/361 3     

T h e R a s p b e r r y P i M o d e l B o f f e r s s e v e r a l d i f f e r e n t I / O        

i n t e r f a c e s , f o r e x a m p l e : e t h e r n e t , U S B , a n d t h e P 1    

e x p a n s i o n h e a d e r . A c a s e c a n b e m a d e f o r a t t a c h i n g      

a n I / O p r o c e s s o r t o a n y o f t h e t h r e e i n t e r f a c e s .  

E t h e r n e t a n d U S B o f f e r g o o d b a n d w i d t h a n d      

s t a n d a r d i n t e r f a c e s . A n I / O p r o c e s s o r b o a r d b u i l t t o      

a t t a c h t o e i t h e r E t h e r n e t o r U S B w o u l d a l s o b e a b l e t o      

c o n n e c t t o a n y o t h e r L i n u x , W i n d o w s , o r M a c      

c o m p u t e r . B u t b o t h E t h e r n e t a n d U S B i m p o s e      

s i g n i f i c a n t c o s t a n d c o m p l e x i t y p e n a l t i e s u p o n t h e I / O        

p r o c e s s o r b o a r d . I t w o u l d b e d i f f i c u l t ( t h o u g h n o t    

i m p o s s i b l e ) t o d e s i g n a n I / O p r o c e s s o r b o a r d , w i t h      

U S B o r E t h e r n e t , c o s t i n g l e s s t h a n t h e R a s p b e r r y P i  

i t s e l f .  

T h e P 1 e x p a n s i o n h e a d e r p r o v i d e s s e v e r a l d i f f e r e n t    

I / O i n t e r c o n n e c t : I 2 C , S P I , U A R T , a n d b a s i c G P I O .  

A n y o r a l l o f t h e s e m a y b e u s e d t o c o m m u n i c a t e w i t h      

a m i c r o c o n t r o l l e r .  

L P C 1 1 1 4 I / O p r o c e s s o r    

I h a v e d e s i g n e d a n d b u i l t a n I / O p r o c e s s o r b o a r d f o r    

t h e R a s p b e r r y P i u s i n g t h e N X P L P C 1 1 1 4 , a n A R M        

C o r t e x - M 0 s i n g l e c h i p m i c r o c o n t r o l l e r . I s e l e c t e d t h i s      

d e v i c e f o r s e v e r a l r e a s o n s :  

•   L o w c o s t    - I p a i d U S D $ 1 . 2 6 e a c h f o r t h e      

L P C 1 1 1 4 F N 2 8 f r o m A v n e t E x p r e s s . T h e L P C 1 1 x x      

f a m i l y i s e s s e n t i a l l y N X P ' s 3 2 - b i t a t t a c k o n t h e 8 - b i t    

m i c r o c o n t r o l l e r m a r k e t . T h e y a r e p r i c e d l e s s t h a n      

a l m o s t a n y P I C o r A V R o f s i m i l a r c a p a b i l i t y . T h e      

L P C 1 1 1 4 i n t e r n a l o s c i l l a t o r i s a l s o s t a b l e e n o u g h t h a t    

n o c r y s t a l o r e x t e r n a l o s c i l l a t o r i s r e q u i r e d , s a v i n g      

e v e n m o r e m o n e y .  

•   D I P p a c k a g e      - I c a n d o s u r f a c e m o u n t s o l d e r i n g ,  

g i v e n p r o p e r e q u i p m e n t , b u t I c a n ' t s a y I e n j o y i t . A s      

f a r a s I k n o w , t h e L P C 1 1 1 4 F N 2 8 a n d s o m e      

P I C 3 2 M X d e v i c e s ( m o r e e x p e n s i v e ) a r e t h e o n l y 3 2 -    

b i t m i c r o c o n t r o l l e r s a v a i l a b l e i n a e a s i l y h a n d -    

s o l d e r a b l e D I P p a c k a g e .  

•   I S P     ( I n S y s t e m P r o g r a m m i n g ) - w i t h o u t a d d i t i o n a l  

h a r d w a r e . N X P A R M C o r t e x m i c r o c o n t r o l l e r s h a v e a      

b u i l t - i n s e r i a l p o r t b o o t l o a d e r t h a t a l l o w s t h e m t o b e      

r e p r o g r a m m e d w i t h o u t a n y a d d i t i o n a l h a r d w a r e .  

•   G o o d s u p p o r t    b y f r e e d e v e l o p m e n t t o o l s . A R M        

m i c r o c o n t r o l l e r s , i n c l u d i n g t h e L P C 1 1 1 4 , a r e v e r y      

w e l l s u p p o r t e d b y b i n u t i l s / g c c / n e w l i b / g d b c o m p i l e r    

t o o l c h a i n .  

F i g u r e 2      - A s s e m b l e d I / O P r o c e s s o r b o a r d      

S o m e o t h e r R a s p b e r r y P i e x p a n s i o n b o a r d s c o n t a i n a      

m i c r o c o n t r o l l e r ( u s u a l l y a n A V R ) a s a n a d d i t i o n o r    

a f t e r t h o u g h t . T h e L P C 1 1 1 4 m i c r o c o n t r o l l e r i s c e n t r a l  

t o t h i s b o a r d ' s d e s i g n . E v e n t h o u g h i t o n l y c o n t a i n s      

o n e i n t e g r a t e d c i r c u i t , a n L E D , a n d 8 r e s i s t o r s a n d      

c a p a c i t o r s , t h i s b o a r d o f f e r s :  

• 8 G P I O ( G e n e r a l P u r p o s e I n p u t / O u t p u t ) s i g n a l s      

b r o u g h t o u t t o s c r e w t e r m i n a l s .  

• 5 t e r m i n a l s c a n b e c o n f i g u r e d a s A / D ( A n a l o g t o      

D i g i t a l ) i n p u t s f o r m e a s u r i n g a n a l o g s i g n a l s .  

• 3 t e r m i n a l s c a n b e c o n f i g u r e d a s t i m e r i n p u t s , f o r    

c o u n t i n g o r m e a s u r i n g i n c o m i n g p u l s e s .  

• 5 t e r m i n a l s c a n b e c o n f i g u r e d a s t i m e r o u t p u t s ,  

s u c h a s P W M ( P u l s e W i d t h M o d u l a t i o n ) o u t p u t s f o r    

c o n t r o l l i n g m o t o r s .  

N o t a l l i n p u t / o u t p u t f u n c t i o n s a r e a v a i l a b l e a t t h e      

s a m e t i m e ; f o r e x a m p l e , P 1 . 0 c a n b e c o n f i g u r e d f o r    

a n y o f d i g i t a l i n p u t , d i g i t a l o u t p u t , a n a l o g i n p u t ,  

t i m e r / c o u n t e r i n p u t , b u t o n l y o n e f u n c t i o n a t a t i m e .  

F o r m o r e i n f o r m a t i o n a b o u t t h e L P C 1 1 1 4 I / O        

P r o c e s s o r , i n c l u d i n g h o w t o p u r c h a s e o n e , v i s i t :  

h t t p : / / t e c h . m u n t s . c o m / M C U / F r a m e w o r k s / R a s p b e r r y P        

i / e x p a n s i o n / L P C 1 1 1 4 /    

N e x t t i m e      

I n f u t u r e a r t i c l e s I w i l l d e s c r i b e i n m o r e d e t a i l h o w t o      

u s e t h e L P C 1 1 1 4 I / O p r o c e s s o r t o b u i l d s o m e      

i n t e r e s t i n g c o n t r o l p r o j e c t s w i t h t h e R a s p b e r r y P i .  

Page 14: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 14/364     

D I F F I C U L T Y : A D V A N C E D        

D e r e k C a m p b e l l    

G u e s t W r i t e r    

B u i l d a G u z u n t y      

A n O p e n S o u r c e , O p e n H a r d w a r e A d d o n      

M a k e a l o w c o s t G P I O e x p a n d e r    

D o y o u w a n t t o c o n n e c t e l e c t r o n i c s t o y o u r    

R a s p b e r r y P i b u t a r e w o r r i e d a b o u t o v e r l o a d i n g      

o r d a m a g i n g t h e G P I O ( G e n e r a l P u r p o s e I n p u t    

O u t p u t ) p i n s ? S a y " H e l l o ! " t o t h e G u z u n t y P I - S B .  

G u z u n t y i s a n O p e n S o u r c e , O p e n H a r d w a r e      

a d d o n y o u c a n e a s i l y b u i l d y o u r s e l f . T h i s t i n y      

l i t t l e b o a r d w i l l p r o t e c t y o u r R a s p b e r r y P i w h i l e      

y o u l e a r n , b u t i t c a n d o s o m u c h m o r e .  

T h e G u z u n t y i s p r o g r a m m a b l e u s i n g ‘ c o r e s ’ .  

T h e s e f i l e s c a n h a n d l e r e p e t i t i v e t a s k s t h a t s l o w        

d o w n t h e R a s p b e r r y P i ' s C P U a n d t h e y c a n      

p r o v i d e a c c e s s t o 2 5 m o r e i n p u t / o u t p u t p i n s t h a n      

o n t h e G P I O a l o n e . T a k e i t t o t h e n e x t l e v e l a n d      

l e a r n t o p r o g r a m a c o r e t o d o n e w t a s k s y o u r s e l f .  

P r o t e c t i n g y o u r R a s p b e r r y P i    

A s s t a n d a r d , n o R a s p b e r r y P i s i g n a l s a r e d i r e c t l y      

b r o u g h t o u t t o t h e p i n s o n t h e t o p s i d e o f t h e      

G u z u n t y , s o i t i s a l m o s t i m p o s s i b l e t o f e e d      

d a m a g i n g v o l t a g e s i n t o y o u r R a s p b e r r y P i .  

I n s t e a d , a l l s i g n a l s p a s s t h o u g h t h e c h i p a t t h e      

h e a r t o f t h i s d e s i g n , a X i l i n x X C 9 5 7 2 X L .  

T h e X C 9 5 7 2 X L i s a C o m p l e x P r o g r a m m a b l e      

L o g i c D e v i c e o r C P L D f o r s h o r t . D o n ’ t w o r r y      

a b o u t t h e w o r d ‘ C o m p l e x ’ i n t h e n a m e , t h e      

G u z u n t y m a k e s i t e a s y . T h e C P L D i s t o l e r a n t o f 5      

v o l t s i g n a l s w h i c h w o u l d d a m a g e y o u r R a s p b e r r y      

P i , s o y o u c a n i n t e r f a c e w i t h m o r e k i n d s o f    

e x t e r n a l d e v i c e s , i n c l u d i n g A r d u i n o .  

N O T E :  T h e C P L D w i l l b e d a m a g e d b y v o l t a g e s      

g r e a t e r t h a n 5 . 5 v o l t s . Y o u s h o u l d b e e s p e c i a l l y      

a w a r e t h a t m a i n s v o l t a g e s a r e d a n g e r o u s a n d      

n e e d s p e c i a l i s o l a t i o n c i r c u i t r y . H o w e v e r , i f y o u      

s h o u l d m a k e a m i s t a k e a n d f r y t h e C P L D , a      

r e p l a c e m e n t c h i p c a n b e p u r c h a s e d      

i n e x p e n s i v e l y a n d s w a p p e d i n t o t h e s o c k e t .  

I n p u t / O u t p u t e x p a n s i o n      

T h e C P L D i s p r o g r a m m a b l e , b u t u n l i k e a      

c o m p u t e r p r o g r a m , a C P L D p r o g r a m d e f i n e s      

h a r d w a r e l o g i c . T o p r o v i d e I / O ( I n p u t / O u t p u t )    

e x p a n s i o n , w e p r o g r a m t h e C P L D t o p r o v i d e a      

S e r i a l P e r i p h e r a l I n t e r f a c e ( S P I ) o n f o u r o f i t s      

g e n e r a l p u r p o s e I / O p i n s .  

T h e S y s t e m O n C h i p ( S O C ) o f t h e R a s p b e r r y P i  

h a s S P I , o n G P I O s 8 , 9 , 1 0 a n d 1 1 . W e c a n t h u s      

e a s i l y m a k e t h e R a s p b e r r y P i s e n d d a t a t o t h e      

Page 15: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 15/361 5     

C P L D i n a n y p r o g r a m m i n g l a n g u a g e t h a t c a n      

o p e n t h e S P I d e v i c e . T h e C P L D t h e n u s e s t h e      

d a t a w e s e n d i t t o t u r n i t s o u t p u t p i n s o n o r o f f .  

T h e S P I i n t e r f a c e w o r k s i n b o t h d i r e c t i o n s , s o w e      

c a n a l s o r e a d f r o m t h e C P L D w h e t h e r i t s i n p u t    

p i n s a r e i n a h i g h o r l o w s t a t e . T h e s t a n d a r d      

G u z u n t y b o a r d h a s a t o t a l o f 2 5 f r e e I / O p i n s . W e      

n e e d 4 R a s p b e r r y P i G P I O p i n s t a l k i n g t o t h e      

C P L D a n d , i f w e n e e d t h e m , t h e r e a r e a n o t h e r 1 3      

u n u s e d p i n s o n t h e R a s p b e r r y P i . G u z u n t y t a k e s      

y o u r R a s p b e r r y P i f r o m 1 7 G P I O s i g n a l s t o 4 0      

I / O ' s ( 2 5 p l u s 1 3 ) . N o t b a d !    

D o i n g r e p e t i t i v e t a s k s      

T h e s e t a s k s w i l l b e s i m p l e j o b s w h e r e w e n e e d      

t o t u r n l o g i c s i g n a l s o n a n d o f f q u i c k l y a n d      

r e p e t i t i v e l y a s w i t h P u l s e W i d t h M o d u l a t i o n      

( P W M ) f o r e x a m p l e . W i t h P W M , w e c a n c o n t r o l  

t h e b r i g h t n e s s o f a L E D o r t h e p o s i t i o n o f a s e r v o      

b y c o n t r o l l i n g t h e l e n g t h o f t i m e a l o g i c o u t p u t i s      

h e l d h i g h . A n o t h e r e x a m p l e i s d r i v i n g a L E D o r    

L C D d i s p l a y . T h e d i s p l a y l o o k s c l e a r a n d s t a b l e      

t o t h e h u m a n e y e , b u t i n r e a l i t y , t h e d i f f e r e n t    

d i s p l a y e l e m e n t s a r e b e i n g s w i t c h e d o n a n d o f f    

h u n d r e d s o f t i m e s a s e c o n d . T h e s e t a s k s c a n p u t    

a c o n s i d e r a b l e l o a d o n t h e C P U o f t h e R a s p b e r r y      

P i , b u t a C P L D c a n e a s i l y h a n d l e t h e m l e a v i n g      

y o u r R a s p b e r r y P i t o g e t o n w i t h t h e r e a l w o r k .  

N O T E :  H a n d l i n g a n i n d e p e n d e n t t a s k l i k e t h i s      

d o e s r e q u i r e o n e e x t r a p i n o n b o t h t h e C P L D a n d      

o n t h e R a s p b e r r y P i t o p r o v i d e a c l o c k s i g n a l s o      

t h a t t h e C P L D c a n k e e p t r a c k o f t i m e .  

D e s i g n y o u r o w n c o r e      

T o m a k e i t a s e a s y a s p o s s i b l e t o g e t s t a r t e d , t h e      

G u z u n t y w e b s i t e a l r e a d y c o n t a i n s a s u i t e o f    

c o r e s t o d o a v a r i e t y o f u s e f u l t a s k s w h e n      

p l u g g e d i n t o y o u r R a s p b e r r y P i . H o w e v e r , y o u      

d o n ’ t h a v e t o s t o p t h e r e . Y o u c a n c r e a t e y o u r    

o w n c o r e s u s i n g a f r e e t o o l c h a i n d o w n l o a d a b l e      

f r o m t h e X i l i n x w e b s i t e . Y o u p r o g r a m c o r e s u s i n g      

e i t h e r s c h e m a t i c s o r a H a r d w a r e D e s c r i p t i o n      

L a n g u a g e . H o w y o u d o t h a t i s b e y o n d t h e s c o p e      

o f t h i s a r t i c l e , b u t i n t h e m e a n t i m e c h e c k o u t t h e      

c o r e s a l r e a d y a v a i l a b l e a t :  

h t t p s : / / g i t h u b . c o m / G u z u n t y / P i / w i k i / A v a i l a b l e -    

c o r e s .  

C a n G u z u n t y p o w e r m y p r o j e c t s ?      

Y e s , t h e G u z u n t y p r o v i d e s g r o u n d , 3 . 3 v a n d 5 v      

o u t p u t s . T h e s e a r e t a k e n f r o m t h e p o w e r p i n s o n      

t h e R a s p b e r r y P i G P I O h e a d e r . Y o u m u s t    

a d h e r e t o t h e R a s p b e r r y P i ' s o v e r a l l p o w e r d r a i n      

l i m i t s .  

F o r m o r e d e t a i l s , s e e :  

h t t p s : / / g i t h u b . c o m / g u z u n t y / p i / w i k i / F r e q u e n t l y -    

a s k e d - q u e s t i o n s .  

T h a t ' s a l l F o l k s !    

I d o h o p e y o u d e c i d e t o b u i l d y o u r n e x t p r o j e c t    

w i t h a G u z u n t y . I ’ m s u r e y o u w i l l b e g l a d y o u d i d .  

P l e a s e v i s i t h t t p s : / / g i t h u b . c o m / G u z u n t y / P i / w i k i t o      

f i n d e x a m p l e c o r e s a n d t h e c o d e t o d r i v e t h e m .  

Page 16: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 16/366     

D I F F I C U L T Y : M O D E R A T E        

B r u c e E . H a l l    

W 8 B H        

G u e s t W r i t e r    

P I M A T R I X        

C o n t r o l a n 8 x 8 m a t r i x o f 6 4 L E D s      

P a r t 2 : C o n t r o l i n d i v i d u a l L E D s      

& g i v e t h e P i M a t r i x a w o r k o u t    

I n t r o d u c t i o n      

I n P a r t 1 o f t h i s s e r i e s w e l o o k e d a t h o w t o b u i l d t h e      

P i M a t r i x k i t a n d h o w t o c o n f i g u r e I  

2   

C o n t h e      

R a s p b e r r y P i t o c o m m u n i c a t e w i t h i t . T h e r e s u l t w a s      

a s i m p l e P y t h o n s c r i p t t o t u r n a l l t h e L E D s o n a n d o f f .  

I n t h i s m o n t h ' s t u t o r i a l w e w i l l f o l l o w o n f r o m P a r t 1    

a n d d o s o m e t h i n g m o r e i n t e r e s t i n g . F i r s t w e w i l l l o o k      

a t h o w t h e P i M a t r i x w o r k s , t h e n w e w i l l w r i t e c o d e f o r    

s o m e t h i n g m o r e Y o u T u b e f r i e n d l y !  

H o w d o e s i t w o r k ?      

T h e h e a r t o f t h e P i M a t r i x i s t h e M C P 2 3 0 1 7 c h i p f r o m        

M i c r o c h i p . T h i s i s a w o n d e r f u l d e v i c e f o r c r e a t i n g      

h a r d w a r e i n t e r f a c e s b e c a u s e :  

I f y o u d o s o m e t h i n g ‘ b a d ’ w i t h y o u r c o n n e c t i o n t o t h e      

o u t s i d e w o r l d a n d f r y t h e 2 3 0 1 7 , y o u ’ v e l o s t l e s s t h a n      

U S $ 1 . 5 0 a n d s t i l l h a v e a w o r k i n g R a s p b e r r y P i .  

I t j u s t s o h a p p e n s t h a t t h e L E D m a t r i x r e q u i r e s 1 6      

d a t a l i n e s - a p e r f e c t m a t c h . B u t h o w c a n y o u c o n t r o l  

6 4 L E D s w i t h o n l y 1 6 l i n e s ? D o n ’ t y o u n e e d 6 4 l i n e s ?      

T h a t ’ s w h e r e t h e ‘ m a t r i x ’ c o m e s i n . T a k e a l o o k a t a      

t y p i c a l w i r i n g d i a g r a m f o r t h e s e d e v i c e s :  

T h e L E D s a r e w i r e d i n a n 8 x 8 m a t r i x w i t h 8 r o w s      

( l a b e l e d ‘ D i g ’ ) a n d 8 c o l u m n s ( l a b e l e d ‘ S e g ’ ) . T h e s e      

8 r o w s a n d 8 c o l u m n s m a k e u p o u r 1 6 c o n n e c t i o n s t o      

t h e o u t s i d e w o r l d . T o t u r n o n a n L E D , a p p l y p o w e r    

a n d g r o u n d t o t h e c o r r e s p o n d i n g c o l u m n a n d r o w        

c o n n e c t i o n s . F o r e x a m p l e , t o t u r n o n t h e h i g h l i g h t e d      

L E D a t p o s i t i o n ( 0 , 0 ) a p p l y p o w e r t o t h e a n o d e o n      

l e f t - m o s t c o l u m n ‘ S e g D P ’ a n d g r o u n d t o t h e c a t h o d e      

o n t h e t o p - m o s t r o w ‘ D i g 0 ’ . N o t i c e t h a t e a c h L E D        

s h a r e s a r o w c o n n e c t i o n w i t h 7 o t h e r L E D s a n d a      

c o l u m n c o n n e c t i o n w i t h 7 o t h e r L E D s .  

• I t ' s p e a k s ' I  

2   

C a n d o n l y n e e d s t w o      

c o m m u n i c a t i o n l i n e s f r o m t h e R a s p b e r r y P i  

• I t b u f f e r s a n d p r o t e c t s y o u r P i f r o m t h e o u t s i d e      

w o r l d      

• I t g i v e s y o u 1 6 I / O d a t a l i n e s t o w o r k w i t h      

• I t i s d i r t c h e a p ! L e s s t h a n U S $ 1 . 5 0 a t u n i t    

q u a n t i t i e s      

Page 17: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 17/361 7     

L e t ’ s s e e h o w o u r p r o g r a m f r o m p a r t 1 w o r k s . T o l i g h t    

u p a l l o f t h e L E D s w e s e n d t h e h e x a d e c i m a l v a l u e      

0 x F F t o P o r t A o f t h e 2 3 0 1 7 , w h i c h g o e s t o t h e      

c o l u m n p i n s o f t h e m a t r i x . H e x a d e c i m a l 0 x F F i s t h e      

s a m e a s b i n a r y 1 1 1 1 1 1 1 1 . E a c h b i t a n d t h e r e f o r e      

e a c h c o l u m n i n p u t w i l l b e a t l o g i c 1 ( + 3 . 3 V ) . W e a l s o      

m u s t s e n d t h e v a l u e o f 0 x 0 0 t o P o r t B , w h i c h g o e s t o      

t h e r o w p i n s . H e x a d e c i m a l 0 x 0 0 i s t h e s a m e a s      

b i n a r y v a l u e 0 0 0 0 0 0 0 0 . E a c h b i t a n d t h e r e f o r e e a c h      

r o w i n p u t w i l l b e a t l o g i c 0 ( g r o u n d ) . B e c a u s e a l l t h e      

c o l u m n s ( a n o d e s ) a r e h i g h a n d a l l t h e r o w s      

( c a t h o d e s ) a r e l o w , a l l t h e L E D s t u r n o n .  

C o d i n g f o r c o l u m n s      

W e c a n m a k e m o r e i n t e r e s t i n g d i s p l a y s b y c h a n g i n g      

t h e r o w a n d c o l u m n i n p u t s . F o r i n s t a n c e , i n s t e a d o f    

m a k i n g a l l o f t h e c o l u m n i n p u t s h i g h , i f w e o n l y m a k e      

o n e c o l u m n h i g h t h e n o n l y t h e L E D s i n t h a t c o l u m n      

w i l l t u r n o n . T h e o t h e r s w i l l s t a y o f f .  

T o t r y t h i s w e w i l l u s e t h e P y t h o n i n t e r a c t i v e m o d e .  

F r o m t h e c o m m a n d l i n e , e n t e r :  

python

T h e P y t h o n p r o m p t i s a t r i p p l e c h e v r o n ' > > > ' . F r o m        

h e r e w e e n t e r o u r P y t h o n c o d e a n d t h e i n t e r p r e t e r    

w o r k s a s w e g o . E n t e r t h e 1 1 c o m m a n d s f r o m t h e t w o      

c o d e b l o c k s o n p a g e 1 2 i s s u e 1 3 :  

>>> import smbus

...

>>> bus = smbus.SMBus(1) #0 for Rev.1 Pi

...

>>> bus.write_byte_data(addr,portA,0xFF)

A l l L E D s s h o u l d n o w b e o n . N o w l e t ’ s t u r n o n a s i n g l e      

c o l u m n . T o t u r n o n t h e f i r s t c o l u m n w e j u s t n e e d t o      

t u r n o n t h e l o w e s t b i t . T h i s i s e a s y , j u s t w r i t e t h e v a l u e      

o f 0 0 0 0 0 0 0 1 ( 0 x 0 1 ) t o P o r t A . E n t e r :  

>>> bus.write_byte_data(addr,portA,0x01)

I f w e w a n t t o t u r n o n t h e t h i r d c o l u m n w e w r i t e t h e      

b i n a r y v a l u e 0 0 0 0 0 1 0 0 ( 0 x 0 4 ) t o P o r t A :  

>>> bus.write_byte_data(addr,portA,0x04)

I f w e s t a r t n u m b e r i n g o u r c o l u m n s a t z e r o w e c a n      

d e t e r m i n e t h e v a l u e m a t h e m a t i c a l l y a s 2 ^ n , w h e r e n      

i s t h e c o l u m n n u m b e r . S o c o l u m n 0 i s 1 , c o l u m n 1 i s      

2 , c o l u m n 2 i s 4 , c o l u m n 3 i s 8 a n d s o o n . T o c o d e      

t h i s v a l u e w e u s e a n e a t t r i c k , t h e l e f t - s h i f t o p e r a t o r    

‘ < < ’ . E n t e r t h e f o l l o w i n g a n d r e p l a c e ' c o l ' w i t h a n y      

n u m b e r b e t w e e n 0 a n d 7 :  

>>> bus.write_byte_data(addr,portA,

0x01<<col)

D i d w h a t y o u e x p e c t h a p p e n ? D e p e n d i n g o n y o u r    

o r i e n t a t i o n t h e r e s u l t m i g h t h a v e b e e n t h e o p p o s i t e o f    

w h a t y o u e x p e c t e d . T h i s i s b e c a u s e t h e c o l u m n p i n s      

f o r t h e L E D m a t r i x a r e w i r e d i n t h e o p p o s i t e d i r e c t i o n      

t o t h e P o r t A p i n s ( s e e t h e t a b l e o n p a g e 1 3 i n i s s u e      

1 3 ) . T o c o r r e c t f o r t h i s w e ’ l l u s e t h e r i g h t - s h i f t    

o p e r a t o r i n s t e a d o f t h e l e f t - s h i f t o p e r a t o r :  

>>> bus.write_byte_data(addr,portA,

0x80>>col)

W h e n y o u a r e r e a d y t o m o v e o n , t u r n o n a l l t h e      

c o l u m n L E D s w i t h t h e f o l l o w i n g c o m m a n d :  

>>> bus.write_byte_data(addr,portA,0xFF)

C o d i n g f o r r o w s      

N o w l e t ’ s d o t h e s a m e t h i n g f o r r o w s . W e c a n u s e t h e      

s a m e t e c h n i q u e b u t e l e c t r i c a l l y w e n e e d t o s e l e c t i v e l y      

b r i n g t h e r o w t o l o g i c 0 , n o t l o g i c 1 . F o r e x a m p l e , t o      

t u r n o n r o w 3 w e ’ l l n e e d t o s e n d t h e b i n a r y v a l u e      

1 1 1 1 1 0 1 1 t o P o r t B . T h e t h i r d b i t f r o m t h e r i g h t i s      

l o g i c 0 a n d e v e r y t h i n g e l s e i s l o g i c 1 . N o t i c e t h a t a l l o f    

t h e b i t s a r e f l i p p e d , o r i n v e r t e d , c o m p a r e d t o w h a t w e      

u s e d i n t h e c o l u m n m e t h o d . W e c a n w r i t e t h e b i n a r y      

v a l u e 1 1 1 1 1 0 1 1 a s t h e i n v e r s e o f 0 0 0 0 0 1 0 0 .  

I n P y t h o n t h e i n v e r s e ( o r b i t w i s e N O T ) o p e r a t o r i s      

t h e t i l d e ' ~ ' . E n t e r t h e f o l l o w i n g a n d r e p l a c e ' r o w ' w i t h      

a n y n u m b e r b e t w e e n 0 a n d 7 :  

>>> bus.write_byte_data(addr,portB,

~(0x01<<row))

C o d i n g f o r i n d i v i d u a l L E D s      

I t ’ s e a s i e r t h a n y o u t h i n k . A l l w e h a v e t o d o i s      

Page 18: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 18/368       

c o m b i n e t h e c o d e f o r s e l e c t i n g t h e r o w a n d s e l e c t i n g      

t h e c o l u m n !    

>>> bus.write_byte_data(addr,portA,

0x80>>col)

>>> bus.write_byte_data(addr,portB,

~(0x01<<row))

F i n a l l y , t o t u r n o f f a l l L E D s e n t e r :  

>>> bus.write_byte_data(addr,portA, 0x00)

D e m o c o d e        

W e n o w h a v e e n o u g h m a t e r i a l t o c r e a t e a d e m o      

p r o g r a m . E a c h t y p e o f d e m o h a s b e e n g r o u p e d i n t o      

i t s o w n r o u t i n e . T r y t y p i n g t h i s c o d e u s i n g y o u r    

f a v o r i t e e d i t o r a n d s a v e i t a s m a t r i x - p a r t 2 . p y .  

A l t e r n a t i v e l y y o u c a n c o p y i t f r o m        

h t t p : / / w 8 b h . n e t / p i / m a t r i x - p a r t 2 . p y . Y o u c a n r u n i t f r o m        

t h e c o m m a n d l i n e w i t h t h e f o l l o w i n g :  

chmod +x matrix-part2.py

./matrix-part2.py

I n P a r t 3 o f t h i s s e r i e s w e w i l l c r e a t e s o m e i n t r i c a t e      

m a t r i x d i s p l a y s . H a v e f u n !    

#!/usr/bin/python# matrix-part2.py# Selectively turn on and off each row, column, and pixel

import smbus #gives us a connection to the I2C busimport time #for timing delays

#Definitions for the MCP23017 chip ADDR = 0x20 #The I2C address of our chipDIRA = 0x00 #PortA I/O direction, by pin. 0=output, 1=inputDIRB = 0x01 #PortB I/O direction, by pin. 0=output, 1=inputPORTA = 0x12 #Register address for PortA  PORTB = 0x13 #Register address for PortBOUTPUT = 0INPUT = 1

# Lower Level LED Display routinesdef Init23017 ():

#Set up the 23017 for 16 output pinsbus.write_byte_data(ADDR,DIRA,0x00); #all zeros = all outputs on PortA bus.write_byte_data(ADDR,DIRB,0x00); #all zeros = all outputs on PortB

def TurnOffLEDS ():bus.write_byte_data(ADDR,PORTA,0x00) #set all columns low bus.write_byte_data(ADDR,PORTB,0x00) #set all rows low 

def TurnOnLEDS ():bus.write_byte_data(ADDR,PORTA,0xFF) #set all columns low bus.write_byte_data(ADDR,PORTB,0x00) #set all rows low 

def SetLED (row,col):#Turn on an individual LED at (row,col). All other LEDS off.bus.write_byte_data(ADDR,PORTA,0x80>>col)bus.write_byte_data(ADDR,PORTB,~(1<<row))

def SetColumn (col):#Turn on all LEDs in the specified column. Expects input of 0-7bus.write_byte_data(ADDR,PORTB,0x00)bus.write_byte_data(ADDR,PORTA,0x80>>col)

def SetRow (row):#Turn on all LEDs in the specified row. Expects input of 0-7bus.write_byte_data(ADDR,PORTA,0xFF)bus.write_byte_data(ADDR,PORTB,~(1<<row))

def Pause():#Turn off LEDS and wait a while between casesTurnOffLEDS();time.sleep(0.5);

Page 19: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 19/361 9       

def FlashLEDS (delay):#Flash all of the LEDS on/off for the specified timeTurnOnLEDS()time.sleep(delay)TurnOffLEDS()time.sleep(delay)

def LEDtest (delay):#Turn on all 64 LEDS for the specified time delay, in seconds

print "\nLighting all LEDS for %d seconds" % delayTurnOnLEDS() #turn them all ontime.sleep(delay) #wait a whilePause() #then turn them off

def FlashTest (numCycles,delay):print "\nFlash all of the LEDS"for count in range(0,numCycles):

FlashLEDS(delay)Pause()

def ColumnTest (numCycles):#Turn on each Column.

#Keep PortB (rows) low & set each bit in PortA (columns) high#This will actually light LEDS in reverse order, col 7 to col0,#because PortA bit 0 is wired to Col7, A1 to Col6,..., A7 to Col0print "\nTurn on Columns 0 to 7"for count in range(0,numCycles):

print "...cycle",count+1for col in range(0,8):

SetColumn(col)time.sleep(0.5)

time.sleep(1)Pause()

def RowTest (numCycles):#Turn on each row, from row 0 to row 7

#Keep PortA (columns) high & selectively turn a bit in PortB (rows) low print "\nTurn on Rows 0 to 7"for count in range(0,numCycles):

print "...cycle",count+1for row in range(0,8):

SetRow(row)time.sleep(0.5)

time.sleep(1)Pause()

def PixelTest (numCycles):#Flash each LED according to its (row,col) coordinateprint "\nFlash each LED in (row,col) order"

for count in range(0,numCycles):for row in range(0,8):for col in range(0,8):

SetLED(row,col)time.sleep(0.1)

Pause()

# Here is the program body: call each of the text routines in turn.

print "\nPi Matrix test program starting"bus = smbus.SMBus(1); #Use '1' for newer Pi boards; 0 for oldiesInit23017() #Set all 16 I/O pins as outputLEDtest(5) #Turn on all LEDS to verify connectivityFlashTest(25,0.1) #Flash them all for a little fun

ColumnTest(3) #Sequentially turn on Columns 0 to 7RowTest(3) #Sequentially turn on Rows 0 to 7PixelTest(1) #Flash each pixel in row,col orderFlashLEDS(0.1) #Visual end of testprint "\nDone."

Page 20: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 20/36

Page 21: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 21/36

L i v e r p o o l R a s p b e r r y J a m          

W h e n : S a t u r d a y 6 t h J u l y 2 0 1 3 @ 9 . 3 0 a m        

W h e r e : N o r t h L i v e r p o o l A c a d e m y , 1 2 0 H e y w o r t h S t , L i v e r p o o l , L 5 0 S Q        

T h e e v e n t w i l l r u n f r o m 9 . 3 0 a m u n t i l 4 . 0 0 p m . F u r t h e r i n f o r m a t i o n a n d f r e e t i c k e t s a r e a v a i l a b l e a t    

h t t p : / / r a s p b e r r y j a m . o r g . u k / e v e n t / l i v e r p o o l - r a s p b e r r y - j a m - r j a m - r j a m l p l - s a t u r d a y - 6 t h - j u l y - 2 0 1 3 /    

W a n t t o k e e p u p t o d a t e w i t h a l l t h i n g s R a s p b e r r y P i i n y o u r a r e a ?      

T h e n t h i s s e c t i o n o f T h e M a g P i i s f o r y o u ! W e a i m t o l i s t R a s p b e r r y J a m e v e n t s i n y o u r a r e a , p r o v i d i n g      

y o u w i t h a R a s p b e r r y P i c a l e n d a r f o r t h e m o n t h a h e a d .  

A r e y o u i n c h a r g e o f r u n n i n g a R a s p b e r r y P i e v e n t ? W a n t t o p u b l i c i s e i t ?      

E m a i l u s a t : e d i t o r @ t h e m a g p i . c o m        

B a r n s l e y H a c k - a - t h o n      

W h e n : S a t u r d a y 6 t h J u l y 2 0 1 3 @ 9 . 0 0 a m        

W h e r e : D i g i t a l M e d i a C e n t e r , B a n s l e y      

T h i s e v e n t w i l l r u n f r o m 9 . 0 0 a m u n t i l 9 . 0 0 p m . T h e e v e n t i s f r e e . F u r t h e r i n f o r m a t i o n i s a v a i l a b l e a t    

h t t p : / / m a k e d o . i n / h a c k d a y      

L i m a R a s p b e r r y P i M e e t - u p      

W h e n : S a t u r d a y 1 3 t h J u l y 2 0 1 3 @ 1 1 . 0 0 a m        

W h e r e : L i m a P u b l i c L i b r a r y , 6 5 0 W M a r k e t S t , L i m a , O H        

A t t e n d e e s w i l l r e c e i v e a n L R I T A . o r g f l a s h d r i v e a n d a p i z z a l u n c h .  

R e g i s t e r a t h t t p : / / w w w . l r i t a . o r g / e v e n t s / b i t - t a l k / j u l y - 1 3 , - 2 0 1 3 - r a s p b e r r y - p i - m e e t - u p . a s p x      

S i n g a p o r e R a s p b e r r y P i T r a i n i n g      

W h e n : S a t u r d a y 1 3 t h J u l y @ 2 . 0 0 p m        

W h e r e : S i n g a p o r e S c i e n c e C e n t r e , D i g i t a l D e s i g n S t u d i o , S i n g a p o r e 6 0 9 0 8 1    

R u n s f r o m 2 . 0 0 - 4 . 3 0 p m . F r e e f o r S c i e n c e C e n t r e m e m b e r s , S $ 1 0 f o r o t h e r s . F u r t h e r i n f o r m a t i o n :  

h t t p : / / w w w . i t s c . o r g . s g / i n d e x . p h p ? o p t i o n = c o m _ e v e n t b o o k i n g & t a s k = v i e w _ e v e n t & e v e n t _ i d = 7 4 & I t e m i d = 4 1    

2 1   

Page 22: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 22/362     

D r M i k e B a r t l e y      

& C a r o l i n e H i g g i n s      

G u e s t W r i t e r s      

R A S P B E R R Y P I    

B o o t C a m p s      

W h a t a r e t h e i n g r e d i e n t s f o r a f u n      

f i l l e d f a m i l y P i d a y ?      

R a s p b e r r y P i B o o t C a m p e v e n t s a r e n o w b e i n g h e l d        

o n a r e g u l a r b a s i s i n t h e s o u t h w e s t o f t h e U K . T h e      

M a g P i a s k e d M i k e B a r t l e y , o n e o f t h e o r g a n i s e r s o f    

t h e B r i s t o l e v e n t , t o t e l l u s a l l a b o u t t h e e v e n t s a n d        

h o w t h e y c a m e a b o u t , h o p e f u l l y t o i n s p i r e s i m i l a r      

e v e n t s e l s e w h e r e .    

I n D e c e m b e r 2 0 1 2 t h e B r i s t o l b r a n c h o f B C S T h e      

C h a r t e r e d I n s t i t u t e f o r I T h e l d i t s a n n u a l t a l k t o      

e n c o u r a g e c h i l d r e n i n t o c o m p u t i n g . T h e v e n u e w a s      

A t - B r i s t o l a n d t h e t h e m e w a s t h e R a s p b e r r y P i . W i t h      

a n i n s p i r a t i o n a l t a l k f r o m R o b B i s h o p o f t h e      

R a s p b e r r y P i F o u n d a t i o n , t h e e v e n t a t t r a c t e d o v e r    

4 5 0 a t t e n d e e s w i t h a t l e a s t 3 0 0 b e i n g c h i l d r e n . S i n c e      

t h e U K g o v e r n m e n t p r o p o s e d t h e p l a n n e d u p d a t e s t o      

t h e I T c u r r i c u l u m l a s t y e a r t h e r e h a s b e e n a g r o w i n g      

i n t e r e s t i n t h e s u b j e c t f r o m c h i l d r e n , p a r e n t s a n d      

t e a c h e r s . I t w a s c l e a r w e h a d h i t a t o p i c o f h i g h      

i n t e r e s t a n d w e n e e d e d t o u n d e r s t a n d h o w b e s t t o      

t a k e i t f o r w a r d .  

B o t h t h e U n i v e r s i t y o f B r i s t o l a n d A t - B r i s t o l h a v e      

o u t r e a c h p r o g r a m s t o e n c o u r a g e c h i l d r e n i n t o      

c o m p u t i n g a n d e n g i n e e r i n g . A c o l l a b o r a t i o n b e t w e e n      

t h e t h r e e o r g a n i s a t i o n s s e e m e d l i k e a p e r f e c t w a y t o      

c o l l e c t i v e l y a c h i e v e o u r g o a l s ; t o c r e a t e a s e r i e s o f    

e v e n t s w h i c h s u p p o r t t h e l e a r n i n g o f t h e n e x t    

g e n e r a t i o n o f i n n o v a t o r s a n d e n g i n e e r s , w h i l s t    

p r o v i d i n g a f u n d a y o u t f o r t h e f a m i l y .  

A t - B r i s t o l p r o v i d e s t h e f a c i l i t i e s a n d l o g i s t i c s ; t h e      

U n i v e r s i t y o f B r i s t o l ’ s s t u d e n t s r u n a d r o p i n c l i n i c a n d      

w o r k s h o p s a s w e l l a s l o a n i n g e q u i p m e n t . T h e B C S        

p u t a c a l l o u t t o t h e i r m e m b e r s t o f i n d v o l u n t e e r s w h o      

r u n w o r k s h o p s a n d d e m o n s t r a t i o n s . A l l t h r e e m a d e      

f i n a n c i a l c o n t r i b u t i o n s o f s o m e s o r t . T h e v o l u n t a r y      

" l e t ' s d o t h i s " a t t i t u d e p e r v a d e d t h e o r g a n i s a t i o n a n d      

t h e e v e n t a n d e n a b l e d t h e t h r e e o r g a n i s a t i o n s t o w o r k      

t o g e t h e r t o p u l l o f f t h e f i r s t t w o e v e n t s , w h i c h p r o v e d      

t o b e h u g e l y s u c c e s s f u l .  

Page 23: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 23/362 3       

O v e r 4 0 0 c h i l d r e n a n d 2 0 0 a d u l t s a t t e n d e d t h e f i r s t    

t w o R a s p b e r r y P i B o o t C a m p s t o l e a r n w h a t t h e y c a n      

d o w i t h t h e P i . F r o m c o n t r o l l i n g r e m o t e c o n t r o l c a r s      

a n d L E D s t o s e t t i n g u p a h o m e m e d i a s e r v e r – t h e      

c h i l d r e n g o t t o g r i p s w i t h h o w t h e y c a n u s e t h e      

R a s p b e r r y P i t o m a k e t h i n g s !    

M a r c u s a g e d 1 2 c o m m e n t e d " T h i s w a s f a n t a s t i c . M y      

P i h a s b e e n a t h o m e i n i t s b o x f o r a w h i l e b u t I ’ v e n o w        

l e a r n e d l o a d s o f c o o l t h i n g s t o d o w i t h i t . M e a n d m y      

m a t e s a r e l o o k i n g f o r w a r d t o t h e n e x t o n e a l r e a d y ! "    

T h e e v e n t s w i l l n o w b e c o m e a r e g u l a r f e a t u r e a t A t -    

B r i s t o l o n a S a t u r d a y i n S e p t e m b e r , N o v e m b e r ,  

J a n u a r y , M a r c h a n d M a y .  

T h e w o r k s h o p s r a n g e d f r o m b e g i n n e r t o a d v a n c e      

l e v e l , a n d a l s o i n c l u d e d a s h o w - a n d - t e l l s e c t i o n t h a t    

g a v e v i s i t o r s t h e o p p o r t u n i t y t o l e a r n m o r e a b o u t    

e x p e r t l e v e l p r o j e c t s . P i - C a r s p r o v e d t o b e v e r y      

p o p u l a r w o r k s h o p ; c h i l d r e n h a d t h e o p p o r t u n i t y t o      

b u i l d r e m o t e c o n t r o l h a n d s e t f o r a c a r u s i n g t h e i r    

R a s p b e r r y P i . O t h e r w o r k s h o p s i n c l u d e d t h e P i a s a      

h o m e m e d i a s e r v e r , l e d t r a f f i c l i g h t s a n d h o w t o l o g      

d a t a t o t h e i n t e r n e t . T h e M a g p i t e a m w e r e o n h a n d t o      

a n s w e r q u e s t i o n s . T h e s h o w - a n d - t e l l s e c t i o n i n c l u d e d      

a n u m b e r o f r o b o t s c o n t r o l l e d b y a R a s p b e r r y P i a n d      

a d r a w i n g r o b o t .  

O b v i o u s l y o r g a n i s i n g a l a r g e s c a l e e v e n t o f t h i s      

n a t u r e t h r o w s u p m a n y c h a l l e n g e s , f i n d i n g e n o u g h      

e q u i p m e n t h a s b e e n t h e m a i n i s s u e . W e a s k e d      

p e o p l e t o b r i n g t h e i r o w n m o n i t o r s , k e y b o a r d s a n d      

p o w e r c a b l e s , w h i c h o f c o u r s e i s n ’ t a l w a y s p o s s i b l e .  

W e e n c o u r a g e d v i s i t o r s b r i n g t h e i r l a p t o p s a n d t h e r e      

w e r e v o l u n t e e r s o n h a n d t o s h o w t h e m h o w t o s e t u p      

t h e i r l a p t o p t o c o n t r o l t h e i r P i .  

F u t u r e B o o t C a m p s w i l l c o n t i n u e t h e t h e m e o f    

w o r k s h o p s a n d d e m o n s t r a t i o n s o n t h e P i a n d o t h e r    

p l a t f o r m s l i k e A r d u i n o . H o w e v e r , o t h e r a s p e c t s o f    

c o m p u t i n g w i l l a l s o b e c o v e r e d . F o r e x a m p l e , t h e      

s e c o n d B o o t C a m p o n J u n e 1 5 t h f e a t u r e d a ' R a i l s      

G i r l s ' w o r k s h o p , h o s t e d b y l o c a l w e b a g e n c y      

S i m p l e w e b . F e m a l e p r o g r a m m e r s w e r e i n v i t e d t o      

s p e n d t h e d a y l e a r n i n g R u b y o n R a i l s . I n a d d i t i o n t o      

t h i s w e r a n t h r e e 9 0 m i n u t e w o r k s h o p s w h i c h a i m e d      

t o i n t r o d u c e c h i l d r e n t o a p p l i c a t i o n w r i t i n g u s i n g t h e      

l a n g u a g e P r o c e s s i n g . T h e b a s i c s o f v a r i a b l e s ,  

c o n d i t i o n a l s , l o o p s a n d f u n c t i o n s w i t h t h e a i m o f    

d e v e l o p i n g a g a m e b y t h e e n d o f t h e w o r k s h o p . T h i s      

w i l l h e l p t h e c h i l d r e n p r e p a r e f o r a f r e e o n e w e e k      

p r o g r a m m i n g c o u r s e t o b e h e l d a t t h e U n i v e r s i t y o f    

B r i s t o l a s p a r t o f a n a t i o n a l c o m p e t i t i o n o r g a n i s e d b y      

t h e Y o u n g R e w i r e d S t a t e .  

G o i n g f o r w a r d t h e t h r e e o r g a n i s a t i o n s w i l l c o n t i n u e t o      

w o r k t o g e t h e r a s a l l o b j e c t i v e s r e m a i n c o m p l e t e l y      

a l i g n e d . I t i s c l e a r t h a t c o l l a b o r a t i o n l i k e t h i s h a s b e e n      

e x t r e m e l y b e n e f i c i a l i n e n a b l i n g u s t o a c h i e v e o u r    

g o a l s . E v e n t s w i l l b e h e l d o v e r f i v e S a t u r d a y s e a c h      

y e a r a n d t h e r e w i l l b e t h e m e s ( s u c h a s W i r e l e s s ,  

R o b o t i c s , a n d s m a r t h o m e s ) t o k e e p t h e e v e n t s f r e s h .  

T h e f i r s t t w o e v e n t s r e l i e d h e a v i l y o n t h e g o o d w i l l o f    

v o l u n t e e r s . N o w t h a t w e h a v e o r g a n i s e d t w o      

s u c c e s s f u l b o o t c a m p s w e n e e d t o e n s u r e t h e e v e n t    

i s s u s t a i n a b l e b y a s k i n g f o r d o n a t i o n s a n d      

s p o n s o r s h i p . W e w o u l d l i k e t o b u y d e d i c a t e d      

e q u i p m e n t a n d c o v e r t h e c o s t s i n c u r r e d b y      

v o l u n t e e r s . I f y o u w o u l d l i k e t o c o n t r i b u t e t o f u t u r e      

e v e n t s b y p r o v i d i n g a w o r k s h o p , b e i n g p a r t o f t h e      

s h o w - a n d - t e l l s e c t i o n o r b y m a k i n g a d o n a t i o n ,  

p l e a s e c o n t a c t c a r o l i n e . h i g g i n s @ b r i s t o l . a c . u k      

D r . M i k e B a r t l e y i s C h a i r o f B C S T h e C h a r t e r e d I n s t i t u t e f o r    

I T i n B r i s t o l a n d o f t h e H i g h T e c h S e c t o r G r o u p o f t h e W e s t    

o f E n g l a n d L o c a l E n t e r p r i s e P a r t n e r s h i p s .  

C a r o l i n e H i g g i n s i s O u t r e a c h & S t u d e n t L i a i s o n M a n a g e r ,  

F a c u l t y o f E n g i n e e r i n g , U n i v e r s i t y o f B r i s t o l .  

Page 24: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 24/364     

D I F F I C U L T Y : A D V A N C E D        

P e t e r N o w o s a d      

G u e s t W r i t e r    

P r o g r a m m i n g i n C h a r m p a r t 3      

H a v i n g c o v e r e d R I S C O S o n t h e R a s p b e r r y P i  

a n d C h a r m d a t a t y p e s i n t h e f i r s t t w o a r t i c l e s , i t ' s      

m y p l e a s u r e t o w e l c o m e y o u t o t h e t h i r d a r t i c l e i n      

t h e s e r i e s o n t h e C h a r m p r o g r a m m i n g l a n g u a g e .  

I f y o u ' v e b e e n f o l l o w i n g t h e s e r i e s , y o u m a y w e l l  

h a v e a l r e a d y i n s t a l l e d C h a r m u n d e r R I S C O S        

a n d t r i e d o u t t h e p r i n t e d e x e r c i s e s . I f n o t i t ' s n o t    

t o o l a t e t o g o b a c k a n d d o s o !    

I n t h i s a r t i c l e I a m g o i n g t o c o v e r s o m e o f t h e      

s y n t a x a n d s e m a n t i c s o f C h a r m i l l u s t r a t e d b y      

s i m p l e e x a m p l e s w h i c h I h o p e w i l l w h e t y o u r    

a p p e t i t e a n d a r m y o u ( n o p u n i n t e n d e d ! ) w i t h      

e n o u g h k n o w l e d g e t o s t a r t w r i t i n g y o u r o w n      

C h a r m p r o g r a m s .  

C h a r m i s a n o b j e c t o r i e n t e d s t r u c t u r e d      

p r o g r a m m i n g l a n g u a g e . T h e s t r u c t u r e d p r o g r a m        

t h e o r e m , w h i c h p r o v i d e s t h e t h e o r e t i c a l b a s i s o f    

s t r u c t u r e d p r o g r a m m i n g , s t a t e s t h a t t h r e e w a y s      

o f c o m b i n i n g p r o g r a m s n a m e l y s e q u e n c i n g ,  

s e l e c t i o n , a n d i t e r a t i o n a r e s u f f i c i e n t t o e x p r e s s      

a n y c o m p u t a b l e f u n c t i o n .  

S e q u e n c e      

I n t h e a b s e n c e o f f l o w o f c o n t r o l  

s t a t e m e n t s r e l a t e d t o s e l e c t i o n      

a n d i t e r a t i o n , C h a r m p r o g r a m s      

e x e c u t e a l i n e a t a t i m e f r o m t o p t o b o t t o m e . g .  

int x := 1;

int y := 2;

int z := x + y;

do_this ();

do_that ();

h o w e v e r e v e n i n t h i s s i m p l e e x a m p l e      do_this

a n d   do_that

c a u s e c a l l o u t s t o n a m e d      

p r o c e d u r e s t h a t c o n t a i n t h e i r o w n c o d e ( n o t    

s h o w n h e r e ) . A l t h o u g h w h i t e s p a c e i s i g n o r e d ,  

u s u a l l y e a c h l i n e c o n t a i n s a s i n g l e s t a t e m e n t    

w h i c h e n d s w i t h a s e m i c o l o n , w i t h o n e c o m m o n      

s t a t e m e n t t y p e b e i n g t h e a s s i g n m e n t s t a t e m e n t    

i n w h i c h t h e l e f t h a n d s i d e i s a s s i g n e d t h e v a l u e      

o f t h e e x p r e s s i o n o n t h e r i g h t h a n d s i d e w i t h t h e      

t w o b e i n g s e p a r a t e d b y t h e a s s i g n m e n t    

o p e r a t i o n      :=

S e l e c t i o n      

Page 25: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 25/362 5     

O f t e n p r o g r a m s w a n t t o t a k e d i f f e r e n t c o u r s e s o f    

a c t i o n u n d e r d i f f e r e n t c o n d i t i o n s a n d t h i s i s      

h a n d l e d b y s e l e c t i o n , w h i c h i n C h a r m i s p r o v i d e d      

b y t h e      if

a n d   case

k e y w o r d s .  

ifc h e c k s w h e t h e r t h e f o l l o w i n g c o n d i t i o n a l  

e x p r e s s i o n e v a l u a t e s t o      true i n w h i c h c a s e t h e      

n e x t s t a t e m e n t , o r b l o c k o f s t a t e m e n t s e n c l o s e d      

i n c u r l y b r a c k e t s i s e x e c u t e d , o r    false

i n w h i c h      

c a s e i t i s n o t .  

T h e   if

k e y w o r d h a s a n o p t i o n a l a s s o c i a t e d      

elsek e y w o r d t h a t i f p r e s e n t i n t r o d u c e s t h e      

s t a t e m e n t o r s t a t e m e n t s t h a t s h o u l d b e e x e c u t e d      

i f t h e b o o l e a n e x p r e s s i o n i s n o t    true

e . g .  

i f x = 1y := 0;

else

y := 1;

N o t e t h e u s e o f i n d e n t a t i o n t o h e l p      

h i g h l i g h t t h e f l o w o f c o n t r o l l o g i c .  

T h e   case

k e y w o r d i n t r o d u c e s a s e r i e s o f    

c l a u s e s t h a t m a t c h t h e v a l u e o f a n i n t e g e r    

v a r i a b l e a g a i n s t a n u m b e r o f p o s s i b l e c o n s t a n t    

v a l u e s a n d c h o o s e s a b l o c k o f c o d e t o e x e c u t e      

e . g .  

case x

{

1: handle_1 ();

2: handle_2 ();

otherwise:

handle_other (x);

}

N o t e t h e u s e o f t h e      otherwise

c l a u s e t o c a t c h      

a n y v a l u e s t h a t d o n o t m a t c h .  

I t e r a t i o n      

S o m e t i m e s t h e s a m e c o d e      

n e e d s t o b e e x e c u t e d      

m a n y t i m e s w i t h i n a l o o p ,  

o f t e n t o p r o c e s s e a c h      

m e m b e r o f a n a r r a y . T h i s      

i s h a n d l e d b y i t e r a t i o n      

u s i n g t h e      while

, repeat

a n d   for

k e y w o r d s .  

whilec h e c k s w h e t h e r t h e f o l l o w i n g c o n d i t i o n a l  

e x p r e s s i o n e v a l u a t e s t o t r u e i n w h i c h c a s e t h e      

n e x t s t a t e m e n t , o r b l o c k o f s t a t e m e n t s e n c l o s e d      

i n c u r l y b r a c k e t s a r e e x e c u t e d u n t i l t h e      

e x p r e s s i o n e v a l u a t e s t o f a l s e e . g .  

while true loop ();

repeati s s i m i l a r t o w h i l e b u t t h e c o n d i t i o n a l  

e x p r e s s i o n i s a t t h e e n d o f t h e l o o p a n d m u s t    

e v a l u a t e t o      false

f o r t h e l o o p t o b e r e p e a t e d      

e . g .  

repeat loop (); false;

fora l l o w s a c o n t r o l v a r i a b l e t o b e i n i t i a l i s e d ,  

i n c r e m e n t e d a n d t e s t e d a l l i n o n e s t a t e m e n t e . g .  

i n i t i a l i s e s t h e c o n t e n t s o f a n i n t e g e r a r r a y o f s i z e      

1 0 t o 0 .  

B o o l e a n e x p r e s s i o n s      

B o o l e a n e x p r e s s i o n a p p e a r a s p a r t o f m a n y f l o w        

o f c o n t r o l s t a t e m e n t s i n C h a r m a n d c a n b e      

c o m p o s e d o f t h e f o l l o w i n g c o m p a r i s o n o p e r a t o r s :  

= - e q u a l  

# - n o t e q u a l  

: = : - e q u a l ( p o i n t e r c o m p a r i s o n )    

: # : - n o t e q u a l ( p o i n t e r c o m p a r i s o n )    

> - g r e a t e r t h a n      

< - l e s s t h a n      

> = - g r e a t e r t h a n o r e q u a l t o      

< = - l e s s t h a n o r e q u a l t o      

I f A a n d B a r e b o o l e a n e x p r e s s i o n s , t h e y c a n b e      

c o m b i n e d u s i n g t h e l o g i c a l o p e r a t o r s :  

A a n d B - b o t h A a n d B m u s t b e t r u e      

A o r B - e i t h e r A o r B m u s t b e t r u e      

n o t A - A m u s t b e f a l s e      

for (int i := 0 step i := i + 1 while i < 10) a[i] := 0;

Page 26: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 26/366       

n i l  

T h e   nil

k e y w o r d o c c u p i e s a s p e c i a l p l a c e i n t h e      

C h a r m l a n g u a g e a n d c a n b e u s e d t o i n i t i a l i s e      

a n d t e s t p o i n t e r s ( r e f v a r i a b l e s ) . I t i n d i c a t e s t h a t    

t h e p o i n t e r i s n o t c u r r e n t l y s e t u p t o p o i n t    

a n y w h e r e , a n d a n a t t e m p t t o u s e i t w i l l r e s u l t i n      

a n e x c e p t i o n t h a t s t o p s p r o g r a m e x e c u t i o n .  

T r e e r e c u r s i o n        

T h e f o l l o w i n g p r o g r a m u s e s t r e e r e c u r s i o n a n d      

t h e l a n g u a g e c o n s t r u c t s t o d r a w a t r e e o n t h e      

s c r e e n      

import lib.Maths;

import lib.Vdu;

module Tree{

const

MODE = 31, | display mode |

OFFSET = 30, | display offset |

LEVELS = 7, | branch levels |

VARS = 1000; | variations |

int xmax, ymax, xshift, yshift; | screen parameters |

proc variation (real value, real deviation) real

{

return value * (1 + deviation * (0.5 - 1.0 * (Maths.random () mod (VARS + 1)) / VARS));

}

proc branch (int level, real length, real angle, int xs, int ys)

{

int xe := xs + length * Maths.fn.cos(angle);

int ye := ys + length * Maths.fn.sin(angle);

Vdu.plot (Vdu.P_POINT + Vdu.P_PLOT_F_ABS, xs l_sl xshift, ys l_sl yshift);

Vdu.plot (Vdu.P_PLOT_F_ABS, xe l_sl xshift, ye l_sl yshift);

if level > 1 + Maths.random () mod 2

{

real scale := variation (0.65, 0.25);int branches := level - Maths.random () mod 3;

if branches <= 0 return;

real range := variation (1.5, 0.2);

for int i := 0 step inc (i) while i <= branches

{

real factor := variation (0.5, 0.8);

if i = branches factor := 0;

branch (level - 1,

variation (length * scale, 0.2),

variation (angle, 0.3) + i * range / branches - range / 2,

xe - (xe - xs) * factor, ye - (ye - ys) * factor);}

}

}

Page 27: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 27/364       

T o m a k e t h e t r e e l o o k m o r e r e a l i s t i c s o m e      

b r a n c h p a r a m e t e r s h a v e b e e n r a n d o m i s e d , f o r    

e x a m p l e t h e i r l e n g t h a n d t h e a n g l e b e t w e e n      

t h e m . T o c o m p i l e t h i s p r o g r a m , C h a r m v e r s i o n      

2 . 6 . 5 o r n e w e r i s n e e d e d .  

F o r t h i s m o n t h ' s e x e r c i s e a d d s o m e f r u i t ( h i n t    

r a n d o m l y d r a w s o m e c o l o u r e d c i r c l e s a t o r n e a r    

b r a n c h e n d s ) .  

N e x t T i m e        

N e x t t i m e I i n t e n d t o t a l k a b o u t w r i t i n g c o n t a i n e r s      

i n C h a r m , n a m e l y s e t s , l i s t s a n d m a p s .  

export proc ~start ()

{

Vdu.mode (MODE);

xshift := Vdu.mode_var (MODE, Vdu.MV_X_EIG_FACTOR);

yshift := Vdu.mode_var (MODE, Vdu.MV_Y_EIG_FACTOR);

xmax := Vdu.mode_var (MODE, Vdu.MV_X_WINDOW_LIMIT) + 1;

ymax := Vdu.mode_var (MODE, Vdu.MV_Y_WINDOW_LIMIT) + 1;Vdu.g_colour (0, 7);

Vdu.plot (Vdu.P_POINT + Vdu.P_PLOT_F_ABS, OFFSET l_sl xshift, OFFSET l_sl yshift);

Vdu.plot (Vdu.P_RECTANGLE_FILL + Vdu.P_PLOT_F_ABS,

(xmax - OFFSET - 1) l_sl xshift,

(ymax - OFFSET - 1) l_sl yshift);

Vdu.g_colour (0, 0);

branch (LEVELS, (ymax - OFFSET) / 3, Maths.fn.asn(1), (xmax - OFFSET) / 2, OFFSET);

}

}

Page 28: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 28/368     

D I F F I C U L T Y : M E D I U M        

V l a d i m i r A l a r c ó n      

& N a t h a n i e l M o n s o n      

G u e s t W r i t e r s      

F R E S H L Y R O A S T E D        

A b e g i n n e r s g u i d e t o J a v a      

A P i a n d a c u p o f J a v a , p l e a s e !    

Y o u w i l l n e e d :  

- A R a s p b e r r y P i w i t h R a s p b i a n .  

- 1 5 0 M B o f f r e e s p a c e i n y o u r S D c a r d .  

- B a s i c k n o w l e d g e o f p r o g r a m m i n g .  

- B a s i c c o m m a n d - l i n e u s a g e .  

I n t r o d u c t i o n      

I n t h i s a r t i c l e I ' l l s h o w y o u h o w t o w r i t e a n d r u n J a v a      

p r o g r a m s o n y o u r R a s p b e r r y P i .  

J a v a i s a n o b j e c t - o r i e n t e d l a n g u a g e d e s i g n e d t o r u n      

o n m a n y o p e r a t i n g s y s t e m s w i t h o u t r e q u i r i n g      

r e c o m p i l a t i o n o f t h e s o u r c e c o d e . J a v a a l s o i n c l u d e s      

a v a s t a m o u n t o f l i b r a r i e s , w h i c h o f f e r s o l u t i o n s t o      

m o r e a d v a n c e d p r o b l e m s l i k e r u n n i n g c o m p l e x w e b      

s i t e s o r h i g h - e n d m i s s i o n - c r i t i c a l a l g o r i t h m s . I n t h i s      

a r t i c l e I w i l l f o c u s o n t h e v e r y b a s i c s o f t h e l a n g u a g e .  

O n c e y o u m a s t e r t h e l a n g u a g e t h e r e a r e p l e n t y o f    

w e b s i t e s o n t h e I n t e r n e t w i t h l o t s o f d e t a i l s o f    

l i b r a r i e s a n d m a n y e x a m p l e s .  

I ' l l f i r s t s h o w y o u t h e s t e p s t o i n s t a l l t h e J a v a c o m p i l e r    

a n d v i r t u a l m a c h i n e o n t h e R a s p b e r r y P i . T h e n , w e ' l l  

c r e a t e a c o u p l e o f b a s i c J a v a p r o g r a m s . . . a n d w e ' l l  

r u n t h e m !    

T h i s a r t i c l e s h o w s y o u t h e r u n n i n g e x a m p l e s f i r s t , a n d      

d e l v e s i n t o c o n c e p t s l a t e r . T h e i d e a b e h i n d t h i s      

a p p r o a c h i s t h a t i t w i l l b e e a s i e r f o r y o u t o l o o k a t r e a l  

J a v a p r o g r a m s a n d t r y t o i d e n t i f y t h e n e w e l e m e n t s      

a n d t h e i r f u n c t i o n s b y y o u r s e l f . O n c e y o u h a v e w r i t t e n      

t h e p r o g r a m a n d r u n i t , I w i l l e x p l a i n t h e n o v e l t i e s .  

1 . I n s t a l l a t i o n      

T o w r i t e , c o m p i l e a n d r u n y o u r p r o g r a m , y o u ' l l n e e d      

t w o t h i n g s : a t e x t e d i t o r , a n d a J a v a d e v e l o p m e n t k i t    

( J D K ) . Y o u c a n u s e a n y t e x t e d i t o r t o w r i t e a J a v a      

p r o g r a m . I p r e f e r    Geany b e c a u s e o f i t s s y n t a x      

c o l o u r i n g , b u t    Leafpad o r   GEdit w i l l w o r k t o o .  

W h i l e t h e r e a r e s e v e r a l J D K s , I s u g g e s t O p e n J D K 7 .  

A J D K i n c l u d e s ( m a i n l y ) a c o m p i l e r a n d a J a v a v i r t u a l  

m a c h i n e ( J V M ) . T h e c o m p i l e r g e n e r a t e s p l a t f o r m        

i n d e p e n d e n t b y t e c o d e a n d t h e J V M i s a b l e t o r u n t h i s      

b y t e c o d e .  

T o i n s t a l l   Geany a n d O p e n J D K 7 o p e n a t e r m i n a l  

w i n d o w a n d t y p e :  

sudo apt-get install -y openjdk-7-jdk geany

I t w i l l p r o b a b l y t a k e a t l e a s t n i n e m i n u t e s t o d o w n l o a d      

a n d i n s t a l l e v e r y t h i n g , b u t i t c a n t a k e l o n g e r    

d e p e n d i n g o n t h e s p e e d o f y o u r i n t e r n e t c o n n e c t i o n .  

O n c e t h e i n s t a l l a t i o n h a s f i n i s h e d , c h e c k b o t h      

p a c k a g e s a r e i n s t a l l e d c o r r e c t l y . Y o u s h o u l d b e a b l e      

t o o p e n      Geany f r o m t h e m a i n m e n u , u n d e r    

" P r o g r a m m i n g " . T o t e s t O p e n J D K 7 , o p e n a t e r m i n a l  

w i n d o w a n d t y p e :  

Page 29: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 29/362 9     

java -version

I t s h o u l d d i s p l a y a f e w l i n e s s t a r t i n g w i t h :  

java version "1.7...

OpenJDK ...

2 . R u n n i n g o u r f i r s t p r o g r a m          

C r e a t e a d i r e c t o r y t o s t o r e o u r p r o g r a m s . F o r    

e x a m p l e , o p e n a t e r m i n a l a n d t y p e :  

mkdir cupofjava

N o w i t i s t i m e t o w r i t e o u r f i r s t p r o g r a m ( a c l a s s )    

c a l l e d " H i T h e r e " . J a v a i s a n o b j e c t o r i e n t e d      

p r o g r a m m i n g l a n g a u g e , w h e r e e v e r y p r o g r a m        

c o n t a i n s a t l e a s t o n e c l a s s w h i c h i n t u r n c a n u s e      

o t h e r c l a s s e s .  

O p e n t h e t e x t e d i t o r (    Geany i n m y c a s e ) a n d c r e a t e a      

f i l e c a l l e d      HiThere.java. T y p e i n ,  

public class HiThere {

public static void main(String[] args) {

System.out.println("A Java Pi!");

}

}

a n d s a v e t h e f i l e . U s i n g t h e t e r m i n a l , c h a n g e t o t h e      

d i r e c t o r y "    cupofjava " ( w h e r e y o u c r e a t e d t h e      

p r o g r a m ) u s i n g :  

cd cupofjava

a n d t h e n t y p e :  

javac HiThere.java

T h e    javac c o m m a n d c o m p i l e s t h e      .java f i l e i n t o a      

.class f i l e . T h e c o m p i l e r a n a l y s e s t h e s o u r c e c o d e      

i n t h e      HiThere.java f i l e a n d g e n e r a t e s t h e      

b i t e c o d e f o r m . A f t e r 1 5 s e c o n d s o r s o , t h i s c o m m a n d      

s h o u l d s i l e n t l y f i n i s h . I f y o u m i s s p e l l e d s o m e t h i n g i t    

w i l l s h o w a n e r r o r m e s s a g e t h a t w i l l d i s p l a y w h e r e t h e      

p r o b l e m i s . I f t h i s i s t h e c a s e , g o b a c k t o t h e t e x t    

e d i t o r , c h e c k y o u r c o d e a n d f i x t h e m i s s p e l l i n g , s a v e      

t h e f i l e , a n d t h e n r u n j a v a c a g a i n . O n c e t h e f i l e h a s      

b e e n s u c c e s s f u l l y c o m p i l e d , y o u ' l l f i n d a n e w f i l e i n      

t h e s a m e d i r e c t o r y c a l l e d      HiThere.class

. T h i s i s      

t h e c o m p i l e d p r o g r a m t h a t w i l l b e r u n .  

T o r u n t h e p r o g r a m t y p e :  

java HiThere

Y o u d o n ' t n e e d t o s p e c i f y t h e      .class e x t e n s i o n .  

T h e c o m m a n d      javac c o m p i l e s p r o g r a m s , a n d t h e      

c o m m a n d      java

e x e c u t e s t h e m .  

T h e p r o g r a m w i l l r u n a n d w i l l d i s p l a y :  

A Java Pi!

W e l l . . . C o n g r a t u l a t i o n s ! Y o u h a v e w r i t t e n a n d r u n      

y o u r f i r s t J a v a p r o g r a m o n t h e R a s p b e r r y P i .  

Y o u p r o b a b l y n o t i c e d t h e p r o g r a m t o o k a f e w        

s e c o n d s t o w r i t e t h a t m e s s a g e . W h y s o s l o w ?      

A c t u a l l y , J a v a i s q u i t e f a s t . T h e w h o l e p r o g r a m t o o k      

o n l y a c o u p l e o f m i l l i s e c o n d s t o r u n , b u t J a v a n e e d s a      

f e w s e c o n d s a t t h e b e g i n n i n g t o l o a d t h e J V M . T h e      

g o o d n e w s i s t h a t o n c e t h e J V M i s l o a d e d , t h e      

p r o g r a m r u n s v e r y f a s t .  

W e l l , l e t ' s n o w l o o k a t t h e p r o g r a m i n m o r e d e t a i l .  

T h e r e ' s o n l y o n e l i n e i n i t t h a t i s a c t u a l l y e x e c u t e d .  

T h i s l i n e i s :  

System.out.println("A Java Pi!");

T h e o t h e r l i n e s s p e c i f y t h e n a m e o f t h e c l a s s      

"  HiThere

" ( a t l i n e 1 ) , a n d t h e n a m e o f t h e m e t h o d      

main ( a t l i n e 3 ) . T h i s c l a s s , s i m i l a r t o a n y o t h e r J a v a      

c l a s s , c a n h a v e m a n y m e t h o d s b u t w e a r e u s i n g o n l y      

a s i n g l e o n e i n t h i s e x a m p l e .  

C h a l l e n g e # 1 : Y o u r t u r n n o w . U s i n g t h e t e x t e d i t o r ,  

c h a n g e t h e m e s s a g e i n b e t w e e n d o u b l e q u o t e s i n t h e      

s o u r c e f i l e f r o m " A J a v a P i ! " t o " M y n a m e i s N a m e . "    

( u s e y o u r n a m e ) a n d s a v e i t . W i t h t h e t e r m i n a l ,  

c o m p i l e t h e p r o g r a m a g a i n a n d r u n i t u s i n g t h e t w o      

c o m m a n d s ( j a v a c a n d j a v a ) s h o w n b e f o r e . I f y o u d o i t    

r i g h t , t h e p r o g r a m w i l l d i s p l a y y o u r n a m e n o w . D o i t !    

A n o t e : T h e s y n t a x o f J a v a ( t h e w o r d s a n d      

p u n c t u a t i o n o f t h e l a n g u a g e ) i s v e r y s i m i l a r t o t h e      

s y n t a x o f t h e C l a n g u a g e . A n y p r o g r a m m e r w i t h      

Page 30: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 30/360       

k n o w l e d g e o f C w i l l f i n d t h e b a s i c s o f J a v a v e r y e a s y      

t o u n d e r s t a n d .  

3 . J a v a v a r i a b l e s a n d C o n t r o l f l o w          

T h e n e x t e x a m p l e i l l u s t r a t e s t h e u s e o f v a r i a b l e s a n d      

c o n t r o l f l o w s t a t e m e n t s . I n t h e s a m e d i r e c t o r y w h e r e      

w e s t o r e d t h e f i r s t p r o g r a m , c r e a t e a n e w f i l e c a l l e d      

DiceRoller.java. T h e n a p p e n d ,  

import java.util.Random;

public class DiceRoller {

public static void main(String[] args) {

Random generator = new Random();

int d = 0;

while (d < 4) {

System.out.print("Rolling... ");

int face = 1 + generator.nextInt(6);

System.out.print("I got a "+ face

+ ". ");

if (face == 1) {

System.out.print("Wow! An ACE!");

}

System.out.println();

d = d + 1;

}

}

}

t o t h e f i l e a n d s a v e i t . C o m p i l e a n d t h e n r u n t h e      

p r o g r a m .  

javac DiceRoller.java

java DiceRoller

Y o u ' l l s e e s o m e t h i n g s i m i l a r t o :  

Rolling... I got a 2.

Rolling... I got a 1. Wow! An ACE!

Rolling... I got a 4.

Rolling... I got a 5.

T h e p r o g r a m w i l l r o l l f o u r d i c e a n d w i l l i d e n t i f y w h i c h      

o n e s a r e a c e s ( t h e n u m b e r 1 ) . D o y o u s e e h o w i t    

w o r k s ?      

T h e r e a r e q u i t e a f e w t h i n g s o f i n t e r e s t i n t h i s      

e x a m p l e . T h i s p r o g r a m u s e s t w o i n t e g e r v a r i a b l e s ,  

n a m e d      d

a n d   face

. T h e v a r i a b l e      d

i s u s e d t o m a k e      

s u r e w e r o l l f o u r t i m e s , n o t t h r e e t i m e s o r n o t f i v e      

t i m e s . T h e      face

v a r i a b l e s t o r e s t h e d i e f a c e a f t e r    

e a c h r u n . T h e p r o g r a m a l s o r e c e i v e s a n a r r a y o f    

s t r i n g s i n t h e v a r i a b l e n a m e d      args. T h e      args

v a r i a b l e c o n t a i n s t h e c o m m a n d - l i n e p a r a m e t e r s      

p r e s e n t w h e n t h e p r o g r a m i s r u n . F i n a l l y , t h e      

p r o g r a m a l s o u s e s a n o b j e c t c a l l e d      generator. 

R e m e m b e r I t o l d y o u a J a v a c l a s s c a n u s e o t h e r    

c l a s s e s ? T h i s i s a n e x a m p l e . T h i s p r o g r a m u s e s a n      

e x i s t i n g c l a s s ( c a l l e d      Random) t h a t s p e c i a l i z e s i n      

g e n e r a t i n g r a n d o m n u m b e r s . A c l a s s c a n b e u s e d b y      

c a l l i n g i t s m e t h o d s , e i t h e r d i r e c t l y o r b y c r e a t i n g a n      

o b j e c t . I n t h i s c a s e w e o n l y u s e o n e o f i t s m e t h o d s ,  

t h e o n e c a l l e d      nextInt(), t o g e t a r a n d o m n u m b e r .  

A d d i t i o n a l l y , J a v a u s e s t h e b r a c k e t s      {

a n d   }

t o d e f i n e      

g r o u p s o f i n s t r u c t i o n s , c a l l e d b l o c k s . E a c h b l o c k c a n      

b e e m p t y , o r h a v e o n e o r m o r e i n s t r u c t i o n s . Y o u c a n      

d e f i n e s u b - b l o c k s i n s i d e e x i s t i n g b l o c k s a s n e e d e d .  

T h i s i s c o m m o n l y u s e d i n c o n t r o l - f l o w s t a t e m e n t s .  

T a l k i n g a b o u t t h i s , . . . t h i s e x a m p l e s h o w s t h e u s e o f    

t w o c o n t r o l - f l o w s t a t e m e n t s :   if a n d    while. A n    if

s t a t e m e n t e x e c u t e s a b l o c k o n l y i f t h e c o n d i t i o n      

s p e c i f i e d i n p a r e n t h e s i s i s t r u e ; a      while, o n t h e o t h e r    

h a n d , w i l l e x e c u t e t h e n e s t e d b l o c k m u l t i p l e t i m e s a s      

l o n g a s t h e c o n d i t i o n i s t r u e . O t h e r c o n t r o l b l o c k s a r e      

for,  do-   while,  switch a n d    if-   else. 

I n t h e e x a m p l e , t h e      if

s t a t e m e n t c h e c k s t h e v a l u e o f    

face. T h a t ' s w h y t h e e x t r a m e s s a g e a p p e a r s o n l y      

w h e n a n a c e i s r o l l e d . T h e      while s t a t e m e n t , o n t h e      

o t h e r h a n d , e x e c u t e s t h e i n c l u d e d b l o c k f o u r t i m e s .  

T h e    while l o o p c o n t i n u e s w h i l e t h e v a l u e o f t h e      

v a r i a b l e      d i s l e s s t h a n 4 . N o t i c e t h a t t h e v a r i a b l e i s      

s e t t o z e r o b e f o r e t h e l o o p . I n s i d e t h e l o o p i t    

i n c r e a s e s b y o n e a t t h e e n d o f t h e b l o c k . T h e r e f o r e ,  

t h e f i r s t f o u r t i m e s ( 0 , 1 , 2 , 3 ) t h e      while s u c c e e d s ,  

b u t o n t h e f i f t h o n e ( w h e n i t h a s t h e v a l u e 4 ) i t f a i l s .  

C h a l l e n g e # 2 : C h a n g e t h e p r o g r a m t o r o l l 7 d i c e ,  

w h e r e e a c h d i c e h a s 1 0 f a c e s . O n c e y o u h a v e s a v e d      

y o u r c h a n g e s , g o t o t h e c o m p i l e t h e p r o g r a m a g a i n      

a n d r u n i t u s i n g t h e t w o c o m m a n d s (    javac

a n d   

java) s h o w n b e f o r e . I f y o u d o i t r i g h t , t h e p r o g r a m        

w i l l n o w d i s p l a y a l l s e v e n d i c e . G o f o r i t !    

Page 31: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 31/36

Page 32: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 32/362     

D I F F I C U L T Y : A D V A N C E D        

W . H . B e l l    

M a g P i W r i t e r    

C L I E N T S E R V E R        

M o d e l f o r u s i n g m a n y c o m p u t e r s      

P a r a l l e l c a l c u l a t i o n s - p a r t 3      

C o m p l e t i n g B a t c h C a l c u l a t o r    

W e l c o m e b a c k t o t h e P y t h o n P i t . T h i s a r t i c l e i s a c o n t i n u a t i o n o f t h e t u t o r i a l p r e s e n t e d i n I s s u e s 1 0 a n d 1 3 . I f y o u h a v e n o t    

a l r e a d y d o n e s o , i t w o u l d b e a g o o d i d e a t o r e a d t h e p r e v i o u s p a r a l l e l c a l c u l a t i o n s a r t i c l e s i n t h e s e I s s u e s b e f o r e p r o c e e d i n g .  

T h e    FunctionCalculator.py f i l e w a s o r i g i n a l l y w r i t t e n t o r u n a g e n e t i c a l g o r i t h m , u s i n g s e v e r a l c o m p u t e r s a t o n c e . T h e      

c a l c u l a t i o n s f o r e a c h p o i n t i n t h e g e n e t i c a l g o r i t h m w e r e e v a l u a t e d u s i n g C + + a n d r a n f o r a r o u n d e i g h t m i n u t e s o n h i g h      

s p e c i f i c a t i o n C P U c o r e s . I n t h i s c a s e , t h e t i m e o v e r h e a d o f s e r v e r a n d c l i e n t p r o c e s s e s w r i t t e n i n P y t h o n w a s n e g l i g a b l e .  

S i n c e t h e c l u s t e r u s e d w a s o f t e n u s e d f o r o t h e r t a s k s , t h e i m p l e m e n t a t i o n o f    FunctionCalculator.py p r o v i d e d a w a y o f    

u s i n g a s m a n y c o r e s a s p o s s i b l e w i t h o u t r e q u i r i n g a r i g i d a d d r e s s i n g s t r u c t u r e .  

T h e r e r e m a i n t w o s t e p s l e f t i n t h i s s e r i e s o f a r t i c l e s : ( i ) t h e c o m p l e t i o n o f t h e      BatchCalculator c l a s s a n d ( i i ) t h e u s e o f    

FunctionCalculator.py t o r u n s o m e m o r e s e r i o u s c a l c u l a t i o n s . O p e n t h e f i l e      FunctionCalculator.py f r o m I s s u e      

1 3 . T h e n g o d o w n t o f u n c t i o n      shutdown i n t h e c l a s s      BashCalculator . A f t e r    shutdown , a d d t h e m e m b e r f u n c t i o n      

evaluate : 

def evaluate(self, cmds):

# Wait until at least one client thread is availablewhile len(self.client_threads) == 0:

print "Waiting for a client to connect"time.sleep(5)

ncmds = len(cmds)

# Create a buffer to collect the resultsresults = [0.]*ncmds

# If no commands were given return empty list of resultsif ncmds == 0:

return results

# Create a buffer to collect the status of the results and the results# 0 => not calculated, 1 => being calculated, 2 => done

status_results = []icmd = 0while icmd < ncmds:

status_results.append(StatusResult(0,0.))icmd = icmd + 1

Page 33: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 33/363 3       

# Loop until all of the calculations have finished.finished = Falseithread = 0icmd = 0while not finished:

print "Looping"print "Status and results = %s" % status_resultstime.sleep(1)

# Check if all status flags are 2 and copy the results into the# results list at the same timejobsLeft = Falsefor i in xrange(ncmds):

sr = status_results[i]if sr.cmd_status != 2:

jobsLeft = Truebreak

results[i] = sr.result

if not jobsLeft:finished = Truecontinue

print "Have jobs to do"

# Check the number of threads inside the loop in case more# threads are created during the loopnthreads = len(self.client_threads)

print "Currently have %d threads to work with" % nthreads

# If the index points at the last thread go back to the# first thread.if ithread == nthreads:

ithread = 0

print "Using thread index %d" % ithread

# If the index points at the last cmd go back to the first cmd.if icmd == ncmds:

icmd = 0

print "Checking cmd index %d" % icmd

# Check if this cmd has been submitted or not. If the# command has already been submitted skip to the next# command.if status_results[icmd].cmd_status != 0:

print "Command %d has status %d" % (icmd, status_results[icmd].cmd_status)

icmd = icmd + 1continue

print "Searching for an idle thread"

# Find an idle threadfoundThread = Falsewhile not foundThread:

# Check the number of threads inside the loop in case more# threads are created during the loopnthreads = len(self.client_threads)

# Keep looping round and round.

if ithread == nthreads:ithread = 0

Page 34: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 34/364     

T h e    evaluate f u n c t i o n t a k e s a l i s t o f c o m m a n d s a n d r e t u r n s a l i s t o f f l o a t i n g p o i n t n u m b e r s w h i c h c o r r e s p o n d t o e a c h      

c o m m a n d . T h e f u n c t i o n p e r f o r m s t h e c a l c u l a t i o n s b y p a s s i n g e a c h c o m m a n d t o a c l i e n t p r o c e s s .  

T h e    evaluate f u n c t i o n w a i t s u n t i l a l e a s t o n e c l i e n t t h r e a d h a s c o n n e c t e d . O n c e o n e c l i e n t h a s c o n n e c t e d a      while l o o p i s      

u s e d t o e v a l u a t e e a c h o f t h e c o m m a n d s . T h e c o m m a n d s a r e g i v e n a n a s s o c i a t e d s t a t u s c o d e o f z e r o , w h i c h i s s e t t o o n e i f    

t h e c o m m a n d i s b e i n g e v a l u a t e d o r t w o i f t h e c o m m a n d h a s b e e n e v a l u a t e d . T o p r e v e n t a t i g h t l o o p a n d a n a s s o c i a t e d h i g h      

u s e o f C P U o n t h e c o m p u t e r r u n n i n g t h e      BatchCalculator , a    sleep s t a t e m e n t i s u s e d w i t h i n s e v e r a l o f t h e l o o p s . T h e r e      

a r e a l o t o f    print s t a t e m e n t s t o s h o w h o w t h e f u n c t i o n w o r k s .  

I f a c l i e n t p r o c e s s c o n n e c t s t o t h e s e r v e r w h i l e s o m e c o m m a n d s a r e b e i n g e v a l u a t e d , t h e n i t w i l l b e a d d e d t o t h e p o o l o f    

a v a i l a b l e c l i e n t s . T h e r e f o r e , t h e s p e e d o f c a l c u l a t i o n w i l l i n c r e a s e a s m o r e c l i e n t s c o n n e c t . T h e      evaluate f u n c t i o n w a i t s      

f o r o n e o f t h e a s s o c i a t e d t h r e a d s t o b e c o m e a v a i l a b l e a n d p a s s e s i t a c o m m a n d . W h e n a c o m m a n d h a s b e e n e v a l u a t e d t h e      

r e s u l t i s s t o r e d i n t h e      status_results l i s t a n d t h e n c o p i e d i n t o t h e      results l i s t . T h e      status_results l i s t i s o f t y p e      

StatusResult, w h i c h i s m u t a b l e . T h e r e f o r e , t h e      

client_threadsf u n c t i o n i s p a s s e d a p o i n t e r t o t h e e l e m e n t o f t h e l i s t ,  

c a n w r i t e t h e r e s u l t s i n t o i t , a n d s e t t h e c o m m a n d s t a t u s .  

T e s t i n g t h e B a t c h C a l c u l a t o r    

W h i l e t h e      launchBatchClient.py p r o g r a m f r o m t h e l a s t t u t o r i a l i n I s s u e 1 3 c a n b e u s e d t o s t a r t t h e c l i e n t s , t h e s e r v e r    

p r o g r a m        launchBatchCalculator.py n e e d s t o b e u p d a t e d t o p a s s a l i s t o f c o m m a n d s t o t h e      evaluate f u n c t i o n o f t h e      

BatchCalculator. L o o k b a c k a t t h e f i r s t a r t i c l e i n t h i s s e r i e s a n d s e e h o w t h e c o m m a n d s w e r e p a s s e d t o t h e      

FunctionCalculator.py . T h e n t r y t o n u m e r i c a l l y s o l v e ,  

y = 4*x**4 - (x - 4)**3/(6-x)**2 + x

f o r t h e v a l u e o f    x w h e n      y i s 1 0 . C h o o s e 1 0 0 v a l u e s o f    x a t r a n d o m b e t w e e n - 1 0 0 0 a n d 1 0 0 0 . P a s s t h e s e e q u a t i o n s t o t h e      

BatchCalculator. P i c k t h e b e s t t w o p o i n t s a n d s e l e c t a n o t h e r 1 0 0 v a l u e s f o r x w i t h i n t h e s e c o n d r a n g e . R e p e a t t h e      

p r o c e d u r e u n t i l a s o l u t i o n i s f o u n d . W h i l e t h i s c a l c u l a t i o n w i l l r u n s l o w e r t h a n u s i n g a s i n g l e R a s p b e r r y P i , t h e p r o b l e m w i l l  

d e m o n s t r a t e h o w t o u s e t h e      BatchCalculator

. T h e s o l u t i o n t o t h e p r o b l e m w i l l b e g i v e n n e x t t i m e .  

self.client_threads[ithread].processingCmd().wait(1) # wait until finished or 1 sec.if not self.client_threads[ithread].processingCmd().isSet():

foundThread = Trueelse:

ithread = ithread + 1time.sleep(1)

# If there are no available threadsif not foundThread:

print "All threads are busy processing commands."time.sleep(2)continue

# Submit the command and the target list elementprint "icmd %d" % icmdsr = status_results[icmd]self.client_threads[ithread].evaluate(cmds[icmd], sr)

# Go to the next commandicmd = icmd + 1

# For debugging

print "results = %s" % results

return results

Page 35: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 35/36

T o s e e t h e l a r g e r a n g e o f P C S L b r a n d R a s p b e r r y P i a c c e s s o r i e s v i s i t    

h t t p : / / w w w . p c s l s h o p . c o m          

June's Winners!T h e w i n n e r o f a n e w 5 1 2 M B R a s p b e r r y P i M o d e l B p l u s P C S L P i A n g l e c a s e a n d G P I O        

C o b b l e r k i t i s      S u r a j p a l S i n g h ( B r i s t o l , U K )    . 

T h e 2 n d a n d 3 r d p r i z e w i n n e r s o f a P C S L P i A n g l e c a s e a r e      J a m e s D u f f e l l ( P r e s t o n , U K )    a n d   

K o b i t h a r u n K u n a s e k a r a n ( S c a r b o r o u g h , U K )    .

C o n g r a t u l a t i o n s . W e w i l l b e e m a i l i n g y o u s o o n w i t h d e t a i l s o f h o w t o c l a i m y o u r p r i z e s !    

T h i s m o n t h t h e r e i s o n e M A S S I V E p r i z e !    

T h e w i n n e r w i l l r e c e i v e a n e w R a s p b e r r y P i  

5 1 2 M B M o d e l B , a n e x c l u s i v e W h i t e b e r r y      

P C S L c a s e , 1 A P S U , H D M I c a b l e , 1 6 G B        

N O O B S m e m o r y c a r d , G P I O C o b b l e r k i t ,  

b r e a d b o a r d a n d j u m p e r w i r e s !    

F o r a c h a n c e t o t a k e p a r t i n t h i s m o n t h ' s      

c o m p e t i t i o n v i s i t :  

h t t p : / / w w w . p c s l s h o p . c o m / i n f o / m a g p i    

C l o s i n g d a t e i s 2 0 t h J u l y 2 0 1 3 .  

W i n n e r s w i l l b e n o t i f i e d i n n e x t m o n t h ' s      

m a g a z i n e a n d b y e m a i l . G o o d l u c k !    

O n c e a g a i n T h e M a g P i a n d P C S u p p l i e s L i m i t e d a r e p r o u d t o a n n o u n c e y e t    

a n o t h e r c h a n c e t o w i n s o m e f a n t a s t i c R a s p b e r r y P i g o o d i e s      !

JULY COMPETITION

3 5     

Page 36: The MagPi Issue 14 En

7/27/2019 The MagPi Issue 14 En

http://slidepdf.com/reader/full/the-magpi-issue-14-en 36/36

T h e M a g P i i s a t r a d e m a r k o f T h e M a g P i L t d . R a s p b e r r y P i i s a t r a d e m a r k o f t h e R a s p b e r r y P i F o u n d a t i o n . T h e M a g P i m a g a z i n e i s      

c o l l a b o r a t i v e l y p r o d u c e d b y a n i n d e p e n d e n t g r o u p o f R a s p b e r r y P i o w n e r s , a n d i s n o t a f f i l i a t e d i n a n y w a y w i t h t h e R a s p b e r r y P i    

F o u n d a t i o n . I t i s p r o h i b i t e d t o c o m m e r c i a l l y p r o d u c e t h i s m a g a z i n e w i t h o u t a u t h o r i z a t i o n f r o m T h e M a g P i L t d . P r i n t i n g f o r n o n c o m m e r c i a l    

p u r p o s e s i s a g r e e a b l e u n d e r t h e C r e a t i v e C o m m o n s l i c e n s e b e l o w . T h e M a g P i d o e s n o t a c c e p t o w n e r s h i p o r r e s p o n s i b i l i t y f o r t h e c o n t e n t    

o r o p i n i o n s e x p r e s s e d i n a n y o f t h e a r t i c l e s i n c l u d e d i n t h i s i s s u e . A l l a r t i c l e s a r e c h e c k e d a n d t e s t e d b e f o r e t h e r e l e a s e d e a d l i n e i s m e t b u t    

s o m e f a u l t s m a y r e m a i n . T h e r e a d e r i s r e s p o n s i b l e f o r a l l c o n s e q u e n c e s , b o t h t o s o f t w a r e a n d h a r d w a r e , f o l l o w i n g t h e i m p l e m e n t a t i o n o f    

 Feedback & Question TimeF r i d a y J u n e 1 4 , 2 0 1 3 . E s c o n d i d o ,  

C a l i f o r n i a , U S A . I g o t m y      

m a g a z i n e s t o d a y ! H o o r a y H o o r a y      

H o o r a y !    

H o m e r H a z e l  

W o w ! – w h a t a n i n c r e d i b l y      

p r o f e s s i o n a l p r o d u c t i o n !    

I h a v e d o w n l o a d e d t h e 1 3 i s s u e s      

a n d h a v e p l o u g h e d t h r o u g h t h e      

f i r s t t w o . A s a r e t i r e d I T t e a c h e r ,  

t h i s i s j u s t w h a t w e n e e d a n d i t i s      

p r e s e n t e d i n s u c h a w a y t h a t    

a n y o n e c a n g e t s o m e t h i n g o u t o f i t    

– y o u n g a n d o l d . M y P i t a k e s m e      

b a c k t o m y A c o r n A t o m d a y s a n d      

a s o l d e r i n g i r o n , a n d i t i s g o o d t o      

s e e y o u n g s t u d e n t s t a k i n g t h i s u p      

a g a i n . I a m c u r r e n t l y w o r k i n g w i t h      

a Y e a r 7 y o u n g l a d y d o i n g s o m e      

p r o g r a m m i n g a n d s i m p l e c o n t r o l  

c i r c u i t s , a n d s h e i s l o v i n g i t – w e l l ,  

w e b o t h a r e , r e a l l y !    

I s p e n d m y l i f e w r i t i n g a c o m p l e x      

e n g i n e e r i n g p r o g r a m i n      

P o w e r B A S I C – i f o n l y t h i s w a s      

a v a i l a b l e f o r L i n u x ( a n d i t i s n o t f o r    

t h e w a n t o f a s k i n g ) – a n d g e t t i n g      

t o g r i p s w i t h t h e s y n t a x o f P y t h o n      

h a s b e e n a n i n t e r e s t i n g c h a l l e n g e .  

M y o n l y f e e b l e c o m p l a i n t i s t h a t    

s e t t i n g u p a p r i n t e r i s a n i g h t m a r e !    

I c a n g e t i t t o p r i n t f r o m        

L i b r e O f f i c e , b u t n o t t h e c o m m a n d      

p r o m p t , t h o u g h I a m s u r e t h a t t h e      

a n s w e r w i l l b e i n t h e i s s u e s I h a v e      

n o t l o o k e d a t y e t .  

I t i s g o o d t o s e e B r i t a i n l e a d i n g      

t h e w o r l d a g a i n i n t h e f i e l d o f    

m i c r o c o m p u t e r s – w e l l d o n e P i .  

I a i n J o h n s t o n e      

[ E d : S e e i s s u e 1 2 f o r c o m m a n d        

l i n e p r i n t i n g ]    

2 8 8 p a g e s o f g o o d n e s s j u s t    

a r r i v e d . T h e m a g s l o o k a w e s o m e ,  

l o v e t h e b i n d e r a n d s t i c k e r s !    

I t s b e e n a b i t o f a w a i t b u t i t s      

d e f i n i t e l y b e e n w o r t h i t ! T h e w h o l e      

b u n d l e i s f a n t a s t i c a n d t h e      

m a g a z i n e q u a l i t y i s p e r f e c t . T h e y      

l o o k a n d f e e l l i k e a p r e m i u m        

m a g a z i n e y o u w o u l d b u y f r o m a      

n e w s a g e n t s . Y o u c a n s e e r i g h t    

a w a y t h e h a r d w o r k t h a t h a s g o n e      

i n t o t h e s e a n d i t i s v e r y m u c h      

a p p r e c i a t e d .  

T H A N K Y O U ! ! t o t h e w h o l e      

M a g P i t e a m ! ! T i m e t o c r a c k o n      

a n d s t a r t r e a d i n g !    

N i a l P e a r c e      

F i r s t o f a l l . G R E A T m a g a z i n e !    

T h a n k s f o r t a k i n g t h e r i s k s t o g e t    

i t o u t t h e r e i n t h e f i r s t i n s t a n c e . I  

b o u g h t t h e i s s u e s a s s o o n a s I  

s a w I c o u l d a n d t h e y t u r n e d u p      

t o d a y ( Y A Y ! ! )    

C h r i s B u r g e s s      

J u s t r e c e i v e d m y b i n d e r a n d      

m a g s - t h e y l o o k g r e a t !    

T h a n k s f o r a l l t h e e f f o r t y o u h a v e      

p u t i n t o t h i s . A n d y o u j u s t k n o w        

t h a t w e a l l w a n t V o l u m e 2 n o w        

d o n ' t y o u : - )    

M a r k P e a r s o n      

[ E d : A l l V o l u m e 2 i s s u e s t o d a t e      

w i l l b e a v a i l a b l e s o o n ]    

J u s t r e c e i v e d m y m a g a z i n e s a n d      

b i n d e r t o d a y . W o w ! T h e y a r e      

b e a u t i f u l .  

T h i s w h o l e p r o j e c t h a s b e e n      

g r e a t . I h a d s e l e c t e d t h e      

S i g n a t u r e K i t a n d a m I e v e r g l a d .  

T h e h a r d w a r e k i t c a m e s o m e t i m e      

a g o a n d t h e w h o l e t h i n g w a s t o p      

q u a l i t y . I t m e a n t a l o t t o h a v e      

t h o s e b o o k s s i g n e d b y L i z a n d      

E b e n . C o n g r a t u l a t i o n s f o r a w e l l  

e x e c u t e d p r o j e c t .  

T o n y G u e r i c h