the magpi issue 15 en

Upload: russo

Post on 04-Jun-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/13/2019 The MagPi Issue 15 En

    1/40

    IISSSSUUEE1155--AAUUGG22001133

    AAMM

    aaggaazziinneeffoorrRRaassppbbeerrrryyPPiiUUsseerrss

    hh tt tt pp ::////wwwwww .. tt hh eemmaaggpp ii .. cc oommRRaassppbbeerrrryyPPiiiissaattrraaddeemmaarrkkooffTThheeRRaassppbbeerrrryyPPiiFFoouunnddaattiioonn..TThhiissmmaaggaazziinneewwaassccrreeaatteedduussiinnggaaRRaassppbbeerrrryyPPiiccoommppuutteerr..

    GGeettpprriinntteeddccooppiieess

    aatttthheemmaaggppii..ccoomm

    AArrdduuiinnoopprrooggrraammmmiinngg

    PPoowweerreexxtteennssiioonn

    CCaammeerraammoodduullee

    BBaarreemmeettaall

    AAsssseemmbblleerr

    PPyytthhoonn

    OOlldd--sscchhooooll

    ggaammiinngg

  • 8/13/2019 The MagPi Issue 15 En

    2/40

    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 / L a y o u t

    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

    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

    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

    J a m e s N e l s o n - T e s 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

    C l a i r e P r i c e - L a y o u t

    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

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

    A m y - C l a r e M a r t i n - P r o o f R e a d i n g

    15

    W e l c o m e t o t h e 1 5 t h i s s u e o f T h e M a g P i .

    A r e y o u b o r e d o f s c h o o l h o l i d a y s o r j u s t w a n t s o m e d o w n t i m e a f t e r a h a r d d a y a t w o r k ? T h i s m o n t h ' s

    i s s u e h a s s o m e t h i n g f o r e v e r y o n e ! W e t a k e a l o o k a t t h e ' M u l t i p l e A r c a d e M a c h i n e E m u l a t o r ' a n d r e f l e c t

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

    g a m i n g c o n s o l e !

    I f t h a t ' s n o t e n o u g h , w e d e l v e d e e p e r i n t o t h e t h e p a r t n e r s h i p m a d e i n h e a v e n , T h e R a s p b e r r y P i -

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

    f r o m t h e c o m m a n d l i n e +

    J a m e s H u g h e s d i s c u s s e s a d v a n c e d u s a g e o f t h e c a m e r a m o d u l e a n d w e p u b l i s h m o r e o n C o c k t a i l

    M e g a P o w e r a n d P i M a t r i x , w h e r e B r u c e H a l l d e s c r i b e s h o w t o p r o d u c e l i g h t i n g r o u t i n e s f o r t h i s c l e v e r

    p i e c e o f k i t +

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

    a s e r i e s b y M a r t i n K a l i t i s t i t l e d ' B a k e y o u r o w n P i f i l l i n g +

    W e a r e p r o u d t o i n t r o d u c e y e t a n o t h e r l a n g u a g e t o o u r r e a d e r s , X M L , a l o n g w i t h m o r e f r o m f a v o u r i t e s

    A s s e m b l e r a n d P y t h o n +

    O n t o p o f a l l t h i s , a s a l w a y s , w e k e e p y o u u p t o d a t e w i t h R a s p b e r r y P i e v e n t s a c r o s s t h e w o r l d . P h e w !

    T h a t ' s a l o t t o g e t y o u r t e e t h i n t o . W e b e t t e r g e t s t a r t e d . E n j o 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

  • 8/13/2019 The MagPi Issue 15 En

    3/403

    4

    U S B A D R D U I N O L I N K

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

    8

    U s i n g t h e I n o c o m m a n d l i n e t o o l k i t

    9

    P a r t 2 : A d v a n c e d O p e r a t i o n

    1 6

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

    1 8

    P a r t 3 : B u i l d i n g a t o o l k i t o f p a t t e r n s

    2 0

    M A M E - M U L T I P L E A R C A D E M A C H I N E E M U L A T O R

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

    2 4

    < X M L / >

    P a r t 1 : a n i n t r o d u c t i o n t o X M L

    3 0

    P a r t 2 : L o w - l e v e l c o d i n g

    4 0

    F E E D B A C K

    H a v e y o u r s a y a b o u t T h e M a g P i

    C O M M A N D L I N E A R D U I N O P R O G R A M M I N G

    A S S E M B L Y P R O G R A M M I N G W I T H R I S C O S

    1 0

    A C O C K T A I L O F E X P A N S I O N B O A R D S

    T H E R A S P B E R R Y P I C A M E R A M O D U L E

    P a r t 4 : M e g a P o w e r : D C - D C c o n v e r t e r a n d a n A T m e g a 3 2 8 M C U

    1 4

    T H E R A S C L O C K

    P I M A T R I X

    2 8

    P a r t 1 : B a k e y o u r o w n P i f i l l i n g

    M Y O S : B U I L D A C U S T O M I S E D O P E R A T I N G S Y S T E M

    3 3

    P r e s t o n , M a n c h e s t e r , P o w y s , G a t e s h e a d

    T H I S M O N T H ' S E V E N T S G U I D E

    3 6

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

    T H E P Y T H O N P I T

    C h a r m P r o g r a m m i n g o n t h e R a s p b e r r y P i

    B O O K R E V I E W

    3 5

    h t t p : / / w w w . t h e m a g p i . c o m

    C o n t e n t s C o n t e n t s C o n t e n t s

    http://www.themagpi.com/
  • 8/13/2019 The MagPi Issue 15 En

    4/40

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

    T o n y G o o d h e w

    G u e s t W r i t e r

    U S B A R D U I N O L I N K

    A d d a n a l o g u e p o r t s t o y o u r P i

    U s i n g N a n p y t o c o n n e c t y o u r

    R a s p b e r r y P i t o a n A r d u i n o

    I f y o u h a v e b e e n u s i n g y o u r R a s p b e r r y P i w i t h L E D s

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

    n e x t l e v e l ( r e a d i n g a n a l o g u e v a l u e s a n d a d j u s t i n g

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

    a c h e a p a n d e x p a n d a b l e i n p u t / o u t p u t b o a r d i s a g o o d

    o p t i o n , w h i l e s t i l l u s i n g P y t h o n . ( Y o u a l s o g a i n a

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

    w h i c h y o u p r o g r a m f r o m y o u r R a s p b e r r y P i ) . T h i s

    u s e s a v e r y s a f e U S B c o n n e c t i o n a l l o w i n g t h e t w o

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

    A r d u i n o p r o v i d e s a n e x t r a 1 4 d i g i t a l p i n s ( 0 1 3 ) , s i x

    o f w h i c h h a v e P W M f a c i l i t i e s a n d s i x a n a l o g u e p i n s

    ( 1 0 b i t , r a n g e 0 - 1 0 2 3 , A 0 - A 5 ) w h i c h c a n a l s o b e u s e d

    a s d i g i t a l I / O p i n s . A n A r d u i n o U n o R 3 c o s t s l e s s t h a n

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

    t o d o !

    P r e p a r i n g t h e S D c a r d

    Y o u w i l l n e e d a 4 G B c l a s s 4 c a r d ( s l o w ) . C o p y t h e

    l a t e s t v e r s i o n o f R a s p b i a n W h e e z y o n t o i t a n d

    e x p a n d t h e r o o t p a r t i t i o n . T h e n r e b o o t t h e R a s p b e r r y

    P i .

    I n s t a l l s e t u p t o o l s

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

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

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

    S t a r t t h e M i d o r i w e b b r o w s e r a n d t y p e i n t h e U R L b o x

    h t t p s : / / p y p i . p y t h o n . o r g / p y p i / s e t u p t o o l s

    S c r o l l d o w n t o t h e L i n u x i n s t r u c t i o n s a n d t h e n o n t o

    t h e d o w n l o a d s . W e w a n t t h e f i l e :

    setuptools-0.6c11-py2.7.egg

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

    C l i c k o n S A V E . I t d o w n l o a d s v e r y q u i c k l y . O n c e t h e

    d o w n l o a d h a s f i n i s h e d , c l o s e M i d o r i a n d y o u s h o u l d

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

    N e x t , o p e n t h e L X T e r m i n a l a n d t y p e i n :

    sudo sh setuptools-0.6c11-py2.7.egg

    T h i s i s a v e r y q u i c k i n s t a l l a t i o n .

    I n s t a l l s e r i a l p y

    A g a i n , u s i n g t h e M i d o r i w e b b r o w s e r g o t o

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

    w a n t t o d o w n l o a d p y s e r i a l - 2 . 6 . t a r . g z .

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

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

    L X T e r m i n a l :

    cd temp # Change to the temp directory

    gunzip pyserial-2.6.tar.gz # to unzip it

    tar xvf pyserial-2.6.tar # to untar it

    cd pyserial-2.6 # move into the new foldersudo python setup.py install # to install it

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

    https://pypi.python.org/pypi/pyserialhttps://pypi.python.org/pypi/setuptools
  • 8/13/2019 The MagPi Issue 15 En

    5/405

    I n s t a l l t h e A r d u i n o s o f t w a r e

    T o b e g i n w i t h , t y p e s t a r t x t o s t a r t t h e G U I ( u n l e s s

    y o u s e t i t t o b o o t i n t o t h e G U I a u t o m a t i c a l l y ) . T h e n

    o p e n t h e L X T e r m i n a l a n d t y p e i n t h e t h e f o l l o w i n g

    c o m m a n d s :

    sudo apt-get update

    sudo apt-get install arduino

    A n s w e r Y w h e n a s k e d i f y o u w a n t t o c o n t i n u e . T h i s

    i n s t a l l a t i o n t a k e s s o m e t i m e

    Y o u c a n n o w p r o g r a m y o u r A r d u i n o f r o m t h e A r d u i n o

    I D E .

    I n s t a l l N a n p y

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

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

    W i n d o w s P C a n d t h e n t r a n s f e r t h e u n z i p p e d f o l d e r t o

    t h e R a s p b e r r y P i v i a a m e m o r y s t i c k . O n a P C , u s i n g

    y o u r w e b b r o w s e r , n a v i g a t e t o t h e g i t r e p o s i t o r y

    h t t p s : / / g i t h u b . c o m / n a n p y / n a n p y a n d c l i c k o n t h e Z I P

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

    c o m p u t e r . U n z i p i t a n d c o p y t h e n a n p y - m a s t e r

    d i r e c t o r y v i a a U S B s t i c k t o y o u r p i d i r e c t o r y .

    N e x t , c o n n e c t y o u r A r d u i n o v i a a U S B c a b l e t o t h e

    R a s p b e r r y P i . T h e n o p e n t h e L X T e r m i n a l a n d

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

    cd nanpy-master

    cd firmware

    export BOARD=uno

    # (Type make boards for a full list)

    make

    make upload # This also takes some time

    T h i s R E D s e c t i o n n e e d s t o b e d o n e e a c h t i m e y o u

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

    A r d u i n o p a r t o f n a n p y i n t o t h e A r d u i n o . N o w t y p e :

    cd .. # Move back to nanpy-master directory

    sudo python setup.py install

    T h i s a d d s t h e R a s p b e r r y P i p a r t o f n a n p y t o P y t h o n 2

    a n d o n l y n e e d s t o b e d o n e o n c e . Y o u c a n n o w u s e

    t h e A r d u i n o a s a n I / O b o a r d f o r t h e R a s p b e r r y P i .

    T h i s a d d s 2 0 e x t r a I / O p i n s 6 c a n b e u s e d f o r 1 0 - b i t

    a n a l o g i n p u t s ( r a n g e 0 - 1 0 2 3 ) a n d 6 a s P W M o u t p u t s

    ( r a n g e 0 - 2 5 5 ) .

    T e s t i n g

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

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

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

    O n y o u r A r d u i n o c o n n e c t a n L E D i n s e r i e s w i t h a

    r e s i s t o r ( a b o u t 2 5 0 O h m f o r p r o t e c t i o n ) b e t w e e n p i n

    1 0 a n d g r o u n d . T h e l o n g e r l e a d o f t h e L E D , t h e

    a n o d e , g o e s t o w a r d s p i n 1 0 a n d t h e s h o r t e r , t h e

    c a t h o d e , t o w a r d s G N D . P i n 1 0 a l l o w s P W M ( P u l s e

    W i d t h M o d u l a t i o n ) .

    F r o m t h e L X D E G U I o n y o u r R a s p b e r r y P i , s t a r t

    L X T e r m i n a l o n c e a g a i n a n d t y p e :

    sudo idle

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

    m e n u i n I D L E . C l i c k o n F i l e , t h e n N e w w i n d o w ( t o

    o p e n a n e w w i n d o w ) a n d t y p e i n t h e f o l l o w i n g

    p r o g r a m :

    #!/usr/bin/env python

    # LED with 250 Ohm resistor on Pin 10 to GND

    # Tony Goodhew - 10 May 2013

    from nanpy import Arduino

    from nanpy import serial_manager

    serial_manager.connect('/dev/ttyACM0') # serial connection to Arduino

    from time import sleep

    LED =10 # LED on Arduino Pin 10 (with PWM)

    Arduino.pinMode(LED, Arduino.OUTPUT)

    print"Starting"print"5 blinks"

    for i in range(0,5):

    Arduino.digitalWrite(LED, Arduino.HIGH)

    https://github.com/nanpy/nanpy
  • 8/13/2019 The MagPi Issue 15 En

    6/40

    sleep(0.5)

    Arduino.digitalWrite(LED, Arduino.LOW)

    sleep(0.5)

    print"Changing brightness of LED"

    bright = 128 # Mid brightness

    Arduino.analogWrite(LED, bright)

    Arduino.digitalWrite(LED,Arduino.HIGH) # Turn on LED

    for i in range(0,200):

    bright = bright + 8

    if (bright > 200): # LED already full on at this point

    bright = 0 # Minimum power to LED

    Arduino.analogWrite(LED, bright) # Change PWM setting/brightness

    sleep(0.05)

    Arduino.digitalWrite(LED,Arduino.LOW) # Turn off LED

    print"Finished"

    S a v e a n d r u n t h e p r o g r a m f r o m t h e I D L E m e n u .

    P r o b l e m : I f y o u p u l l t h e U S B c a b l e o u t o f t h e A r d u i n o

    w h i l e t h e P i i s c o n t r o l l i n g i t y o u m a y n e e d t o r e - b o o t

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

    a l s o n e e d t o r e - d o t h e i n s t r u c t i o n s i n t h e ' I n s t a l l

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

    R e a d i n g a s i n g l e s w i t c h

    D i g i t a l p i n s w i t h s w i t c h e s n e e d t o b e h e l d H I G H ( a t

    5 V ) o r L O W ( a t 0 V ) u n t i l a s w i t c h i s c l o s e d . W h e n t h e

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

    t h e o p p o s i t e s t a t e - H I G H t o L O W o r L O W t o H I G H .

    A 1 0 K O h m r e s i s t o r i s u s e d t o ' p u l l ' t h e p i n e i t h e r

    H I G H o r L O W . T h i s i s e x a c t l y t h e s a m e a s p u t t i n g

    s w i t c h e s d i r e c t l y o n t o t h e R a s p b e r r y P i ' s G P I O p i n s .

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

    T h e w i r e s c o n n e c t t o t h e A r d u i n o : R e d t o 5 V , b l a c k t o

    G N D a n d t h e g r e e n w i r e t o p i n 8 . T h e f o l l o w i n g c o d e

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

    #!/usr/bin/env python

    # Button switch on pin 8

    # with 10K ohm pull up resistor

    from nanpy import Arduino

    from nanpy import serial_manager

    serial_manager.connect('/dev/ttyACM0')

    button = 8 # Switch on pin 8

    count = 0 # Initialise counter

    # Set Button pin for input

    Arduino.pinMode(button, Arduino.INPUT)

    print "Press the button 3 times"

    while (count < 3):

    sw1 = Arduino.digitalRead(button)

    #Wait until switch is pressed

    while (sw1 == 1):

    sw1 = Arduino.digitalRead(button)count = count + 1

    print count

    #Wait until switch is released

    while (sw1 == 0):

    sw1 = Arduino.digitalRead(button)

    print "Finished"

    T h a n k s t o A n d r e a S t a g i f o r t h e s o f t w a r e . S e e T h e

    M a g P i , i s s u e 8 , p a g e 1 2 f o r m o r e d e t a i l s .

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

    d r i v i n g a l i q u i d c r y s t a l d i s p l a y ( L C D ) s o m a k e s u r e t o

    c o m e b a c k f o r m o r e N a n p y g o o d n e s s !

  • 8/13/2019 The MagPi Issue 15 En

    7/40

    http://shop.pimoroni.com/
  • 8/13/2019 The MagPi Issue 15 En

    8/40

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

    N a t h a n B o o k h a m

    G u e s t W r i t e r

    A R D U I N O I N O

    E a s i l y c o m p i l e a s k e t c h w i t h o u t a G U I

    C o m m a n d l i n e A r d u i n o p r o g r a m m i n g

    W h e n I s t a r t e d g e t t i n g i n t o p r o g r a m m i n g t h e

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

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

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

    I n o ( i n o t o o l . o r g ) i s a t o o l w r i t t e n i n P y t h o n t h a t

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

    w i t h o u t u s i n g a G U I ( g r a p h i c a l u s e r i n t e r f a c e ) o r

    m e s s i n g a r o u n d w i t h m a k e f i l e s . I t r u n s o n L i n u x

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

    s o o n ) w h i c h m e a n s t h a t w e c a n r u n i t o n t h e

    R a s p b e r r y P i .

    I n s t a l l i n g I n o

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

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

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

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

    a p t r e p o s i t o r i e s a n d t o i n s t a l l a n y u p d a t e s :

    sudo apt-get -y update

    sudo apt-get -y upgrade

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

    d e p e n d e n c i e s . R u n t h e f o l l o w i n g c o m m a n d :

    sudo apt-get install arduino picocom

    python-setuptools

    A f t e r t h e d e p e n d e n c i e s h a v e b e e n i n s t a l l e d , u s e

    P y t h o n s e a s y _ i n s t a l l c o m m a n d t o i n s t a l l p i p :

    sudo easy_install-2.7 pip

    N o w w e c a n u s e p i p t o i n s t a l l I n o a n d a n y P y t h o n

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

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

    sudo pip install ino

    I n o w i l l n o w s e a r c h t h e P y t h o n P a c k a g e I n d e x

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

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

    T o c h e c k t h a t I n o h a s b e e n i n s t a l l e d w e n e e d t o

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

    l i b r a r i e s a n d h a r d w a r e f i l e s :

    ino list-models

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

    s u c c e s s f u l l y i n s t a l l e d i t . I f y o u c a n t s e e a n y

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

    i n s t a l l e d a n d u p - t o - d a t e .

    U s i n g I n o

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

    a l o o k a t t h e q u i c k s t a r t g u i d e o n l i n e a t

  • 8/13/2019 The MagPi Issue 15 En

    9/409

    O t h e r e x p a n s i o n b o a r d s

    h t t p : / / i n o t o o l . o r g / q u i c k s t a r t o r r u n i n o - - h e l p .

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

    m k d i r :

    mkdir Blink

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

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

    c r e a t e a s k e t c h :

    cd Blink

    ino init

    T h i s c r e a t e s t w o d i r e c t o r i e s , s r c a n d l i b . Y o u

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

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

    W h e n I n o i n i t i a l i z e s t h e s r c d i r e c t o r y , i t

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

    O n c e e v e r y t h i n g h a s b e e n i n i t i a l i s e d , y o u c a n

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

    t o w r i t e y o u r s k e t c h . Y o u c a n u s e n a n o , v i m , o r

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

    i n t h e l i b f o l d e r , n o t t h e s r c f o l d e r .

    O n c e y o u h a v e c r e a t e d a s k e t c h , w e n e e d t o

    b u i l d i t . I f y o u u s e a b o a r d o t h e r t h a n t h e U n o , b e

    s u r e t o c h a n g e t h e b o a r d m o d e l . T h e I n o

    q u i c k s t a r t p a g e s h o w s y o u h o w t o d o t h i s .

    W e n e e d t o c h a n g e d i r e c t o r y t o t h e B l i n k f o l d e r ,

    a n d t h e n b u i l d i t :

    cd ..

    ino build

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

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

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

    c o m m a n d :

    ino upload

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

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

    O n c e u p l o a d e d , t h a t s i t !

    T o v i e w t h e s e r i a l o u t p u t o f y o u r A r d u i n o , j u s t

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

    ino serial

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

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

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

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

    h t t p : / / p l a y g r o u n d . a r d u i n o . c c / M a i n / H o m e P a g e

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

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

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

    b o a r d s , t a k e a t l o o k a t

    h t t p : / / e l i n u x . o r g / R P i _ E x p a n s i o n _ B o a r d s

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

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

    s e v e r a l d i f f e r e n t L E D b o a r d s , b u z z e r s , a n d m o t o r

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

    o t h e r p o r t s , s u c h a s R S 2 3 2 o r s i n g l e w i r e

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

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

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

    s i g n a l s t o b e r e a d o r w r i t t e n .

    T h i s m o n t h a F P G A ( f i e l d p r o g r a m m a b l e g a t e

    a r r a y ) d e v e l o p m e n t b o a r d a r r i v e d i n t h e p o s t

    f r o m V a l e n t F x . T h e b o a r d n e e d s s o m e

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

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

    w o u l d b e w i l l i n g t o h e l p .

    http://inotool.org/quickstart
  • 8/13/2019 The MagPi Issue 15 En

    10/400

    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

    A D V A N C E D O P E R A T I O N

    G o p r o 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 2

    W e l c o m e b a c k t o p a r t t w o o f T h e M a g P i m i n i

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

    c a m e r a m o d u l e .

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

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

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

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

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

    S i z i n g o p t i o n s

    L e t s b e g i n b y l o o k i n g a t s i z i n g o p t i o n s . Y o u c a n

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

    - w ( - - w i d t h ) a n d - h ( - - h e i g h t ) o p t i o n s . T h e s e d o

    e x a c t l y w h a t y o u m i g h t e x p e c t - t h e y c h a n g e t h e

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

    v i d e o ) . B u t y o u c a n a l s o c h a n g e t h e q u a l i t y o f t h e

    J P G s t i l l s u s i n g - q ( - - q u a l i t y ) a n d t h e q u a l i t y o f

    t h e H 2 6 4 e n c o d i n g u s i n g - b ( - - b i t r a t e ) . B o t h

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

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

    o r d e r t o c o m p r e s s t h e f i l e s . T h e m o r e d e t a i l t h a t

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

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

    S o m e e x a m p l e s . .

    raspistill -w 640 -h 480 -q 10 -o smallpic.jpg

    raspivid -w 640 -h 480 -b 500000 -o \

    smallvid.h264

    T h e b i t r a t e o p t i o n i s m e a s u r e d i n b i t s p e r

    s e c o n d . S o i n t h e e x a m p l e a b o v e , 5 0 0 0 0 0 i s

    0 . 5 M b i t s / s . T h e i s q u i t e a l o w b i t r a t e f o r 1 0 8 0 p

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

    r e q u e s t e d h e r e . F u l l H D r e c o r d i n g ( t h e d e f a u l t ) i s

    s u p p o r t e d , w h i c h i s 1 9 2 0 x 1 0 8 0 a t 3 0 f r a m e s p e r

    s e c o n d ( a b b r e v i a t e d t o 1 0 8 0 p 3 0 ) , t h i s r e q u i r e s a

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

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

    b i t r a t e s j u s t t o s e e h o w i t a f f e c t s t h e i m a g e

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

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

    u n w a t c h a b l e !

  • 8/13/2019 The MagPi Issue 15 En

    11/401 1

    raspivid -t 10000 -b 1000000 -o \

    highcompression.h264

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

    i n 4 d i f f e r e n t f i l e f o r m a t s , a l t h o u g h J P G i s b y f a r

    t h e f a s t e s t ( a n d m o s t c o m m o n ) . T h e o t h e r

    f o r m a t s s u p p o r t e d a r e P N G , G I F a n d B M P .

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

    a w a y i n o r d e r t o d e c r e a s e f i l e s i z e ) , a n d t h e f i l e

    s i z e s a r e t h e r e f o r m u c h l a r g e r t h a n J P G . T h e y

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

    h a r d w a r e a c c e l e r a t i o n i n t h e G P U f o r t h e m . Y o u

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

    - e n c o d i n g ) o p t i o n s .

    raspistill -t 1000 -e png -o image.png

    T i m e l a p s e m o d e

    T h e r a s p i s t i l l a p p h a s a v e r y u s e f u l f e a t u r e c a l l e d

    t i m e l a p s e m o d e . I n s t e a d o f j u s t t a k i n g o n e

    p i c t u r e , i t t a k e s s e q u e n c e o f p i c t u r e s a t a

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

    ( - t ) i s r e a c h e d . S o , t o t a k e a p i c t u r e e v e r y 5

    s e c o n d s o v e r a p e r i o d o f 5 0 s e c o n d s , u s e t h e

    f o l l o w i n g .

    raspistill -t 50000 -tl 5000 -o image%d.jpg

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

    w h a t s t h a t o d d f i l e n a m e s p e c i f i c a t i o n ? W e l l , i f

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

    raspistill -t 50000 -tl 5000 -o image.jpg

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

    s a m e f i l e n a m e , i m a g e . j p g . S o y o u e n d u p w i t h

    j u s t o n e p i c t u r e ! B y a d d i n g a % d i n y o u r f i l e n a m e

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

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

    f i r s t e x a m p l e a b o v e w o u l d s a v e a s e t o f f i l e a s

    i m a g e 1 . j p g , i m a g e 2 . j p g . . . i m a g e 1 0 . j p g . I n f a c t ,

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

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

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

    raspistill -t 50000 -tl 5000 -o image%04d.jpg

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

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

    t h o s e 4 d i g i t s , r e s u l t i n g i n i m a g e 0 0 0 1 . j p g ,

    i m a g e 0 0 0 2 . j p g . . . i m a g e 0 0 1 0 . j p g b e i n g s a v e d .

    S e e t h e p r i n t f f o r m a t s p e c i f i e r d o c u m e n t a t i o n

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

    i n f o r m a t i o n .

    C h a n g i n g i m a g e p a r a m e t e r s

    J u s t l i k e a c o m p a c t c a m e r a , t h e r e a r e l o t s o f

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

    c h a n g e t h e i r e f f e c t , o r t h e w a y t h e y w e r e t a k e n .

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

    s t i l l s o r v i d e o m o d e . A l s o n o t e t h a t s o m e o p t i o n s

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

    y o u m a y s e e n o e f f e c t w h e n u s i n g t h e m . T h i s i s

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

    f u l l C a m e r a A P I ( a p p l i c a t i o n p r o g r a m m i n g

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

    a c t u a l l y i m p l e m e n t e d u n d e r t h a t A P I . I m o n l y

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

    f r e e t o t r y a l l t h e o p t i o n s t o s e e t h e e f f e c t t h e y

    p r o v i d e , a n d w h e t h e r t h e y a c t u a l l y d o a n y t h i n g !

    F i r s t l y , w e h a v e t h e b a s i c i m a g e o p e r a t i o n s .

    T h e s e a r e s h a r p n e s s ( - s h [ - 1 0 0 t o 1 0 0 ] ) ,

    c o n t r a s t ( - c o [ - 1 0 0 t o 1 0 0 ] ) , b r i g h t n e s s ( - b r [ 0 t o

    1 0 0 ] ) a n d s a t u r a t i o n ( - s a [ - 1 0 0 t o 1 0 0 ] ) . A l l

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

    o n c a m e r a s o r e v e n L C D t e l e v i s i o n s . T r y t h e m

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

    h a v e - h e r e s a s t a r t p o i n t .

    http://youtu.be/GImeVqHQzsE
  • 8/13/2019 The MagPi Issue 15 En

    12/402

    raspistill -t 5000 -sh 100 -co 50 -br 25 \

    -sa 50 -o image.jpg

    I m a g e e f f e c t s ( - i f x ) a r e q u i t e f u n . T h e s e a p p l y

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

    e m b o s s . O n l y o n e e f f e c t c a n b e a p p l i e d a t a

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

    negative, solarise, sketch, denoise, emboss,

    oilpaint, hatch, gpen, pastel, watercolour,

    film, blur saturation, colourswap, washedout,

    posterise, colourpoint, colourbalance and

    cartoon.

    raspistill -t 5000 -ifx negative -o image.jpg

    T h e c o l o u r e f f e c t s o p t i o n ( - c o l f x ) i s i n t e r e s t i n g .

    I n t e r n a l l y , t h e i m a g e i s r e p r e s e n t e d u s i n g a Y U V

    c o l o u r s p a c e . Y U V r e p r e s e n t s c o l o u r u s i n g t h e

    l u m i n a n c e , Y , a n d b l u e l u m i n a n c e a n d

    r e d l u m i n a n c e d i f f e r e n c e s , U V . T h e c o l o u r

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

    a r e g o i n g t o u s e f o r U a n d V . T h i s g i v e s u s a

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

    i m a g e s , w e j u s t n e e d t o s e t U V e q u a l l y t o t h e

    m i d d l e o f t h e r a n g e , w h i c h i s 1 2 8 . S o

    raspistill -t 5000 --colfx 128:128 \-o image.jpg

    O t h e r v a l u e s f o r U a n d V g i v e v a r y i n g b l u e a n d

    r e d d i f f e r e n c e s f r o m t h e m i d d l e . T r y s o m e

    n u m b e r s !

    T h e f i n a l i m a g e o p t i o n s I m g o i n g t o t a l k a b o u t

    a r e m o r e a b o u t h o w t h e p i c t u r e i s t a k e n r a t h e r

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

    T h e s e a r e m e t e r i n g m o d e ( - m m ) a n d a w b m o d e

    ( - a w b ) .

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

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

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

    t a r g e t b r i g h t n e s s t h a t i s r e q u i r e d , a n d

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

    t h a t t a r g e t . B u t t o d o t h a t i t n e e d t o k n o w w h a t

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

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

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

    b r i g h t n e s s i s w h a t i s d e f i n e d b y t h e m e t e r i n g

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

    a v e r a g e a n d s p o t . S p o t t a k e s t h e v e r y c e n t r e o f

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

    i m a g e . S o i f y o u h a v e a s c e n e w i t h a v e r y b r i g h t

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

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

    a v e r a g e i n t h a t c a s e .

    raspistill -t 5000 -mm average -o image.jpg

    A W B s t a n d s f o r a u t o m a t i c w h i t e b a l a n c e . T h i s i s

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

    i t s t h e a d j u s t m e n t m a d e t o t h e i m a g e t o

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

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

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

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

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

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

    s e l e c t i o n i s d o n e a u t o m a t i c a l l y u s e s B a y e s i a n

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

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

    s p e c i f y t h e A W B a p p r o a c h b e i n g u s e d

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

    o p t i o n s a r e :

    auto, sun, cloud, shade, tungsten,

    fluorescent, incandescent, flash, horizon.

    S o t o s e t u p t h e A W B f o r a r o o m l i t b y t u n g s t e n

    f i l a m e n t b u l b s :

    raspistill -t 5000 -awb tungsten -o image.jpg

  • 8/13/2019 The MagPi Issue 15 En

    13/40

    A n y t h i n g e l s e ?

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

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

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

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

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

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

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

    c h a n g i n g a n e f f e c t e v e r y 5 0 0 m s ( 1 / 2 s e c o n d )

    raspistill -d 500 -t 60000

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

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

    p i p e d t o o t h e r a p p l i c a t i o n s ( f o r e x a m p l e , n e t w o r k

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

    f i l e n a m e f o r t h e - o o p t i o n , y o u u s e t h e - ( h y p h e n ) .

    T h e f o l l o w i n g e x a m p l e o u t p u t s t h e j p g d a t a t o

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

    i m a g e . j p g . T h e e f f e c t i s t h e s a m e a s s p e c i f y i n g

    - o i m a g e . j p g .

    raspistill -o - > image.jpg

    F i n a l w o r d s

    A s w i t h e v e r y t h i n g R a s p b e r r y P i , t h e c a m e r a i s

    m e a n t t o b e a l e a r n i n g e x p e r i e n c e . M a n y o p t i o n s

    a r e a v a i l a b l e f o r y o u t o t r y o u t , s o m e m i g h t b e

    u s e f u l , s o m e n o t s o u s e f u l . T r y t h e m o u t ,

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

    o p t i o n s !

    T h 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 , a n d w a s w r i t t e n i n a v e r y

    s t r a i g h t f o r w a r d f a s h i o n ( i n C ) w i t h l o t s o f

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

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

    c h a n g e s t u f f , s e e w h a t i t d o e s . I f y o u a d d a g r e a t

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

    R a s p b e r r y P i f o r u m s - y o u n e v e r k n o w , i t m i g h t

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

  • 8/13/2019 The MagPi Issue 15 En

    14/4014

    DIFFICULTY : ADVANCED Lloyd Seaton

    G u e s t W r i t e r

    MEGA POWERA d d i n g a n A T m e g a M C U

    This constructional project is for hobbyistswho are confident with a soldering iron, wholike to have options and are prepared topurchase their own components

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

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

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

    w o r l d " d i g i t a l a n d a n a l o g s i g n a l s , t h e A r d u i n o

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

    a d v a n t a g e s . T h i s p r o j e c t i n v o l v e s t h e

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

    ( M e g a P o w e r ) t h a t c a n b e u s e d t o e x p a n d t h e

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

    c o m p a n i o n m i c r o c o n t r o l l e r , a n A T m e g a 3 2 8

    M C U . M e g a P o w e r c a n a l s o i n c l u d e a b u c k D C -

    D C c o n v e r t e r c i r c u i t t o d e r i v e a 5 V p o w e r s u p p l y

    f r o m a h i g h e r D C v o l t a g e f o r p o w e r i n g o f b o t h

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

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

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

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

    c o n s t r u c t o r , t h e c h o i c e s a r e y o u r s t o m a k e !

    T h e D C - D C b u c k c o n v e r t e r c o m p o n e n t s h a v e

    b e e n o m i t t e d f r o m t h e M e g a P o w e r u n i t

    ( o p p o s i t e ) a s a n e c o n o m y m e a s u r e b u t t h e

    A T m e g a M C U p r o v i d e s p l e n t y o f d i g i t a l I / O a n d

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

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

    e t c . U n l i k e G e r t b o a r d ' s M C U , t h e M e g a P o w e r

    M C U o p e r a t e s a t 5 V f o r e a s e o f i n t e r f a c i n g w i t h

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

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

    c o n n e c t i o n s o f S P I b u s a n d U A R T t o R a s p b e r r y

    P i s o t h a t n o j u m p e r s a r e r e q u i r e d f o r

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

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

    I n s t e a d o f m o u n t i n g M e g a P o w e r o n t h e

    R a s p b e r r y P i ' s P 1 c o n n e c t o r v i a t h e g r e y 3 M

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

    r i b b o n c a b l e , i n w h i c h c a s e h e a d e r p i n s c a n b e

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

    3 M s o c k e t u n d e r n e a t h .

    T h e M e g a P o w e r u n i t p i c t u r e d a b o v e i s c o m p l e t e

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

    h e a t s i n k ( f a r l e f t ) i s n e e d e d i f M e g a P o w e r i s

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

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

    P i M o d e l A o r f o r s t a n d a l o n e o p e r a t i o n . N e a r t h e

    r i g h t e d g e o f t h e P C B t h e r e i s p r o v i s i o n f o r 2 p u l l -

    u p r e s i s t o r s ( R 6 & R 7 ) t h a t m a y b e r e q u i r e d b y

  • 8/13/2019 The MagPi Issue 15 En

    15/4015

    t h e I 2 C b u s i n s t a n d a l o n e o p e r a t i o n b u t s h o u l d

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

    i n t e n d e d . T h e r e a r e 4 L E D s , 2 o f w h i c h i n d i c a t e

    a c t i v i t y o f t h e U A R T a n d S P I b u s r e s p e c t i v e l y .

    T h e o t h e r 2 L E D s a r e u n c o m m i t t e d a n d a r e

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

    A r d u i n o s k e t c h .

    Construction Of MegaPower

    B e f o r e c o m m e n c i n g c o n s t r u c t i o n o f M e g a P o w e r

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

    y o u r s e l f w i t h t h e d e s i g n . B y d o i n g s o y o u w i l l

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

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

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

    n e e d s . A c o m p r e h e n s i v e d e s i g n d e s c r i p t i o n

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

    p i c o c k t a i l s . b l o g s p o t . c o m ( I s s u e 1 5 p a g e ) . T h i s

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

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

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

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

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

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

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

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

    W h e n i n d o u b t , c h e c k i t o u t !

    Programming the ATmega MCU

    T h e M C U o p e r a t e s f r o m i t s i n t e r n a l c l o c k a t

    8 M H z o r 1 M H z s o i t i s n o t i m m e d i a t e l y

    c o m p a t i b l e w i t h t h e A r d u i n o I D E o n R a s p b i a n .

    H o w e v e r , c o m p a t i b i l i t y i s e a s i l y a c h i e v e d .

    F i r s t l y , i t i s n e c e s s a r y t o i n s t a l l G o r d o n

    H e n d e r s o n ' s A r d u i n o I D E e x t e n s i o n s f o r

    G e r t b o a r d ( p r o j e c t s . d r o g o n . n e t / r a s p b e r r y -

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

    s u p p o r t f o r p r o g r a m m i n g a n A T m e g a v i a t h e S P I

    b u s a n d R a s p b e r r y P i ' s G P I O p o r t s .

    S e c o n d l y , y o u n e e d t o i n s t a l l t h e p i c o c k t a i l s

    e x t e n s i o n s f o r t h e A r d u i n o I D E b y f o l l o w i n g t h e

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

    t h e b l o g a t p i c o c k t a i l s . b l o g s p o t . c o m .

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

    a b o v e m e n t i o n e d I D E e x t e n s i o n s , y o u s h o u l d

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

    c o n s e q u e n c e s m a y b e u g l y . H a v i n g i n s t a l l e d

    t h e I D E e x t e n s i o n s y o u c a n a c t i v a t e t h e A r d u i n o

    I D E a n d s e l e c t : T o o l s - > P r o g r a m m e r - >

    R a s p b e r r i P i G P I O . T h e n s e l e c t : T o o l s - > B o a r d

    - > M e g a P o w e r w / A T m e g a 3 2 8 P ( 8 M H z i n t e r n a l

    c l o c k ) . A c t i v a t e : T o o l s - > B u r n B o o t l o a d e r t o

    i n i t i a l i s e t h e A T m e g a f u s e s .

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

    w i t h o u t e r r o r , i t i s v e r y l i k e l y t h a t y o u ' l l b e a b l e t o

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

    p r o g r a m m i n g t h e B l i n k s k e t c h f r o m F i l e - >

    E x a m p l e s - > 0 1 . B a s i c s - > B l i n k b u t y o u ' l l n e e d t o

    e d i t t h e s k e t c h t o u s e P i n 1 2 i n s t e a d o f P i n 1 3 f o r

    c o n t r o l l i n g t h e L E D . T h e n u s e : F i l e - > U p l o a d

    U s i n g P r o g r a m m e r t o s e n d t h e m o d i f i e d B l i n k

    s k e t c h t o t h e M C U . A f t e r a s u r p r i s i n g l y l o n g

    d e l a y . . . t h e L E D D 4 s h o u l d b e g i n b l i n k i n g . Y o u

    c a n f i n d f u r t h e r i n s t r u c t i o n s o n t h e ( I s s u e 1 5

    p a g e ) o f p i c o c k t a i l s . b l o g s p o t . c o m f o r

    p r o g r a m m i n g t h e S t a n d a r d F i r m a t a s k e t c h a n d

    r u n n i n g t h e p y f i r m a t a M a n a g e r . p y t e s t p r o g r a m .

    Availability of PCBs

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

    h e l p c o n s t r u c t o r s t o a c q u i r e s u p e r i o r P C B s a t

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

    t h e i r i n t e r e s t i n a p p l y i n g t h e u n i q u e c a p a b i l i t i e s

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

    a n o t h e r o p t i o n w h e n s e e k i n g P C B s f o r p r o j e c t s

    s u c h a s M e g a P o w e r . T h e n e w W W W s t o r e , p i -

    s u p p l y . c o m i s p l a n n i n g t o s u p p l y P C B s f o r

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

    M e g a P o w e r ) a n d o t h e r p r o j e c t s i n t h e n e a r

    f u t u r e . P C B s f o r M e g a P o w e r ( p l u s M e g a M i n i

    a n d M e g a W i r e p r o j e c t s ) w i l l h o p e f u l l y b e

    a v a i l a b l e b y t h e t i m e y o u r e a d t h i s .

  • 8/13/2019 The MagPi Issue 15 En

    16/406

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

    J a c o b M a r s h

    M o d M y P i

    T H E R A S C L O C K

    G e t y o u r s t o d a y f r o m M o d M y P i

    R a s p b e r r y P i t i m e k e e p i n g w i t h

    a r e a l t i m e c l o c k

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

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

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

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

    k e e p t i m e w h e n t h e p o w e r i s o f f b y u s i n g a p r e -

    i n s t a l l e d , b a t t e r y p o w e r e d ' R e a l T i m e C l o c k '

    ( R T C ) . A n R T C m o d u l e i s n o t i n c l u d e d w i t h t h e

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

    a n d t i m e a u t o m a t i c a l l y o v e r t h e i n t e r n e t v i a

    E t h e r n e t o r W i F i . S u b s e q u e n t l y , y o u r P i w i l l

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

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

    r e m o v e d . F o r p r o j e c t s w h i c h h a v e n o i n t e r n e t

    c o n n e c t i o n , y o u m a y w a n t t o a d d a l o w c o s t

    b a t t e r y p o w e r e d R T C t o h e l p y o u r P i k e e p t i m e !

    T h e R a s C l o c k h a s b e e n s p e c i f i c a l l y d e s i g n e d f o r

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

    t h e R a s p b e r r y P i ' s G P I O P o r t s . T h i s a r t i c l e w i l l

    w a l k y o u t h r o u g h i t s i n s t a l l a t i o n !

    S t e p 1 - p l u g i t i n !

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

    y o u r R a s p b e r r y P i i s s w i t c h e d o f f a n d t h e R T C

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

    t h e c o i n b a t t e r y i n t o t h e R T C b y m a t c h i n g t h e

    p o s i t i v e o n t h e b a t t e r y w i t h t h e p o s i t i v e o n t h e

    m o d u l e a n d t h e n p l u g t h e R T C i n t o t h e

    R a s p b e r r y P i ' s G P I O p i n s . I t s i t s o n t h e 6 G P I O

    p i n s a t t h e S D c a r d e n d o f t h e R a s p b e r r y P i .

    S t e p 2 - s e t - u p

    T h i s R T C m o d u l e i s d e s i g n e d t o b e u s e d i n

    R a s p b i a n . S o t h e f i r s t s t e p i s t o m a k e s u r e y o u

    h a v e t h e l a t e s t R a s p b i a n O p e r a t i n g S y s t e m ( O S )

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

    ( h t t p : / / w w w . r a s p b e r r y p i . o r g / d o w n l o a d s ) .

    C u r r e n t l y t h e m o d u l e r e q u i r e s t h e i n s t a l l a t i o n o f a

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

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

    i n s t a l l a t i o n p a c k a g e i s a v a i l a b l e w h i c h m a k e s

    s e t u p n i c e a n d e a s y .

    M a k e s u r e y o u r P i h a s i n t e r n e t a c c e s s a n d g r a b

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

    L X T e r m i n a l w i n d o w :

    wget

    http://afterthoughtsoftware.com/files/linux-

    image-3.6.11-atsw-rtc_1.0_armhf.deb

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

    t h e i n t e r n e t b y p r o v i d i n g a U R L ) .

    sudo dpkg -i linux-image-3.6.11-atsw-

    rtc_1.0_armhf.deb

    ( T h e d p k g c o m m a n d e n a b l e s t h e m a n a g e m e n t

    http://www.raspberrypi.org/downloadshttps://www.modmypi.com/rasclock-raspberry-pi-real-time-clock-module
  • 8/13/2019 The MagPi Issue 15 En

    17/401 7

    o f D e b i a n p a c k a g e s . T h e - i i n s t a l l s t h e p a c k a g e ,

    o r u p g r a d e s i t i f i t i s a l r e a d y i n s t a l l e d ) .

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

    sudo cp /boot/vmlinuz-3.6.11-atsw-rtc+

    /boot/kernel.img

    ( T h e c p c o m m a n d s t a n d s f o r c o p y . H e r e , w e

    n e e d t o c o p y t h e R T C m o d u l e ' s b o o t f i l e t o t h e

    R a s p b e r r y P i b o o t d i r e c t o r y ) .

    T h e n e x t s t e p i n v o l v e s e d i t i n g t h e t e x t i n t h e

    R a s p b e r r y P i b o o t f i l e s . I u s u a l l y u s e n a n o t e x t

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

    i n s t a l l e d a n d e a s y t o m a s t e r . S y s t e m c o m m a n d s

    f o r n a n o a r e e n a b l e d b y h o l d i n g t h e C T R L k e y

    ( d e n o t e d a s ^ i n n a n o ) w h i l s t p r e s s i n g t h e

    r e l e v a n t c o m m a n d e . g . C T R L + X t o e x i t .

    W e n e e d t o c o n f i g u r e R a s p b i a n t o l o a d t h e R T C

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

    t h e / e t c / m o d u l e s c o n f i g u r a t i o n f i l e :

    sudo nano /etc/modules

    ( T h i s w i l l o p e n t h e ' m o d u l e s ' f i l e w i t h i n n a n o t e x t

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

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

    n e x t l i n e i n t h e b o o t f i l e a n d a d d t h e f o l l o w i n g

    t e x t , o n e p e r l i n e . T h e n e x i t n a n o ( C T R L + X ) a n d

    d o n ' t f o r g e t t o s a v e t h o s e c h a n g e s !

    i2c-bcm2708

    rtc-pcf2127a

    T h e f i n a l s t e p i n s e t - u p i s t o r e g i s t e r t h e R T C

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

    s y s t e m c l o c k f r o m t h e R T C . W h e n e d i t i n g f i l e s

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

    o f t h e f i l e d e n o t e d b y # . F o r e x a m p l e , t h e f i l e w e

    a r e j u s t a b o u t t o e d i t r e q u i r e s a n y t e x t t o b e p u t

    b e f o r e t h e e n d o f t h e f i l e , d e n o t e d b y ' e x i t 0 ' .

    O p e n t h e r e q u i r e d f i l e f o r e d i t i n g :

    sudo nano /etc/rc.local

    F o r R e v 1 . R a s p b e r r y P i b o a r d s a d d t h e

    f o l l o w i n g t e x t :

    echo pcf2127a 0x51 > /sys/class/i2c-

    adapter/i2c-0/new_device

    ( sleep 2; hwclock -s ) &

    F o r R e v 2 . R a s p b e r r y P i b o a r d s a d d t h e

    f o l l o w i n g t e x t :

    echo pcf2127a 0x51 > /sys/class/i2c-

    adapter/i2c-1/new_device

    ( sleep 2; hwclock -s ) &

    T h e n r e b o o t :

    sudo reboot

    S t e p 3 - u s i n g t h e R T C

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

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

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

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

    i n t o t h e c l o c k m o d u l e :

    sudo hwclock w

    T o r e a d t h e t i m e f r o m t h e c l o c k m o d u l e :

    sudo hwclock -r

    T o c o p y t h e t i m e f r o m t h e c l o c k m o d u l e t o t h e

    s y s t e m :

    sudo hwclock s

    T h a t ' s i t . . . y o u c a n n o w k e e p t i m e u s i n g y o u r

    R a s p b e r r y P i w i t h n o i n t e r n e t ! T y p e h w c l o c k i n t o

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

    u s e f u l c o m m a n d s !

    T h i s a r t i c l e i s

    s p o n s o r e d b y

    M o d M y P i

    A l l b r e a k o u t b o a r d s a n d a c c e s s o r i e s u s e d i n t h i s

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

    t h e M o d M y P i w e b s h o p a t w w w . m o d m y p i . c o m

    http://www.modmypi.com/http://www.modmypi.com/
  • 8/13/2019 The MagPi Issue 15 En

    18/408

    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 3 : B u i l d i n g a t o o l k i t o f

    p a t t e r n s i n c l u d i n g C y l o n s !

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

    I n P a r t 1 a n d P a r t 2 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 a n d h o w t o p r o g r a m s i m p l e

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

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

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

    S i m p l i f y , s i m p l i f y

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

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

    a n y o n e c a n g r a b a n d a d d t o a p r o j e c t .

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

    t o t h e M C P 2 7 0 1 3 c h i p . I n P a r t 2 w e m a d e a c o l u m n -

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

    def SetColumn (col):bus.write_byte_data(ADDR,PORTB,0x00)

    bus.write_byte_data(ADDR,PORTA,0x80>>col)

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

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

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

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

    def Write (register, value):

    bus.write_byte_data(ADDR, register, value)

    def SetColumn (col):

    Write (PORTB, 0x00)

    Write (PORTA, 0x80>>col)

    W e d o n t n e e d t o d o t h i s , b u t i t m o v e s a l l o f t h e I

    2

    C

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

    s e n d i n g s o m e o f o u r d a t a t o t h e w r o n g I

    2

    C b u s

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

    t o t h e L E D c o l u m n a n d r o w i n p u t s . O n c e w e w r i t e

    t h a t , w e c a n f u r t h e r s i m p l i f y S e t C o l u m n l i k e t h i s :

    def WriteToLED (rowPins, colPins):

    Write (PORTA, colPins)

    Write (PORTB, rowPins)

    def SetColumn (col):

    WriteToLED (0x00, 0x80>>col)

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

    W i t h W r i t e T o L E D w e n o l o n g e r h a v e t o r e m e m b e r

    w h e t h e r c o l u m n s g o o n P O R T A o r P O R T B . T r y i t !

    P a t t e r n s

    W e s t i l l h a v e t o r e m e m b e r t h a t r o w s a r e a c t i v e L O W

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

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

    c o l u m n b i t s e t a n d h a v e t h e t o p l e f t L E D l i g h t u p ? I t s

    e a s y ! W e l l u s e w h a t w e k n o w a n d t h e n n e v e r h a v e

    t o r e m e m b e r i t a g a i n :

    def SetPattern (rows, cols):

    WriteToLED(~rows, ReverseBits(cols))

    T h e t i l d e ' ~ ' n e g a t e s t h e r o w b i t s , m a k i n g t h e m a l l

    a c t i v e L O W . W e n e e d t o w r i t e a r o u t i n e t o r e v e r s e t h e

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

    e x a m p l e , s u p p o s e w e w a n t t o m a k e a s m a l l 2 x 3

  • 8/13/2019 The MagPi Issue 15 En

    19/401 9

    r e c t a n g l e . W e n e e d t o s e t r o w b i t s 1 a n d 2

    ( 0 b 0 0 0 0 0 1 1 0 = 0 x 0 6 ) a n d c o l u m n b i t s 1 , 2 a n d 3 .

    ( 0 b 0 0 0 0 1 1 1 0 = 0 x 0 E ) . T r y c a l l i n g S e t P a t t e r n w i t h

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

    t o s e e w h a t y o u c a n m a k e , i n c l u d i n g S e t P a t t e r n ( 0 , 0 ) .

    O r i e n t a t i o n

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

    u p s i d e - d o w n o r i e n t a t i o n . B y t h a t , I m e a n t h e U S B

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

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

    a r o u n d , t r y i n g t o s e e i f t h e c o r r e c t L E D s w e r e l i t .

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

    t a k e t o f l i p t h e d i s p l a y ?

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

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

    S o m e t h i n g i n t h e t o p - l e f t , w h e n f l i p p e d 1 8 0 d e g r e e s ,

    i s n o w b o t t o m - r i g h t . W e c a n d o t h i s b y r e v e r s i n g t h e

    r o w a n d c o l u m n b i t s :

    def SetPattern180 (rows,cols):

    SetPattern(ReverseBits(rows),\

    ReverseBits(cols))

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

    r i g h t ( 9 0 a n d 2 7 0 d e g r e e s ) b y s w a p p i n g r o w s a n d

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

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

    S e t P a t t e r n f u n c t i o n , w e c a n c o m b i n e b o t h o p e r a t i o n s

    i n a n e w S e t P a t t e r n f u n c t i o n , l i k e t h i s :

    def SetPattern (rows,cols,orientation=0):

    if orientation==0:

    WriteToLED(~rows,ReverseBits(cols))

    elif orientation==90:

    WriteToLED(~cols,rows)

    elif orientation==180:WriteToLED(~ReverseBits(rows),cols)

    elif orientation==270:

    WriteToLED(~ReverseBits(cols),\

    ReverseBits(rows))

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

    R a s p b e r r y P i o r i e n t a t e d a t 0 , 9 0 , 1 8 0 a n d 2 7 0

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

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

    t h e R a s p b e r r y P i h a p p e n s t o b e r i g h t - s i d e u p .

    B a c k t o b a s i c s

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

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

    i n d i v i d u a l L E D s p l u s c o l u m n s a n d r o w s o f L E D s .

    def SetLED (row,col):

    SetPattern(1

  • 8/13/2019 The MagPi Issue 15 En

    20/4020

    DIFFICULTY : INTERMEDIATE Karl Welsh

    G u e s t W r i t e r

    HISTORIC ARCADE GAMESM A M E - M u l t i p l e A r c a d e M a c h i n e E m u l a t o r

    Getting MAME up and running

    When Arcades Ruled

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

    l a t e 1 9 7 0 ' s . H i s t o r i c a l l y , a m u s e m e n t a r c a d e s

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

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

    m a c h i n e s d a t i n g b a c k t o t h e 1 9 5 0 s a n d 6 0 s .

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

    c o m m e r c i a l l y s u c c e s s f u l d i s c r e t e l o g i c o r

    d i g i t a l v i d e o g a m e , P o n g ( A t a r i I n c : 1 9 7 2 ) , a n d

    t h e n w i t h s e c o n d g e n e r a t i o n C P U p o w e r e d

    m a c h i n e s : S p a c e I n v a d e r s ( T a i t o / M i d w a y :

    1 9 7 8 ) , A s t e r o i d s ( A t a r i I n c . : 1 9 7 9 ) , G a l a x i a n

    ( N a m c o / M i d w a y : 1 9 7 9 ) , D e f e n d e r ( W i l l i a m s

    E l e c t r o n i c s : 1 9 8 0 ) , P a c - M a n ( N a m c o / M i d w a y :

    1 9 8 0 ) a n d D o n k e y K o n g ( N i n t e n d o : 1 9 8 1 ) .

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

    g a m e s b e g a n a p p e a r i n g e v e r y w h e r e . D e d i c a t e d

    a r c a d e s i n t o w n s a n d c i t i e s , g a m e c a b i n e t s i n

    p e t r o l s t a t i o n s , s u p e r m a r k e t s , r e s t a u r a n t s ,

    p u b s / b a r s . I u s e d t o f r e q u e n t a c h i p s h o p j u s t

    b e c a u s e i t h a d C e n t i p e d e ( A t a r i I n c : 1 9 8 0 ) .

    A t i t s p e a k i n 1 9 8 1 , a r c a d e g a m e s g e n e r a t e d

    a n n u a l r e v e n u e s o f o v e r $ 5 b i l l i o n i n t h e U S A

    ( $ 1 2 . 7 9 b i l l i o n i n 2 0 1 3 d o l l a r s ) . I n 1 9 8 3 , t h e U S A

    e n d u r e d T h e V i d e o G a m e C r a s h . F i n a n c i a l

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

    g a m e s . T h e G o l d e n A g e o f V i d e o G a m e s w a s

    o v e r .

    Retro gaming, emulation, and MAME

    P e t e r D e V r i e s , a n A m e r i c a n e d i t o r , n o v e l i s t , a n d

    s a t i r i s t w r o t e N o s t a l g i a i s n ' t w h a t i t u s e d t o b e ,

    b u t I d i s a g r e e . O l d S c h o o l o r R e t r o G a m i n g

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

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

    n a t u r e o f t h e h a r d w a r e . M a n y R e t r o G a m e s a r e

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

    A t a r i I n c . c o - f o u n d e r N o l a n B u s h n e l l s q u o t e t h a t

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

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

    A g e o f V i d e o G a m e s .

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

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

    s y s t e m ( t h e g u e s t ) i n a n o t h e r c o m p u t e r s y s t e m

    ( t h e h o s t ) , d i f f e r e n t f r o m t h e f i r s t o n e . T h e

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

    b e h a v i o r o f t h e r e a l s y s t e m ( t h e g u e s t ) . W h e n

    r u n n i n g a n e m u l a t o r s u c h a s M A M E ( M u l t i p l e

    A r c a d e M a c h i n e E m u l a t o r ) , i t m a y s e e m o d d t h a t

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

    D e s p i t e t h e i n c r e a s e i n p r o c e s s i n g p o w e r , 3 2 B i t

    A R M v s 8 B i t Z 8 0 / 6 5 0 2 o r 1 6 B i t 6 8 0 0 0 ,

    e m u l a t i o n i s V E R Y p r o c e s s o r i n t e n s i v e . A h o s t

  • 8/13/2019 The MagPi Issue 15 En

    21/40

  • 8/13/2019 The MagPi Issue 15 En

    22/4022

    A d v M A M E w i t h t h e l e a s t a d d i t i o n a l e f f o r t . ( I t i s

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

    c o m p i l e r i f s e v e r a l o f t h e A d v M A M E s o u r c e f i l e s

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

    e x p o r t C C = g c c - 4 . 7

    e x p o r t G C C = g + + - 4 . 7

    T h e n u n p a c k t h e A d v M A M E s o u r c e c o d e ,

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

    t a r x v f z a d v a n c e m a m e - 0 . 1 0 6 . 0 . t a r . g z

    c d a d v a n c e m a m e - 0 . 1 0 6 . 0

    . / c o n f i g u r e

    m a k e

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

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

    W h e n t h e c o m p i l a t i o n h a s f i n i s h e d t y p e

    s u d o m a k e i n s t a l l

    T h i s i s o p t i o n a l , b u t i s u s e f u l a s i t n e g a t e s t h e

    n e e d t o c h a n g e d i r e c t o r y o r s e t t h e P A T H

    m a n u a l l y .

    Configuring AdvMAME

    A d v M A M E s h o u l d b e r u n o n c e t o s e t u p a l l t h e

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

    a d v m a m e

    I t w i l l g i v e y o u a m e s s a g e t e l l i n g y o u t h a t i t h a s

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

    s t a r t x

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

    . a d v a n c e i n y o u r h o m e d i r e c t o r y ( / h o m e / p i b y

    d e f a u l t ) . I f y o u c a n n o t s e e i t , r i g h t - c l i c k y o u r

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

    N o w d o w n l o a d s o m e R O M S . A s a n e x a m p l e ,

    t h e S t a r F i r e R O M c a n b e d o w n l o a d e d f r o m

    h t t p : / / m a m e d e v . o r g / r o m s / s t a r f i r e / s t a r f i r e . z i p

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

    m v s t a r f i r e . z i p ~ / . a d v a n c e / r o m /

    t o m o v e i t i n t o p l a c e . I f t h e s e l e c t e d R O M h a s

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

    T h e r e i s n o n e e d t o u n c o m p r e s s t h e m !

    N e x t , o p e n

    . a d v a n c e / a d v m a m e . r c

    a n d a d d e i t h e r

    d e v i c e _ v i d e o _ c l o c k 5 - 5 0 / 1 5 . 6 2 / 5 0 ;

    5 - 5 0 / 1 5 . 7 3 / 6 0

    ( o n o n e l i n e ) f o r H D M I o u t p u t o r

    d e v i c e _ v i d e o _ c l o c k 5 - 5 0 / 1 5 . 7 3 / 6 0

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

    d i s p l a y _ r e s i z e m i x e d

    d i s p l a y _ a r t w o r k _ b a c k d r o p y e s

    d i s p l a y _ a r t w o r k _ o v e r l a y y e s

    t o

    d i s p l a y _ r e s i z e f r a c t i o n a l

    d i s p l a y _ a r t w o r k _ b a c k d r o p n o

    d i s p l a y _ a r t w o r k _ o v e r l a y n o

    T h e n s a v e a n d c l o s e a d v m a m e . r c . M A M E c a n

    b e r u n f r o m X , b u t u s i n g t h e c o n s o l e w i l l

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

    p r o v i d e a f u l l s c r e e n d i s p l a y . Q u i t X .

    Running MAME

    N o w t h a t M A M E h a s b e e n f u l l y c o n f i g u r e d , t y p e

    a d v m a m e N a m e _ o f _ R O M

    w h e r e N a m e _ o f _ R O M i s t h e n a m e o f t h e R O M

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

    a d v m a m e s t a r f i r e

    T o p l a y o t h e r g a m e s , d o w n l o a d t h e m a n d p u t t h e

  • 8/13/2019 The MagPi Issue 15 En

    23/4023

    R O M s i n t o t h e . a d v a n c e d / r o m / d i r e c t o r y .

    Controls

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

    j u m p b u t t o n s a r e g e n e r a l l y Left-Ctrl

    , Space

    a n d

    Left-Alt r e s p e c t i v e l y . J o y s t i c k s a n d g a m e p a d s

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

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

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

    b e s a v e d f o r g e n e r a l A L L G a m e s o r i n d i v i d u a l

    g a m e s T h i s G a m e . O t h e r c o n t r o l s a r e :

    5- A d d C o i n s

    1- 1 P l a y e r

    2- 2 P l a y e r s

    TAB- O p t i o n s M e n u ( u s e C u r s o r K e y s a n d

    E n t e r )

    ESCape- E x i t

    Other configuration options

    M A M E s e t t i n g s c a n b e i n f i n i t e l y c u s t o m i s e d . T h e

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

    f o r s e v e r a l g a m e s , b u t t h e r e a r e a f e w

    e x c e p t i o n s :

    1 . T h e d e f a u l t ' d i s p l a y _ c o l o r ' i s a u t o . V e c t o r

    g a m e s - A s t e r o i d s , S t a r W a r s , e t c . w i l l s u f f e r

    f r o m a n i n c o r r e c t a p p l i c a t i o n e r r o r , s o D O N T

    c h a n g e a d v m a m e . r c ! I n t h e O p t i o n s M e n u ( T A B )

    n a v i g a t e t o V i d e o , C o l o r a n d c h a n g e a u t o t o

    b g r 1 6 t h e n S a v e f o r t h i s G a m e .

    2 . T h e d e f a u l t ' d i s p l a y _ m o d e ' i s a u t o a n d

    ' d i s p l a y _ m a g n i f y ' i s 1 . C e r t a i n g a m e s s u f f e r

    f r o m a n i n c o r r e c t a p p l i c a t i o n e r r o r i n A s p e c t

    R a t i o ( e . g . B u r g e r T i m e ( D a t a E a s t : 1 9 8 2 ) , I -

    R o b o t ( A t a r i I n c : 1 9 8 3 ) a n d T r a c k & F i e l d

    ( K o n a m i : 1 9 8 3 ) ) . A g a i n , D O N ' T c h a n g e

    a d v m a m e . r c ! I n t h e O p t i o n s M e n u ( T A B )

    n a v i g a t e t o V i d e o , m a g n i f y a n d c h a n g e 1 t o 2

    t h e n S a v e f o r t h i s G a m e

    3 . C o n s i d e r c h a n g i n g ' d i s p l a y _ r e s i z e e f f e c t ' f r o m

    a u t o t o n o n e . P e r s o n a l l y , I m n o t a f a n o f a n y o f

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

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

    d e s c r i b e d a b o v e . H o w e v e r , t h e y c a n b e s c r o l l e d

    t h r o u g h i n t h e v i d e o o p t i o n s m e n u . E x p e r i m e n t ,

    a n d s e e i f y o u l i k e a n y o f t h e m !

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

    a r c a d e s , d i d t h e S A M E g a m e s e e m h a r d e r i n

    d i f f e r e n t v e n u e s ? W e l l , i t p r o b a b l y W A S ! I n s i d e

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

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

    T h e s e a r e e m u l a t e d i n M A M E a n d c a n b e

    c o n f i g u r e d - o p t i o n s ( T A B ) , D i p S w i t c h e s .

    Don't Like the Command Line?

    T h e A d v a n c e S u i t e o f s o f t w a r e a l s o i n c l u d e s a

    f u l l y i n t e g r a t e d f r o n t e n d f o r A d v M A M E ,

    A d v M E N U ,

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

    s / a d v a n c e m e n u /

    A f r o n t e n d i s a G . U . I ( G r a p h i c a l U s e r I n t e r f a c e ) ,

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

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

    f r o n t e n d c a n a l s o b e h e l p f u l w h e n y o u r R O M

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

    t o r e m e m b e r a l l t h e M A M E c o d e s ( o r w h a t

    R O M S a r e i n t h e f o l d e r ! ) . T h i s c a n b e i n s t a l l e d

    u s i n g t h e e x a c t s a m e m e t h o d a s M A M E i t s e l f .

    T h e n j u s t r u n t h e e x e c u t a b l e a d v m e n u .

    Older versions, better performance

    O l d e r v e r s i o n s o f A d v M A M E c a n o f t e n g i v e

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

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

    s u g g e s t d o w n l o a d i n g 0 . 9 4 . 0 , a s i t r e q u i r e s o n l y a

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

    / a d v a n c e / l i n u x / v f b . c . C h a n g e ' M A P _ S H A R E D !

    M A P _ F I X E D ' t o ' M A P _ S H A R E D , ' s a v e a n d

    c l o s e a n d c o m p i l e a s a b o v e .

    I n 1 9 9 9 , B i l l y M i t c h e l l a c h i e v e d t h e f i r s t

    p e r f e c t P a c M a n s c o r e o f 3 , 3 3 3 , 3 6 0 b y e a t i n g

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

    e n e m y !

    S t e v e W i e b e b e a t B i l l y ' s 1 9 8 2 D o n k e y K o n g

    r e c o r d . M a n y o t h e r s h a v e t r i e d t o g e t h i g h e r .

    H a n k S C h i e n i s c u r r e n l y t h e c h a m p i o n w i t h .

    1 , 1 3 8 , 6 0 0 p o i n t s .

  • 8/13/2019 The MagPi Issue 15 En

    24/404

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

    J o h n S h o v i c

    G u e s t W r i t e r

    X M L f o r t h e R a s p b e r r y P i : P a r t 1

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

    T h i s s e r i e s o f a r t i c l e s w i l l d i s c u s s t h e u s e o f X M L o n

    a p p l i c a t i o n s f o r t h e R a s p b e r r y P i . P a r t O n e c o v e r s

    w h a t i s X M L a n d t h e f o r m a t o f t h e d a t a s t r u c t u r e s .

    P a r t T w o w i l l c o v e r b u i l d i n g a n d p a r s i n g X M L i n

    P y t h o n a n d P a r t T h r e e w i l l s h o w h o w X M L i s u s e d a s

    a c o m m u n i c a t i o n s p r o t o c o l f o r a c l i e n t / s e r v e r

    a p p l i c a t i o n , R a s P i C o n n e c t . R a s P i C o n n e c t i s a n

    i P a d / i P h o n e a p p t h a t c o n n e c t s a n d d i s p l a y s

    i n f o r m a t i o n f o r a n y n u m b e r o f R a s p b e r r y P i ' s v i a a

    d e f i n e d X M L i n t e r f a c e .

    W h a t i s X M L ?

    X M L s t a n d s f o r e X t e n s i b l e M a r k u p L a n g u a g e . I t i s a

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

    i n a h a r d w a r e a n d s o f t w a r e i n d e p e n d e n t w a y . I t k i n d

    o f l o o k s l i k e H T M L b u t i t i s u s e d t o t r a n s p o r t

    i n f o r m a t i o n n o t t o d i s p l a y i n f o r m a t i o n . H T M L a n d

    X M L a r e b o t h e x a m p l e s o f a n S G M L ( S t a n d a r d

    G e n e r a l i z e d M a r k u p L a n g u a g e ) .

    W h a t d o y o u u s e X M L f o r ?

    I t i s a l i t t l e d i f f i c u l t t o u n d e r s t a n d , b u t X M L d o e s n o t

    " D o " a n y t h i n g . X M L i s d e s i g n e d t o t r a n s p o r t

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

    i n f o r m a t i o n . Y o u u s e X M L t o s t r u c t u r e d a t a ( u s u a l l y

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

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

    a c r o s s t h e I n t e r n e t . O f t e n u s e r p r e f e r e n c e s o r u s e r

    d a t a i s a l s o s t o r e d i n X M L a n d t h e n w r i t t e n t o f i l e s . I f

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

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

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

    u s e f u l c h a r a c t e r i s t i c o f X M L f i l e s i s t h a t t h e y c a n b e

    e x t e n d e d ( m o r e e l e m e n t s , a t t r i b u t e s , e t c . ) w i t h o u t

    b r e a k i n g a p p l i c a t i o n s . P r o v i d i n g , o f c o u r s e , t h o s e

    a p p l i c a t i o n s a r e w e l l w r i t t e n ( s e e P a r t T w o o f t h i s

    s e r i e s ) .

    H e r e i s a c o m p l e t e X M L m e s s a g e :

    12

    BL-1

    2048

    0

    2.4

    S t r u c t u r e o f a n X M L m e s s a g e

    U n l i k e H T M L , i n X M L y o u d e f i n e y o u r o w n t a g s . A

    w e l l f o r m e d X M L m e s s a g e h a s a " r o o t " a n d t h e n

    " b r a n c h e s " a n d " l e a v e s " .

    T h e f i r s t l i n e i s t h e X M L d e c l a r a t i o n . I t r a r e l y

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

    o f t h e X M L d o c u m e n t .

  • 8/13/2019 The MagPi Issue 15 En

    25/402 5

    N o t e t h a t t h e e n d o f t h e X M L r o o t h a s a c l o s i n g t a g :

    A l l e l e m e n t s i n X M L m u s t h a v e a n o p e n i n g a n d

    c l o s i n g t a g . T h i s , i n a d d i t i o n t o t h e r o o t i s t h e

    d e f i n i t i o n o f a " w e l l - f o r m e d X M L d o c u m e n t " . B y t h e

    w a y , a l l t a g s i n X M L a r e c a s e s e n s i t i v e . A g o o d X M L

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

    D o i n g t h i s a l s o m a k e s t h e s t r u c t u r e o f t h e X M L s t a n d

    o u t w h e n y o u r e a d i t .

    A d d c h i l d e l e m e n t s

    C h i l d e l e m e n t s a r e u s e d t o p r o v i d e a d d i t i o n a l d a t a

    a n d i n f o r m a t i o n a b o u t t h e e n c l o s i n g X M L e l e m e n t

    ( i . e . < X M L C O M M A N D > i n t h e e x a m p l e a b o v e ) . N o t e

    t h a t X M L d o e s n o t r e q u i r e t h e s a m e s e t o f c h i l d

    e l e m e n t s f o r e a c h e n c l o s i n g X M L e l e m e n t , m a k i n g

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

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

    s i t u a t i o n !

    C h i l d e l e m e n t s a r e X M L e l e m e n t s u n d e r n e a t h t h e

    r o o t ( OBJECTID, OBJECTSERVERID, OBJECTTYPE,OBJECTFLAGS,

    RASPICONNEC