Introductie
De Raspberry Pi (hierna RPi genoemd) wordt door velen hier gebruikt als mediacenter. Toch zijn er een aantal van ons die er ook andere leuke projecten mee doen zoals de Raspberry Pi Foundation hem ook bedoeld heeft. Voor al diegene die graag willen knutselen met de RPi of voor diegene graag hun projecten willen laten zien, is dit topic bedoeld.
De RPi heeft een aantal mogelijkheden (naast USB, HDMI, Ethernet e.d.) die je kunt gebruiken voor externe toepassingen.
GPIO
GPIO staat voor General Purpose Input Out. Zoals de naam al doet vermoeden gaat het hier over simpele pinnen die voor invoer en uitvoer te gebruiken zijn. De RPi heeft er hier 26 van (waarvan er een aantal nog geen functie hebben). Voor een beschrijving van de werking van deze pinnen zie: http://elinux.org/RPi_Low-level_peripherals
Dit topic zal gaan over verschillende projecten die mensen hier met de RPi hebben gerealiseerd.
Let op
De 3.3v pin is maximaal belastbaar met 50mA.
De 5v pin (komt direct van de USB connector) kan maximaal 1000mA leveren.
De RPi zelf neemt +/- 700mA (max) op, dus er blijft +/- 300mA over om ledjes, sensoren, LCD's, etc aan te sturen. Dit heeft o.a. te maken met Poly-fuse F3 onder de usb connector. Er zijn uiteraard manieren om deze zekering te verzwaren / bypassen.
Het programmeren van de GPIO pinnen kan via verschillende programmeertalen.
De meest gangbare zijn Python en C.
Installatie
Python
C
Voor een overzicht welke nummers in de verschillende programmeertalen voor welke GPIO pinnen gelden is hier een overzicht te vinden.
Het laten knipperen van een LED
- een standaard 5mm rode LED
- een BC547 transistor
- een 560Ohm weerstand voor de LED
- een 27K weerstand tussen de GPIO van de RPi en de base van de transistor

Python
C
Compileren:
Verschillen tussen Python en C
De reden om in C te programmeren kan de snelheid zijn waarmee C in staat is om de pinnen uit te lezen en de betrouwbaarheid en snelheid van de delay functie. Op dit moment heb ik TSOP4838 aan mijn RPi hangen. Deze stuurt in grote snelheid afwisselend patronen van 1 en 0 naar de RPi. Om dit betrouwbaar uit te lezen moet je programmeertaal ook op grote snelheid deze code kunnen ontvangen. Python blijkt hier niet toereikend genoeg voor te zijn.
De Raspberry Pi (hierna RPi genoemd) wordt door velen hier gebruikt als mediacenter. Toch zijn er een aantal van ons die er ook andere leuke projecten mee doen zoals de Raspberry Pi Foundation hem ook bedoeld heeft. Voor al diegene die graag willen knutselen met de RPi of voor diegene graag hun projecten willen laten zien, is dit topic bedoeld.
De RPi heeft een aantal mogelijkheden (naast USB, HDMI, Ethernet e.d.) die je kunt gebruiken voor externe toepassingen.
GPIO
GPIO staat voor General Purpose Input Out. Zoals de naam al doet vermoeden gaat het hier over simpele pinnen die voor invoer en uitvoer te gebruiken zijn. De RPi heeft er hier 26 van (waarvan er een aantal nog geen functie hebben). Voor een beschrijving van de werking van deze pinnen zie: http://elinux.org/RPi_Low-level_peripherals
Dit topic zal gaan over verschillende projecten die mensen hier met de RPi hebben gerealiseerd.
Let op
De 3.3v pin is maximaal belastbaar met 50mA.
De 5v pin (komt direct van de USB connector) kan maximaal 1000mA leveren.
De RPi zelf neemt +/- 700mA (max) op, dus er blijft +/- 300mA over om ledjes, sensoren, LCD's, etc aan te sturen. Dit heeft o.a. te maken met Poly-fuse F3 onder de usb connector. Er zijn uiteraard manieren om deze zekering te verzwaren / bypassen.
Het programmeren van de GPIO pinnen kan via verschillende programmeertalen.
De meest gangbare zijn Python en C.
Installatie
Python
code:
1
2
3
| wget http://raspberry-gpio-python.googlecode.com/files/python-rpi.gpio_0.3.1a-1_armhf.deb sudo dpkg -i python-rpi.gpio_0.3.1a-1_armhf.deb sudo apt-get install python-dev |
C
code:
1
2
3
4
5
6
7
8
9
10
| sudo apt-get install make cd /tmp wget http://project-downloads.drogon.net/files/wiringPi.tgz tar xfz wiringPi.tgz cd wiringPi/wiringPi sudo make sudo make install cd ../gpio sudo make sudo make install |
Voor een overzicht welke nummers in de verschillende programmeertalen voor welke GPIO pinnen gelden is hier een overzicht te vinden.
Het laten knipperen van een LED
- een standaard 5mm rode LED
- een BC547 transistor
- een 560Ohm weerstand voor de LED
- een 27K weerstand tussen de GPIO van de RPi en de base van de transistor
Python
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #!/usr/bin/python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) pin = 18 GPIO.setup(pin, GPIO.OUT) print "Start loop" while 1: print "LED uit" GPIO.output(pin, False) time.sleep(1) print "LED aan" GPIO.output(pin, True) time.sleep(1) |
C
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <wiringPi.h> #include <stdio.h> int main() { int pin = 1; if(wiringPiSetup() == -1) return 0; pinMode(pin, OUTPUT); printf("Start loop\n"); while(1) { printf("LED aan\n"); digitalWrite(pin, 1); delay(25); printf("LED uit\n"); digitalWrite(pin, 0); delay(25); } } |
Compileren:
code:
1
| cc -o test test.c -L/usr/local/lib -lwiringPi |
Verschillen tussen Python en C
De reden om in C te programmeren kan de snelheid zijn waarmee C in staat is om de pinnen uit te lezen en de betrouwbaarheid en snelheid van de delay functie. Op dit moment heb ik TSOP4838 aan mijn RPi hangen. Deze stuurt in grote snelheid afwisselend patronen van 1 en 0 naar de RPi. Om dit betrouwbaar uit te lezen moet je programmeertaal ook op grote snelheid deze code kunnen ontvangen. Python blijkt hier niet toereikend genoeg voor te zijn.
[ Voor 4% gewijzigd door CurlyMo op 14-09-2012 19:12 ]
Sinds de 2 dagen regel reageer ik hier niet meer