Raspberry PI och GPIO stift: Kontrollera en lysdiod med Bash och Python

I det tidigare inlägget vi såg var GPIO stiften och några exempel på praktiska tillämpningar, Idag kommer vi att fokusera på drift av general-purpose pins, och lära sig att styra dem med tolkens order Bash och med Python.

proto&ledde

Kommer att använda en LED, ett motstånd av 330 ohm, Wire, och en Skärbräda, eller löda och en lödkolv.

Vi måste också våra Hallon har redan Raspbian pre-installerat, Om ditt ärende inte är, Du kan se hur man gör det följande länk från den Katalog.

Riding kretsen

Du kan löda direkt den LED tråd och motstånd som du ser i följande diagram, Även om det är mycket bättre att använda en Skärbräda; Det är också mycket viktigt att se bra på polisonger, som i den “Diagonal” insidan av den diod LED kombinera två stiften för att montera kretsen, redan som om du montera den bakåt startar inte.

Krets som behövs för att kontrollera tändningen av en LED diod.

Krets för att styra effektförbrukningen för en LED diod.

Jag kommer att använda en Skärbräda, och jag rekommenderar att du använder en, Finns det några från cirka 4 € och de tillåter oss att återanvända komponenter om och om igen utan att behöva löda, de interna anslutningarna av en Skärbräda de tenderar att vara följande.

protocon

Ett set av brödunderläggen anslutningar.

Anslutningarna mellan den Skärbräda och den Hallon de måste vara som i följande diagram, den GPIO Du kan nå fråga 3,3V tilldela ett logiskt höga värde.

Kretsen på skärbräda.

Krets för att styra effektförbrukningen för en LED diod.

Hello World of GPIO med Bash

En gång monterade krets, Vi ska göra vad jag kallar en “Hej världen GPIO” i Bash Kör följande script.

#!/bin/bash
#Exportamos el puerto GPIO 17 
echo 17 > /sys/class/gpio/export 
#Lo configuramos como salida 
echo out > /sys/class/gpio/gpio17/direction 
#Encendemos el LED asignandole 1 como valor lógico
echo 1 > /sys/class/gpio/gpio17/value

För att stänga av lampan, kan vi göra det med följande script.

#!/bin/bash
#Apagamos el LED asignandole 0 como valor lógico
echo 0 > /sys/class/gpio/gpio17/value  
#Eliminamos la entrada del puerto GPIO 17 
echo 17 > /sys/class/gpio/unexport 

I grunden gör vi med Bash är att skapa en Directory-hierarkin i /sys/klass/gpio och lägga till innehåll till varje fil som kommer att behandlas som en variabel.

hierarki

Hierarkin i katalogen /sys/class/gpio.

Introduktion till Python

Vi har redan visat sig att vår krets fungerar korrekt och den LED har det fått sparken för att ge logiska högt värde till variabel, Nu ska vi se hur vi kan göra samma sak Python, som gör det möjligt att planera vår webb-applikationer att styra in- och utgångar för de GPIO från valfri enhet.

funcweb

Operation med webbprogrammet.

Innan du fortsätter, Jag rekommenderar att du ser kapitel i den 1 till den 10 för Denna video tutorial från Python kanalen för YouTube för Koden underlättas, Om som jag inte har mycket aning för programmering i Python, Det kan komma att du mycket väl att bekanta dig med den kod som vi kommer att se mer framåt och kommer att förstå det.

Olika Stifttilldelningar för GPIO (BCM och styrelsen)

Det finns två typer av pin numrering, den fysiska numrering eller läge STYRELSEN, och numreringen av chip SoC Broadcom kontrollera dem, Vi kommer att använda pinout i läge BCM, men låt oss titta på skillnaden.

BCMvsBOARD

Hello World of GPIO med Python

Efter att titta på videor, och olika Stifttilldelningar kan redan förstå grundläggande koden för att göra den “Hej världen GPIO” i Python.

Först ska vi hämta allt du behöver för att styra den GPIO med Python, i Raspbian de redan har installerats Python och bibliotek GPIO, men vi kommer att installera en extra paket och uppdatera systemet till har den senaste versionen.

usuario@maquina:~$ sudo apt-get install python-dev
usuario@maquina:~$ sudo apt-get install python-rpi.gpio
usuario@maquina:~$ sudo apt-get update && sudo apt-get upgrade

Uppdaterad en gång, Låt oss se hur till vända på den LED med följande script, Du kan till exempel kalla enciende.py, och vi kan köra det som root med kommandot “sudo Python enciende.py”.

#!usr/bin/env/ python
#enciende.py
#importamos la libreria GPIO
import RPi.GPIO as GPIO 
#Definimos el modo BCM 
GPIO.setmode(GPIO.BCM) 
#Ahora definimos el pin GPIO 17 como salida
GPIO.setup(17, GPIO.OUT) 
#Y le damos un valor logico alto para encender el LED
GPIO.output(17, GPIO.HIGH) 

Med detta kan vi stänga av, till exempel kalla apaga.py

#!usr/bin/env/ python
#apaga.py
#importamos la libreria GPIO
import RPi.GPIO as GPIO 
#Definimos el modo BCM
GPIO.setmode(GPIO.BCM)  
#Ahora definimos el pin GPIO 17 como salida
GPIO.setup(17, GPIO.OUT) 
#Y le damos un valor logico bajo para apagar el LED
GPIO.output(17, GPIO.LOW) 
#Finalmente liberamos todos los pines GPIO, es decir, los desconfiguramos)
GPIO.cleanup() 

