raspberry pi gpio turtorial

Trädvy Permalänk
Medlem
Registrerad
Sep 2012

raspberry pi gpio turtorial

Tjena

Tänkte försöka lära mig programmera lite småsaker på min raspberry pi, är helt nybörjare och kan verkligen inget. Tänkte höra om ni nån vet nån sida där man kan läsa steg för steg hur man ska göra, typ som denna:
https://thepihut.com/blogs/raspberry-pi-tutorials/27968772-tu...

Tänkte köpa detta kit:

http://www.aliexpress.com/item/Electronic-Components-Working-...

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Apr 2010
Skrivet av wranzzon:

Tjena

Tänkte försöka lära mig programmera lite småsaker på min raspberry pi, är helt nybörjare och kan verkligen inget. Tänkte höra om ni nån vet nån sida där man kan läsa steg för steg hur man ska göra, typ som denna:
https://thepihut.com/blogs/raspberry-pi-tutorials/27968772-tu...

Tänkte köpa detta kit:

http://www.aliexpress.com/item/Electronic-Components-Working-...

Kul att du vill börja lära dig mer om Raspberry. Det är ju ändå ett repeterande samtalsämne varje gång dem släpper en uppgradering av sin bräda. Vad som är intressant att lära sig är väl lite webb, python och C, såklart lite kunskap om Linux eller veta vad google är kommer ju hjälpa det ser ut som att hitta en bra resurs för att lära dig lite men jag kan också rekommendera dem här:
https://www.youtube.com/user/RaspberryPiBeginners

Tänk bara på att alla billiga grejer (överhuvudtaget) du köper från AliExpress (t.ex.) när det kommer till denna typ av utrustning har oftast låg byggkvalité, klarar inte vatten (trots bruksområdet är avsett för det) och att det tar väldigt lång tid att få hem. Det är dock väldigt bra start.

Kan rekommendera dessa två:
m.nu
http://www.aliexpress.com/item/16pcs-1lot-Raspberry-pi-2-the-...
http://www.aliexpress.com/item/Jump-Wire-Cable-Male-to-Male-J...

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Trädvy Permalänk
Medlem
Registrerad
Dec 2003

Om du vill behöver du inte lära dig c/python, det går även att köra C# med Windows 10 iot.
Komma igång: https://developer.microsoft.com/en-us/windows/iot
Massor av projekt-exempel: https://microsoft.hackster.io/en-US

Lycka till!

Trädvy Permalänk
Medlem
Registrerad
Sep 2012

Stort tack för svaren. Jag ska kika på dom lite närmare. Fler tips tas gärna emot!

Trädvy Permalänk
Medlem
Plats
~/Karlstad
Registrerad
Dec 2005

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:

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:

GPIO.cleanup()

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

Bara gammalt skräp...

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Aug 2007

Kan ju vara bra att veta, att det finns väldigt många bra Appar till mobilen när det gäller GPIO/Pajen..... är bara att söka på "raspberry pi" så kommer det upp många, några bättre och några sämre Vilka som är bäst får ni själva avgöra

Pc 1--> [AsRock DualSata2][AMD4600+X2][7800GT] [Intel SSD X-25 80GB G2][1TB F3][750GB IDE][4GB XMSCorsiar]Pc 2--> [Asus Crosshair] [AMD 4800+X2] [2st 8800GT i SLI] [RAID 0 2x250GB] [6GB XMSCorsair] [Corsair HX750]Pc 3-->[NAS DNS-323 3TB][Skärmar=24",24",24" Eyefinity]Pc 4--> AsRock P67 Extreme 4,i7 2600K @ 4.0 GHz,830 256GB,16GB 1600MHz,HD 6950 2GBFoto [Nikon D3100][70-300/35 1,8/18-55

Trädvy Permalänk
Medlem
Registrerad
Sep 2012

@bardbard Stort tack för denna guide! Jag uppskattar det extremt mycket!

Trädvy Permalänk
Medlem
Registrerad
Jan 2015
Skrivet av bardbard:

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:

GPIO.cleanup()

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

Grymt bra beskrivning, tack!