•Projects
Raspberry Pi prototyping-board
Zet de RPi aan het werk in uw eigen project! Tony Dixon
(Verenigd Koninkrijk)
Eén van de leuke aspecten van de Raspberry Pi is dat hij beschikt over een kleine, eenvoudige uitbreidingsconnector, waarop de gebruiker rechtstreeks eigen interfaces en schakelingen kan aansluiten. Om dat nog gemakkelijker te maken, presenteren we in dit artikel een prototyping-board waarmee eigen interfaces en schakelingen voor de Raspberry Pi eenvoudig kunnen worden opgebouwd.
De Raspberry Pi is een gedurfde en interessante ontwikkeling van de stichting Raspberry Pi in Cambridge (UK). De Raspberry Pi Foundation [1] wil de interesse in het programmeren van computers en in techniek in het algemeen bij
EXT
JP1
JP2
INT
REG
3.3V_RPI
5V
K1
IC1 LF33CV
D1
1N4001
3.3V 3
1 C1
2
100n
5V
3.3V_RPI
C2
C3
100n
10u 16V
3.3V
GPIO17 GPIO27 GPIO22 MOSI MISO SCK
Figuur 1. Het schema stelt niet veel voor, maar deze print is erg nuttig om prototypes te bouwen met de Raspberry Pi.
1 3 5 7 9 11 13 15 17 19 21 23 25
De schakeling 5V
3.3V_RPI
K2 SDA SCL GPIO4
INT
K3 2 4 6 8 10 12 14 16 18 20 22 24 26
SDA SCL GPIO4
TxD RxD GPIO18 GPIO23 GPIO24 GPIO25 CE0 CE1
3.3V
GPIO17 GPIO27 GPIO22 MOSI MISO SCK
1 3 5 7 9 11 13 15 17 19 21 23 25
2 4 6 8 10 12 14 16 18 20 22 24 26
TxD RxD GPIO18 GPIO23 GPIO24 GPIO25 CE0 CE1
3.3V
18 | maart 2013 | www.elektor-magazine.nl
kinderen stimuleren door kleine, betaalbare computers beschikbaar te maken. De stichting heeft veel belangstelling, ondersteuning en hulp gekregen van zowel onderwijsinstellingen (zoals Cambridge University), elektronicafabrikanten (RS en Farnell) en de open-source software- en hardware-communities. De ‘Pi’ (spreek uit als ‘paaj’, niet als ‘pie’) wordt wel de ‘Beeb’ (BBC-Micro) van het Internet-tijdperk genoemd. Elektor zag al gauw de mogelijkheden van de RPi en legde ook contact met één van de makers, Eben Upton, zoals te lezen is in het interview [2].
120483 - 11
Het RPi prototyping-board is een eenvoudige print waarop de signalen van de uitbreidingsconnector van de Raspberry Pi en de voedingsspanning beschikbaar zijn voor gebruik in een prototyping-gebied (een veld met soldeereilandjes). Het schema in figuur 1 is dan ook niet ingewikkeld. Ten eerste beschikt het RPi prototyping-board over een extra voedingsspanningsbron van 3,3 V. De 3,3 V op de uitbreidingsconnector van de RPi kan maar ongeveer 50 mA leveren, dus als een uitbreidingsschakeling meer dan 50 mA gebruikt, is een extra 3,3-V-voeding nodig. Op het RPi prototyping-board wordt deze voedingsspanning geleverd door IC1, een lineaire spanningsregelaar van 3,3 V van het type LD1117. IC1 kan worden gevoed door een externe of interne gelijkspanningsbron. Deze
RPi prototyping-board
keuze wordt gemaakt met jumper JP1. De LD1117 kan, als hij wordt voorzien van een geschikt koellichaam, maximaal 800 mA leveren. Als jumper JP1 op ‘INT’ (intern) staat, wordt IC1 rechtstreeks gevoed uit de 5-V-lijn van de Raspberry Pi. Als JP1 op ‘EXT’ (extern) staat, komt de voeding van een externe netspanningsadapter van 9...12 VDC via een standaard 2,1-mm-stekker (centrale pen plus, huls massa) en diode D1. Jumper JP2 moet dan in de stand ‘REG’ (regelaar) worden gezet. C1 en C2 zorgen voor de storingsonderdrukking voor IC1; C3 is een kleine buffercondensator. Ten tweede zorgt het RPi prototyping-board voor een gemakkelijke toegankelijkheid van alle signalen op de uitbreidingsconnector van de Pi. Via de tweede connector, K2, komen de signalen van de Raspberry Pi binnen. Ze zijn op onze prototype-kaart beschikbaar voor gebruik in door de gebruiker ontworpen schakelingen. Nog een laatste opmerking over het schema: Als de schakeling van de gebruiker niet meer dan 50 mA van de 3,3 V-spanning gebruikt, dan mag de hardware rechtstreeks uit de 3,3 V van de Raspberry Pi-kaart zelf worden gevoed. Zet daartoe JP2 in de stand ‘INT’.
Opbouw Het bestukken van het RPi prototyping-board is niet moeilijk. De componentenopstelling is te zien in figuur 2. Plaats eerst de kleine compo-
nenten D1, C1, C2, JP1 en JP2. Plaats dan de iets grotere componenten K1 en C3. Daarna is spanningsregelaar IC1 aan de beurt. Monteer tenslotte connector K2. Deze komt aan de koperzijde van de print, zodat het RPi prototyping-
Figuur 2. Een prototyping-board is net een tennisbaan: klaar om op te spelen.
www.elektor-magazine.nl | maart 2013 | 19
•Projects 13 mm. Dat is juist voldoende voor de RJ45- en RCA-connector van de Pi. Het RPi prototypingboard heeft een rechthoekige uitsparing voor de USB-connector van de Raspberry Pi. Als het solderen klaar is, zou het resultaat er uit moeten zien als in figuur 3.
Punten om op te letten
Figuur 3. Dit protoype is opgebouwd in het Elektor-lab. Let op: De opdruk van de print heeft betrekking op RPi Revision 2.
board in een sandwichconstructie op een Raspberry Pi gestoken kan worden. K3 is geen connector, maar een groep soldeereilanden waar de signalen voor eigen experimentele schakelingen beschikbaar zijn. Wie dat wil, kan printpennen in de gaten plaatsen. Het is belangrijk om voor connector K2 het juiste type te gebruiken. De Raspberry Pi is zeer compact opgebouwd en bevat een aantal hoge componenten, namelijk de RJ45 Ethernet-connector (hoogte 13 mm), de cinch video-connector (hoogte 13 mm) en de dubbele USB-connector (hoogte 17 mm). Die kunnen in de weg zitten als een uitbreidingskaart geplaatst wordt. Daarom moet connector K2 minimaal 10 mm hoog zijn om het RPi prototyping-board goed samen te kunnen voegen met een Raspberry Pi. De in de onderdelenlijst vermelde connector voor K2 heeft een hoogte van 10,8 mm. Samen met de hoogte van de standaard 0,1” pinheader op de Raspberry Pi brengt dat de afstand tussen de printen op
IC1
3.3V
10 +VS
GPIO17 GPIO18 GPIO22 GPIO23 GPIO24 GPIO25 GPIO27
Figuur 4. Schema van de demo met de knipperende LED. Het echte werk wordt gedaan in de software!
GPIO4
20 | maart 2013 | www.elektor-magazine.nl
1
18 R1
2
17
R2
3
16
R3
4
15
R4
5
14
R5
6
13
R6
7
12
R7
8
11
R8
VEE 9
330R 330R 330R 330R 330R 330R 330R 330R
D1 D2 D3 D4 D5 D6 D7 D8
ULN2803 120483 - 12
Bij gebruik van deze kaart moet op een aantal belangrijke punten worden gelet. Ten eerste: De signalen op de uitbreidingsconnector van de RPi hebben een ‘1’-niveau van 3,3 V. Ze zijn niet compatibel met logische signalen van 5 V! Ten tweede: de RPi-signaallijnen kunnen maar weinig stroom leveren of opnemen, het maximum is ongeveer 8 mA. Dus pas op en sluit niets aan dat veel stroom trekt, want dat gaat niet werken. Als meer stroom nodig is of als 5-V-logica moet worden aangesloten, gebruik dan een buffer-IC zoals een 74LVC245.
RPi-demo: een knipperende LED Als Elektor iets publiceert over microcontrollerkaarten, lijken de lezers altijd verdeeld in twee kampen. De mensen uit het eerste kamp zeggen: “Al heb ik zelf nog nooit iets gepubliceerd, ik ben toch slimmer dan de redactie. Ik heb geen voorbeeldtoepassing nodig.” De mensen uit het tweede kamp zeggen: “Ik koop of bouw geen microcontrollerschakeling zonder een volledig uitgewerkte toepassing, dus die wil ik eerst zien.” Om het nog ingewikkelder te maken kunnen mensen uit beide kampen hun mening voor zich houden, die alleen delen met hun collega’s of die breed verspreiden in forums, tweets, enz. Dan zijn er nog verschillen als taal, publicatiemedium en leeftijd, zodat het wel erg ingewikkeld wordt om het iedereen naar de zin te maken. Daarom toch maar een voorbeeld van de basisbeginselen van het regelen van hardware met een RPi. Of het nu gaat om een paar LED’s zoals in figuur 4, of om de minibar achterin een luxe limousine met GPS-volgsysteem, de mogelijkheden worden alleen begrensd door uw eigen fantasie. Waarom? Omdat het om software gaat. In dit project gebruiken we een 8-kanaals darlington-array type ULN2803 om een groep LED’s aan te sturen. Net zoals het traditie is om met het eerste programma op een nieuw systeem de tekst “Hello World” weer te geven, zo is het ook traditie dat een nieuw hardware-project een LED laat knipperen om aan te tonen dat alles werkt. We doen die traditie gestand met het eenvou-
RPi prototyping-board
Eben Upton, Raspberry Pi mede-ontwerper & profeet V: Waar komt de naam vandaan? A: We wilden een computer speciaal voor Python en er is een grote traditie om computers naar vruchten te vernoemen: denk aan de Apricot en aan Acorn. Ook tegenwoordig worden er nog computers naar vruchten vernoemd. Dus met Raspberry volgen we die traditie. En de Pi heeft natuurlijk met Python te maken. Vandaar. V: De Raspberry Pi is een kale PC-kaart; geen toetsenbord, geen HD, geen scherm… hoe kan dat ooit een succes worden? A: In feite hoeft een computer niet meer dan $50 te kosten. Juist de randapparatuur zoals het scherm, het toetsenbord en de opslagruimte drijven de prijs omhoog. Voor de Raspberry Pi hebben we een andere keuze gemaakt. Een gewone TV is geschikt als scherm. Verder is alleen nog een toetsenbord uit de kringloopwinkel nodig voor een compleet werkend systeem. De Raspberry is speciaal bedoeld om jongeren te leren programmeren.
(Samengevat uit Elektor april 2012)
dige Python-programma in Listing 1, dat de LED’s bestuurt. Dit programma maakt gebruik van een Python GPIO-bibliotheek om ons toegang te geven tot de GPIO-pennen. Wie de Python-ontwikkelomgeving of de GPIO-bibliotheek nog niet heeft gedownload, kan dat nu doen met de volgende commando’s in een LX-terminal op de Pi. Download eerst de Python-ontwikkelgereedschappen met het commando: sudo apt-get install python-dev
Installeer het pakket dan met het commando: sudo python setup.py install
Listing 1. Blinky.py # !/usr/bin/python import time import RPi.GPIO as GPIO # Configure Pi’s GPIO pins
Download dan het GPIO-pakket om de GPIOpoort van de Raspberry Pi aan te sturen. Geef het volgende commando:
GPIO.setmode(GPIO.BCM)
wget http://pypi.python.org/packages/ source/R/RPi.GPIO/RPi.GPIO-0.4.1a.tar.gz
for pin in pins:
Na het downloaden moeten de bestanden worden uitgepakt. Type:
# Program loop
tar -zxf RPi.GPIO-0.4.1a.tar.gz Bij het uitpakken wordt een nieuwe directory gemaakt met de Python-files er in. Type nu:
pins = [17,18,22,23,24,25,21,4]
GPIO.setup(pin,GPIO.OUT)
while True: for pin in pins GPIO.output(pin, True) time.sleep(0.01) GPIO.output(pin, False) time.sleep(0.01)
cd RPi.GPIO-0.4.1a
www.elektor-magazine.nl | maart 2013 | 21
•Projects Binnenkort meer RPi-schakelingen en toepassingen in de Elektor.POST-nieuwsbrief
Daarna is de Python GPIO-bibliotheek geïnstalleerd. Voer nu op de Pi het programma in Listing 1 in met IDLE of met een tekst-editor. In dit programma definieert Setmode de getallen die worden gebruikt om de individuele pennen aan
te sturen. De instructie GPIO.setmode(GPIO. BCM) gebruikt de symbolische namen die zijn toegewezen aan de I/O-lijnen van de RPI. In dit geval worden de volgende acht pennen gebruikt in het array ‘pins’: GPIO17, GPIO18 en GPIO22 tot GPIO4. Merk op dat deze toewijzing geldt voor Revision 1 van de RPi-print. Hier is label GPIO27 aangeduid met ‘21’, volgens de oude nummering van de I/O-lijnen. Daarna zorgt GPIO.setmode(GPIO.BOARD) voor een directe koppeling tussen de I/O-lijnen en de fysieke nummering op de uitbreidingsconnector op de RPi-kaart. Met deze instelling ziet het pen-array er als volgt uit om het zelfde effect te bereiken op de LED’s: pins = [11,12,15,16,18,22,13,7] Sla het programma na het intypen op als ‘Blinky. py’ en schakel over naar een LX-terminal. Geef
Raspberry Pi uitbreidingsconnector Tabel 1. Aansluitgegevens van de uitbreidingsconnector Board Revision 1
Board Revision 2
Naam
Functie
Alternatief
Naam
P1-02
5.0V
-
P1-01
3.3V
-
3.3V
-
P1-04
5.0V
-
P1-032
GPIO0
I2C0_SDA
GPIO2
I2C1_SDA
P1-06
GND
-
P1-052
GPIO1
I2C0_SCL
GPIO3
I2C1_SCL
P1-08
GPIO14
UART0_TXD
P1-07
GPIO4
GPCLK0
GPIO4
GPCLK0
P1-10
GPIO15
UART0_RXD
P1-09
GND
-
GND
-
RTS0
GPIO17
RTS0
Functie
Alternatief
Functie
Alternatief
P1-12
GPIO18
PWM0
P1-11
GPIO17
P1-14
GND
-
P1-13
GPIO21
P1-16
GPIO23
P1-15
GPIO22
P1-18
GPIO24
P1-17
3.3V
-
3.3V
-
P1-20
GND
P1-19
GPIO10
SPI0_MOSI
GPIO10
SPI0_MOSI
P1-22
GPIO25
P1-21
GPIO9
SPI0_MISO
GPIO9
SPI0_MISO
P1-24
GPIO8
SPI0_CE0_N
P1-23
GPIO11
SPI0_SCLK
GPIO11
SPI0_SCLK
P1-26
GPIO7
SPI0_CE1_N
P1-25
GND
-
GND
-
1
-
Opmerkingen: 1. GPIO18 (Pin 12) ondersteunt PWM-output.
GPIO27 GPIO22
2. I2C0_SDA0 en I2C0_SCL0 (GPIO0 & GPIO1) hebben pullup-weerstanden van 1,8k naar 3,3 V.
Connector K2 in het schema is de uitbreidingsinterface van de Raspberry Pi. Het is een simpele tweerijige pinheader met een penafstand van 0,1” (2,54 mm). Er zijn 26 lijnen beschikbaar. Deze signalen zijn te verdelen in drie categorieën:
22 | maart 2013 | www.elektor-magazine.nl
RPi prototyping-board
dan het volgende commando om het programma uitvoerbaar te maken: chmod +x blinky.py Nu kan het programma worden uitgevoerd met het commando: sudo ./blinky.py Met wat meer code zouden we gemakkelijk de temperatuur van de CPU of de activiteit op het netwerk kunnen weergeven op de LED’s.
Tot slot De Raspberry Pi biedt enorme mogelijkheden voor software-ontwikkeling voor weinig geld. Met de in dit artikel beschreven prototyping-kaart kunnen meer hardware-gerichte elektronicahobbyisten de RPi gebruiken om dingen in de echte wereld aan te sturen. Wie een RPi-toepassing heeft ontwikkeld die de moeite waard is, wordt van harte uitgenodigd om die te publiceren via www.elektor-labs.com. (120483)
Tabel 2. Header P5 (alleen op Revision 2-kaarten) Naam
Functie
Alternatief
P5-01
5V0
P5-02
3.3V
P5-03
GPIO28
PCM_CLK
P5-04
GPIO29
PCM_FS
Internet-verwijzingen [1] Raspberry Pi website: www.raspberrypi.org [2] Interview met Eben Upton: “Waar ben je mee bezig?”, Elektor april 2012; www.elektor.nl/120228
Figuur 5. De experimentele schakeling opgebouwd op het prototyping-veld en verbonden met de RPi via uitbreidingsconnector K2.
[3] www.elektor.nl/120483
Voeding: +5 V en 3,3 V gelijkspanning en massa (0 V) Input/Output: General Purpose Input/Output (GPIO)-signalen Communicatie-interfaces: Seriële UART, SPI en I2C * Opmerking: De 3,3 V kan niet meer dan 50 mA stroom leveren.
Er zijn 17 universele input/output (GPIO)-signalen op de uitbreidingsconnector. De meeste kunnen ook een alternatieve functie vervullen. Tot die alternatieve functies behoren de UART-, SPI- en I2C-interfaces. P5-05 GPIO30 PCM_DIN Elke GPIO-lijn kan tussen 2 en 16 mA leveren, afhankelijk van de P5-06 GPIO31 PCM_DOUT geconfigureerde drive strength. Deze P5-07 GND drive strength wordt ingesteld in een P5-08 GND configuratieregister. Na een reset is de standaard instelling 8 mA. Naast deze uitbreidingsconnector P1 heeft Revision 2 van de Raspberry Pi een tweede, kleinere uitbreidingsconnector met de naam P5 (zie Tabel 2). Deze voegt vier GPIO-signalen toe, maar het belangrijkste is dat hij toegang geeft tot de PCM-audio-interface van de Broadcom 2835-chip. Ook de signalen op connector P1 zijn een beetje gewijzigd op Revision 2-kaarten, zie Tabel 1. Let er op dat de I2C0-interface is vervangen door de I2C1-interface, een klein maar belangrijk punt om in de gaten te houden bij het koppelen van I2C-apparaten.
www.elektor-magazine.nl | maart 2013 | 23