Och med detta kommer vi att ringa dig parpadea.py, Vi kommer att blinka de LED.

#!usr/bin/env/ python
#parpadea.py
#importamos la libreria GPIO
import RPi.GPIO as GPIO 
#Importamos la libreria time
import time 
#Definimos el modo BCM 
GPIO.setmode(GPIO.BCM) 
#Ahora definimos el pin GPIO 17 como salida
GPIO.setup(17, GPIO.OUT) 
#Queremos que lo que contenga el for i in range se repita 5 veces
for i in range(0,5): 
        #Asignamos valor logico alto para encenderlo
               GPIO.output(17, GPIO.HIGH) 
        #Esperamos un segundo
               time.sleep(1)
        #Asignamos valor logico bajo para apagarlo
         GPIO.output(17, GPIO.LOW) 
        #Esperamos un segundo
         time.sleep(1) 
#Una vez termina las 5 repeticiones, liberamos el pin GPIO utilizado; en este caso el 17
GPIO.cleanup() 

Om du inte importerar biblioteket “tid“, kan inte lägga till den “sömn“, och om inte lägga till den “sömn” av en sekund mellan på och av, Det är fullt möjligt att våra ögon inte uppfattar flimmer.

Det är mycket viktigt att inte lägga till specialtecken i den scripts i Python, Därför kommentarerna bär inte accenter, Eftersom det gav tecken fel ogiltig.

I följande post Vi kommer att se hur man gör en enkel Webbprogrammet ger oss möjlighet att utföra dessa scripts, för att kunna styra den från alla enheter med webbläsare Web.

Om du som du kan följa mig på Twitter, Facebook, Google +, LinkedIn, eller dela den med knapparna under denna publikation, Om du har några frågor eller förslag tveka inte att kommentera.

Hjälp oss att nå fler läsare Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

16 tankar om"Raspberry PI och GPIO stift: Kontrollera en lysdiod med Bash och Python

  1. Jag har en fråga från nybörjare…
    eftersom motståndet av 330 Ohm och när man använder det?

    Används alltid för 330 När vi arbetar med RPI, eller det kan variera?

    En Välkomsttext och utmärkta blogg!!!

  2. Hej arbeta mig, och följ sedan instruktionerna till punkt och pricka med python, Du måste ge behörighet till filen för python?

    • Hej Peter,

      I princip ska det fungera, fel har bara gett behörighet till vissa människor men kör från webbprogrammet, som användaren har www-data som standard inte längre dessa behörigheter.

      Bara i fall försök köra “sudo chmod + x script.py” att göra den körbar, Även om inte så bör det fungera bara från terminal; Du kan lära mig om returnerar ett fel i terminalen för att köra skriptet??

      Tack så mycket för din kommentar.

  3. Bra, När jag kommer in skriptet i python, säger mig att arroba är ett SyntaxError vad som kan? Tack och hälsningar.

  4. Hej,
    Jag försöker slå på en LED genom python efter guide prover men det ger mig följande fel när jag kör koden det:

    importera RPi.GPIO som GPIO

    Fel:
    -bash: importera: beställa hittades inte

    Vet du varför felet är?

    Tack och Grattis på bloggen tjänar mig mycket!

    • Nano Hello, Tack för att kommentera.

      Det verkar att koden tolkas av Bash och inte av Python.

      Du är kör skriptet, eller raderna kod i terminalen direkt?

  5. Bra igen,
    vad jag inte förstår är den första raden i koden: #!usr/bin/env/python
    Vad är det?
    Jag ser att det fungerar bara med eller utan det

    • Nano Hello, Välkommen igen.

      Den linje som du nämner är det uttalande som ingår ofta i början av ett skript för att berätta terminalen där tolken som beställer bör du passerar, i detta fall, Python; för bash skulle vara följande:

      #!/bin/bash

      I detta fall, fungerar det med deklarationen och utan den eftersom filen har tillägget .py, men det är god praxis att alltid lägga till den.

      Jag hoppas att har rensat dina tvivel, tillbaka hit när du vill och tack så mycket för din kommentar 🙂

  6. Tack, handledningen är utmärkt, men jag har ett tvivel:

    de lämnar mig med följande fel:

    linje 12 importera:hittades inte
    linje 14 Syntaxfel: oväntade ord (förväntar sig “)”)

    Min kod är:

    #GPIO-setup.py
    ### BÖRJA INIT INFORMATION
    # Ger: GPIO-setup.ch
    # Krävs-Start: $remote_fs $syslog
    # Krävs-Stop: $remote_fs $syslog
    # Standard-Start: 2 3 4 5
    # Standard-Stop: 0 1 6
    # Kort-beskrivning: Setup-läge gpio
    # Beskrivning: Setup gpio 22/27/17/4 sätt ut
    ### AVSLUTA INIT INFO

    importera RPi.GPIO som GPIO
    #Definiera läge BCM
    GPIO.setmode(GPIO. BCM)
    #Vi nu definiera utgångsstift GPIO
    GPIO.setup(4, GPIO. UTE)
    GPIO.setup(17, GPIO. UTE)
    GPIO.setup(27, GPIO. UTE)
    GPIO.setup(22, GPIO. UTE)

    Någon aning???

    • Hej Leoctam, Tack för att kommentera.

      De första raderna ge till förstår att du försöker skapa en system-daemon, men de är kommenterat så det inte kommer att beaktas.

      Å andra sidan, den kod som du använder för att interagera med GPIO är Python, av vad du har att bo i ett skript .py som ska startas från din demon av systemet, eller använda Bash för att göra det som i första exemplet i den här guiden.

Lämna svar