Kom igång med Raspberry Pi och Linux, del 2
Har du läst del 1 av denna artikelserie
kan tillräckligt mycket Linux för att kunna navigera i filsystemet, förstå dig
på rättigheterna och sudo
, redigera textfiler, göra filer körbara samt hitta
mer hjälp om kommandon och systemet. Nu är det dags att gå vidare och titta på
Raspberry Pi:en och vad det är som gör den så praktisk.
Det som gör Raspberry Pi:en så intressant är GPIO-portarna. På dessa kan vi koppla in alltifrån temperaturprobar, fuktmätare, handkontroller med mera. Vi kan också styra andra saker, så som lysdioder, motorer, reläer med mera. Här nedanför ser du en bild på GPIO-portarna samt en enkel ritning över vad de olika portarna har för funktion. Bilden och ritningen är på en Raspberry Pi rev. B+. De nyare Raspberry Pi har fler GPIO-portar, men principerna är ändå detsamma.
Som du ser på ritning här ovan så har vissa av portarna namn som GPIO2, GPIO17, GPIO18 och så vidare. Dessa namnen kan man använda när man programmerar mot GPIO-portarna i Python. Då använder man sig av inställningen BCM. Vill man istället hänvisa till de fysiska portarna, det vill säga port nummer 1, är också port nummer 1 i Python, så ska man istället använda sig av inställningen BOARD i Python. Mer om detta lite senare, just nu behöver vi bara veta att det finns två olika sätt att namnge GPIO-portarna.
Konfigurera din Pi
Det enklaste sättet att konfigurera sin Pi på är via verktyget
raspi-config
. Du måste starta detta med sudo raspi-config
för att göra
inställningar som påverkar hela systemet. I raspi-config
kan du göra det
mesta, så som att aktivera kameramodulen, aktivera stödet för 1-Wire, överklocka
din Pi och så vidare. Det finns också ett grafiskt verktyg som i mångt och
mycket påminner om raspi-config
och nås via menysystemet i GUI:t, under Setup.
GPIO-portarna och Python
Här kommer en kort introduktion till GPIO-portarna och några enkla exempel på
vad man kan göra med dem. Vi börjar med ett enkelt exempel med en lysdiod som vi
kan tända och släcka via Python. Börja med att installera GPIO-biblioteken för
Python 3 till din Pi med sudo apt-get install python3-rpi.gpio
. Nu ska vi
börja att koppla upp vårt första experiment med Pi:en och vår lysdiod. En
experimentplatta, eller kopplingsplatta som det också kallas, är att
rekommendera. Börja med att koppla upp labben enligt ritningen nedan.
Som du ser på ritning här ovan så har vi kopplat lysdiodens anod, alltså dess positiva sida (sidan med det längre benet) till port 11 på vår Raspberry Pi. Detta ska vi använda i vårt program som vi nu ska skapa. Koppla därefter en resistor på 220 Ohm till andra bener på lysdioden. Koppla sedan ihop resistorn med med port 25 på Pi:en (jord/minus). Programmet vi nu kommer att göra kommer tända och släcka lysdioden, om och om igen, med en sekunds mellanrum. Min labb ser ut som på bilden nedan.
Om du inte redan gjort det behöver du först installera Python 3-biblioteken för
Raspberry Pi:en. Gör detta med sudo apt-get install python3-rpi.gpio
. Skapa
därefter följande lilla program med valfri texteditor och spara filen som
blinkled.py
.
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(11, GPIO.OUT)
while True:
try:
GPIO.output(11, True)
time.sleep(1)
GPIO.output(11, False)
time.sleep(1)
except:
GPIO.output(11, False)
GPIO.cleanup()
quit()
Ändra därefter rättigheterna på filen så att du kan köra den. Gör detta med
chmod +x blinkled.py
. Kör därefter programmet med ./blinkled.py
och se hur
(förhoppningsvis) lysdioden blinkar. För att avbryta programmet trycker på
CTRL-C, alltså håll in CTRL och tryck samtidigt på C.
Vad gör då programmet? Vi tar och går igenom hela programmet här, rad för
rad. Den första raden talar om för skalet att vi vill köra detta programmet med
Python 3. De följande två raderna importerar två moduler som vi behöver, först
modulen för Raspberry Pi:ens GPIO-portar och sedan tids-modulen time
. Därefter
gör vi en del inställningar för GPIO-portarna i vårt program. Först talar vi om
att vi vill använda oss av BOARD för att namnge portarna på Pi:en, det vill säga
vi namnger dem efter dess fysiska position på kortet. Därefter stänger vi av
alla varningar med setwarnings(False)
. Och sist men inte minst så talar vi om
att vi kommer att använda oss av port 11 i output-läge. Nu är GPIO-porten redo
och vi kan börja på själva programmet.
Hela programmet läggs i en while True
-slinga som gör att programmet kommer att
köras om och om igen, i all oändlighet tills någon avbryter det. Därefter lägger
vi själva tänd/släck-funktionen i en try
-sats. Detta gör vi för att om vi
avbryter programmet när lysdioden är tänd, så ska except
-satsen släcka
lysdioden och städa upp efter sig, och till slut avsluta programmet. Detta gör
man för att inte lysdioden ska förbli tänd efter att programmet har
avslutats. Men om vi återgår till tända och släcka lysdioden. Först tänds
lysdioden med GPIO.output(11, True)
, sedan pausas körningen i en sekund med
time.sleep(1)
, för att sedan släcka lysdioden igen med GPIO.output(11,
False)
. Efter detta pausas programmet igen i en sekund med
time.sleep(1)
. Därefter börjar det om från början igen med att tända
lysioden. Så fortsätter programmet så tills vi väljer att avbryta det på något
sätt, till exempel med CTRL-C.
Summering
Nu har vi kommer en bra bit på vägen, både med Raspberry Pi:en, Linux och Python. Vi har lärt oss navigera i Linux, redigera textfiler och förstå rättigheter. Vi har lärt oss hur Pi:en fungerar med dess GPIO-portar och sist men inte minst har vi lärt oss hur vi styr GPIO-portarna med Python. Nu är det bara fantasin som sätter gränser för vad vi kan bygga.
Relaterat
Senaste nyheterna och inläggen
CyberInfo Sverige är ett IT-företag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, BSD och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.