WiringPi – 31 GPIO kanalen!

In deze tutorial laat ik zien hoe je de GPIO poorten van de Raspberry Pi met de WiringPi bibliotheek kunt bedienen en monitoren. Door van deze bibliotheek gebruik te maken beschik je over maar liefst 31 GPIO poorten, in plaats van de reguliere 17 GPIO poorten indien gebruik gemaakt wordt van de 40 pins headerpinnen. Met de WiringPi bibliotheek ben je in staat bash- en shell-scripts te maken die de GPIO poorten bedienen en monitoren.

WiringPi is een op PIN gebaseerde GPIO-toegangsbibliotheek geschreven in C voor de BCM2835, BCM2836 en BCM2837 apparaten die in alle Raspberry Pi’s worden gebruikt. 

Het elektronische deel
Voor een ervaren hobbyist is het elektronische deel van de hardware in deze tutorial niet bijzonder, het betreft 8 LEDs en hun serieweerstanden. Het enige lastige is de LEDs aan de juiste GPIO pinnen van de Raspberry Pi aan te sluiten omdat we de pincodering van WiringPi gebruiken die afwijkt van de standaard GPIO indeling.

In dit project gebruiken we een bibliotheek genaamd WiringPi, bedacht door Gordon Henderson. Je kunt zijn website vinden op: http://wiringpi.com/

Let op!
De gebruikte pinnummers in deze WiringPi bibliotheek wijken af van de Raspberry Pi nummering!

Ga voorzichtig te werk en onderzoek eerst je Raspberry Pi versie, de pin-indeling kan afwijken van degene die in dit project gebruikt wordt. In dit voorbeeld worden pinnen 0 t/m 7 gebruikt.


Installeren en gebruik van de Wiring Pi bibliotheek
Zoals gezegd gebruiken we de WiringPi bibliotheek, het vereenvoudigt het gebruik ten aanzien van de GPIO poorten (één commando in plaats van een een aantal coderegels). Het betekent ook dat je het kunt gebruiken met iedere in C geprogrammeerde code. De software is samen met de bibliotheek door Gordon ontwikkeld. Het staat je toe de GPIO poorten te besturen middels een bash script of direct via de commando regel.

WiringPi wordt tegenwoordig met de standaard Raspbian systemen meegeleverd. Wil je meer weten over WiringPi? Gordon zelf legt het goed uit op zijn website: http://wiringpi.com/download-and-install/

Is WiringPi reeds geïnstalleerd?
Om na te gaan of WiringPi reeds op jouw Raspberry Pi geïnstalleerd is geef je het volgende commando in de terminal:

gpio -v

De uitkomst zag er bij mij als volgt uit. Het bewijs dat WiringPi reeds geïnstalleerd is:

gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
Raspberry Pi Details:
Type: Pi 3, Revision: 02, Memory: 1024MB, Maker: Sony
* Device tree is enabled.
* --> Raspberry Pi 3 Model B Rev 1.2
* This Raspberry Pi supports user-level GPIO access.

Pinconfiguratie
Om de exacte pinconfiguratie van de gebruikte Raspberry Pi vast te stellen geef je het volgende commando:

gpio readall

De terugkoppeling van het systeem zal er ongeveer als volgt uitzien. Je ziet naast het model van jouw Pi onder andere ook de 31 WiringPi (wPi) pinnen:

De translatietabel van de gebruikte Raspberry Pi i.r.t de WiringPi nummering

Voor deze tutorial gebruiken we de volgende pinnen:

WiringPi GPIO toekenning

Schema
In het schema hieronder zie je hoe de LEDs op de WiringPi GPIO poorten aangesloten worden. Tevens zijn de pinnummers van de Raspberry Pi aangegeven.

Aansluitschema voor 8 LEDs

De optimale serieweerstanden die gebruikt worden voor een rode led (20mA) hebben een minimale waarde van 165Ω (R=U/I, R=3,3/0,02=165). Voor de zekerheid nemen we 270Ω om de poorten minder (40%) te belasten.

Schakelen met WiringPi
Laten we de eerste LED eens aan en uit schakelen (Wiring pin 0). Allereerst stellen we de pin in als uitgang (output). Gebruik het commando “gpio mode 0 out” hiervoor. “0” is het bedrade pinnummer en “out” staat voor output. Gebruik nu het commando “gpio write 0 1” om de LED in te schakelen. “0” is weer het pinnummer en “1” is de status (1 voor AAN en 0 voor UIT). Als alles werkt zie je de LED oplichten. Om het uit te schakelen gebruik je het commando “gpio write 0 0“.

TIP
Als je het echte pinnummer (GPIO-17) wilt gebruiken in plaats van het Wiring Pi nummer (0 correspondeert met GPIO 17), gebruik dan de –g vlag in je commando. Voorbeeld: “gpio -g write 17 1” in plaats van “gpio write 0 1“.

Pinstatus uitlezen
Er is ook nog het “gpio read” commando die je in staat stelt de GPIO pin status te lezen. Het lijkt onzinnig om de pinstatus uit te lezen als je deze net met een status voorzien hebt, maar het bevestigt de status van de pin als je de LED niet kunt zien. Gebruik “gpio read 0” waar “0” het wiring pinnummer is. Het commando geeft de pinstatus terug (1 voor AAN en 0 voor UIT).

Wiring Pi library bevat nog veel commando’s en functies maar worden niet in deze tutorial beschreven. Wil je meer weten kijk dan hier: http://wiringpi.com/reference/ en https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/ of het commando “man gpio” voor de handleiding van de GPIO tool.

Nu je het tool kunt gebruiken, probeer het eens met de SSH verbinding. Je kunt hier Putty voor gebruiken of een SSH terminal voor je smartphone.
Gebruik onderstaande bash-script die LEDs 0 tot 7 inschakelt, 1 seconde wacht en daarna de LEDs uitschakelt. Maak het bash- of shellscript aan met:

sudo nano knipper.sh

Kopieer onderstaande code naar de editor.

#!/bin/bash

#set mode to output
for i in 0 1 2 3 4 5 6 7;
do gpio mode $i out;
done;

#turn on LEDs 0 to 7
for i in 0 1 2 3 4 5 6 7;
do gpio write $i 1;
done;

#wait 1 seconds
sleep 1;

#turn LEDs off
for i in 0 1 2 3 4 5 6 7;
do gpio write $i 0;
done;

Geef het bestand de juiste permissies met:

sudo chmod +x knipper.sh

Start het script met:

sh knipper.sh

of ./knipper.sh

Note: Heb je knipper.sh met de editor als gebruiker Pi opgeslagen? Dan werkt het opstarten met ./ niet! Hiervoor zal je als sudo de editor moeten gebruiken.

Have A Nice Day!