Att lära sig lite basgrunder om el är ett måste, framför allt
U=I*R (Spänning=Ström*Motstånd).
En viktig sak att veta är att GPIO har begränsningar i maximal strömstyrka(spänningsregulatorn som ger 3.3v).
Vad som brukar sägas är att du får belasta 1 pinne max 16mA eller hela GPIO max 51mA. Överstiger du dessa värden finns det risk att du bränner sönder något.
Om vi ska kontrollera ditt LED-exempel med ovan formel så får vi:
U=I*R =>
I=U/R
Han har valt ett motstånd med 330 Ohm, Spänningen i en pinne är 3.3V
I=3.3/330=0.01
0.01A = 10mA
10mA <16mA vilket är OK!
Med detta sagt ska man veta att GPIO inte är till för att driva saker utan endast styra. Vill man köra en motor exempelvis så skall man ha en separat spänningskälla till motorn då GPIO inte klarar av att driva motorn. Däremot kan man med hjälp av ett relä sätta på/av motorn.
Jag skriver alla mina program i python och tycker det fungerar mycket bra, kan rekommenderas. Även om du inte kommer göra det så kan jag beskriva grundera för att hantera GPIO(är liknande i andra språk):
Först måste man importera GPIO-biblioteket. Detta görs för att få tillgång till de olika funktionerna som krävs för att hantera GPIO.
För att importera biblioteket skriver vi:
import RPi.GPIO as GPIO
#Vi kan nu kalla på funktioner genom att använda oss utav GPIO.funktion
#Det går att namnge importen annorlunda om man vill, exempelvis
import RPi.GPIO as vadjagvill
#Vi måste nu kalla på funktioner genom att använda oss utav vadjagvill.funktion
När detta är gjort måste vi bestämma hur vi ska identifiera pinnarna i våran kod. Detta kan göra på två sätt, antingen genom pinnens fysiska position eller genom dess "Broadcom SOC channel". Bilden nedan förklarar:
http://www.raspberrypi-spy.co.uk/wp-content/uploads/2012/09/Raspberry-Pi-GPIO-Layout-Revision-1.png
I circlarna på bilden finns pinnens fysiska plats i kontakten. Ganska enkelt och logiskt.
I fyrkanterna finns SOC-adressen. Det står GPIO+en siffra. Denna siffra skall användas om man väljer detta sätt.
Så för att definiera i våran kod skriver man följande:
#För värden i circeln, dess fysiska adress:
GPIO.setmode(GPIO.BOARD)
#För värden i fyrkanten, SOC
GPIO.setmode(GPIO.BCM)
Personligen gillar jag BOARD bättre då man enkelt kan räkna på pinnarna vart man ska koppla.
Nästa steg är att bestämma om en pinne ska agera output eller input. Helt enkelt om pinnen ska sända ut spänning eller ta emot.
I min lilla "guide" här kommer jag ignorera input.
För att definiera det kör vi:
#Sätter pinne till output. Pinne är ett nummer enligt ovan.
GPIO.setup(pinne, GPIO.OUT)
#Om vi vill att pinnen ska slås på direkt kan följande användas
GPIO.setup(pinne, GPIO.OUT, initial=GPIO.HIGH)
Nu till det roliga, att växla läge på en pin:
GPIO.output(pinne,läge)
#pinne är numret definierat ovan. Läge är av/på. Värden man kan sätta där är 0/GPIO.LOW/false för att stänga av
#och 1/GPIO.HIGH/true för att sätta på
#Exempel för att slå på pinne nr 5:
GPIO.output(5,true)
Slutligen vill vi nollställa GPIO-kontakten så vi inte lämnar någon pinne på och råkar kortsluta när vi ska in och koppla.
Detta görs med:
Om vi nu skall tillämpa allt vi lärt oss så kan vi nu skriva ett komplett program som får en LED att tändas och släckas.
Kommer nu även blanda in variabler i koden.
#Blinkande lampa av bardbard :)
#Importerar nödvändiga bibliotek.
#time-biblioteket behövs för att kunna pausa programmet med sleep-funktionen
import RPi.GPIO as GPIO
import time
#Definierar pin-layout enligt pinnarnas fysiska position i kontakten
GPIO.setmode(GPIO.BOARD)
#Skapar variablar där jag bestämmer pin-nummer,antal blinkningar och längden för på/av-tid
led_pin = 3
blink_amount = 5
blink_length = 2
#Definierar pinne som output
GPIO.setup(led_pin, GPIO.OUT)
#skapar en loop som tänder och släcker lampan
for i in range(0,blink_amount):
#Sätter på lampa och pausar program
GPIO.output(led_pin, true)
sleep(blink_length)
#Stänger av lampa och pausar program
GPIO.output(led_pin, false)
sleep(blink_length)
#Loopen är klar, dags att nollställa alla pinnar
GPIO.cleanup()
#Programmet är slut och avslutas
Detta är väl en bra start iaf för att komma igång. Det finns mer funktioner med GPIO som du givetvis kan gå vidare med, t.ex input är ju användbart. För att kunna köra GPIO så måste man starta programmet med sudo-rättigheter!
T.ex i terminalen skriver du:
sudo python2.7 mittprogram.py
Gör du inte detta så kommer du få felmeddelande att du inte har rättigheter att importera GPIO-biblioteket.
Lycka till med allting, går säkert kanon!
Du kan titta i min bygglogg i signaturen för att se vad man kan styra med en Pi
Har du frågor sen när du väl är igång så är det bara att köra. Har pillat ganska mycket med GPIO så lite har man ju snappat upp under tiden