Raspberry PI og GPIO pins: Kontrollere et LED med Bash og Python

I den foregående post, så vi var GPIO pins og nogle eksempler på praktiske anvendelser, I dag vil vi fokusere på driften af generelle formål pins, og lære at kontrollere dem med tolkens ordrer Bash og med Python.

proto&førte

Vil bruge en LED, en modstand af 330 ohm, Wire, og en Breadboard, eller lodde og en loddekolbe.

Vi skal også vores Hindbær har allerede Raspbian pre-installeret, Hvis din sag ikke, Du kan se hvordan man gør det følgende link fra den Register.

Ridning kredsløbet

Du kan lodde direkte i LED tråd og modstand som du vil se i den følgende diagram, Selv om det er meget bedre at bruge en Breadboard; Det er også meget vigtigt at kigge godt på bakkenbarter, som i den “Diagonal” inde i den Diode LED kombinerer de to pins til at montere kredsløbet, allerede at hvis du montere den baglæns vil ikke tænde.

Kredsløb kræves for at styre tænding af en LED diode.

Kredsløb, der er nødvendige for at kontrollere styrken af en LED diode.

Jeg har tænkt mig at bruge en Breadboard, og jeg vil anbefale at du bruger en, Der er nogle fra ca €4 og de gør det muligt at genbruge komponenter igen og igen uden at lodde dem, de interne forbindelser i en Breadboard de har tendens til at være følgende.

protocon

En Breadboard forbindelser.

Forbindelser mellem de Breadboard og den Hindbær de skal være som i følgende diagram, den GPIO Du kan komme spørgsmålet 3,3V tildele en logisk høj værdi.

Kredsløb på Breadboard.

Kredsløb, der er nødvendige for at kontrollere styrken af en LED diode.

Hej verden af GPIO med Bash

Når monteret kredsløb, Vi vil gøre, hvad jeg kalder en “Hej verden GPIO” i Bash kører følgende 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

For at slukke for LED, kan vi gøre det med følgende 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 

Dybest set, hvad vi gør med Bash er at skabe en Directory-hierarkiet i /sys/class/gpio og tilføje indhold til hver fil, vil blive behandlet som en variabel.

hierarki

Hierarki i mappen /sys/class/gpio.

Introduktion til Python

Vi har allerede bevist, at vores kredsløb fungerer korrekt og LED er det blevet fyret til at give en logisk høj værdi til variablen, Nu lad os se, hvordan vi kan gøre det samme Python, der vil gøre det muligt for os at planlægge vores web-applikationer til at styre input og output af den GPIO fra enhver enhed.

funcweb

Ved hjælp af webprogrammet.

Før du fortsætter, Jeg vil anbefale at du ser kapitler af den 1 til den 10 af Denne video tutorial fra Python kanal for YouTube af Kode lettet, Hvis så jeg ikke har meget idé om programmering i Python, Det kan komme til dig meget godt til at sætte dig ind i den kode, vi vil se mere videre og kommer til at forstå det.

Forskellige Pinouts for GPIO (BCM og bestyrelsen)

Der er to typer af pin nummerering, den fysiske nummerering eller tilstand BESTYRELSEN, og nummerering af chippen SoC Broadcom kontrollere dem., Vi vil bruge pinout i mode BCM, men lad os se på forskellen.

BCMvsBOARD

Hej verden af GPIO med Python

Efter at have set videoerne, og forskellige pinouts kan allerede forstår den grundlæggende kode til at gøre det “Hej verden GPIO” i Python.

Først skal vi hente alt hvad du behøver for at kontrollere den GPIO med Python, i Raspbian de er allerede installeret Python og bibliotekerne GPIO, men vi vil installere en ekstra pakke og opdatere systemet til at have den nyeste version.

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

Opdateret én gang, Lad os se, hvordan man kan tænde den LED med følgende script, Du kan for eksempel kalder enciende.py, og vi kan køre det som root med kommandoen “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 dette kan vi slå det fra, for eksempel kalde 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() 

Og med dette vil vi ringe til dig parpadea.py, Vi vil gøre blinke i 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() 

Hvis du ikke importerer biblioteket “tid“, kan ikke tilføje den “søvn“, og hvis ikke tilføje den “søvn” af et sekund mellem tænder og slukker, Det er meget muligt, at vores øjne ikke vil opfatte flimmer.

Det er meget vigtigt ikke at tilføje specialtegn i den scripts i Python, af denne grund kommentarerne ikke bære accenter, Da det gav karakter fejl ugyldig.

I den følgende post Vi vil se, hvordan man laver en simpel Webprogram tillade os at udføre disse scripts, at være i stand til at styre det fra enhver enhed med browser Web.

Hvis du som du kan følge mig på Twitter, Facebook, Google +, LinkedIn, eller dele det med knapper under denne publikation, Hvis du har spørgsmål eller forslag så tøv ikke at kommentere.

Hjælp os med at nå flere læsere Share on LinkedIn
LinkedIn
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on Google+
Google +
Email this to someone
e-mail

16 tanker om"Raspberry PI og GPIO pins: Kontrollere et LED med Bash og Python

  1. Jeg har et spørgsmål fra newbie…
    fordi modstanden i 330 ohm og hvornår du skal bruge det?

    Bruges altid til 330 Når vi arbejder med RPI, eller det kan variere?

    En hilsen og fremragende blog!!!

  2. Hej arbejde mig, og følg derefter vejledningen til punkt og prikke med python, du er nødt til at give tilladelser til filen af python?

    • Hej Peter,

      I princippet bør det arbejde, fejl har kun givet tilladelser til nogle mennesker, men kører fra webprogrammet, som brugeren har www-data som standard ikke længere disse tilladelser.

      Bare i tilfælde prøve løb “sudo chmod + x script.py” at gøre det eksekverbar, Selv om ikke så bør det arbejde lige fra terminal; Du kan lære mig hvis returnerer du en fejl i terminal køre scriptet??

      Mange tak for din kommentar.

  3. God, Når jeg indtaster scriptet i python, fortæller mig at arroba er en SyntaxError hvad der kan? Tak og hilsner.

  4. Hej,
    Jeg forsøger at tænde en LED gennem python efter guide prøver, men det giver mig følgende fejl, når jeg kører koden det:

    importere RPi.GPIO som GPIO

    Fejl:
    -bash: importere: ordren blev ikke fundet

    Kender du hvorfor fejlen er?

    Tak og tillykke med bloggen er tjener mig meget!

    • Nano Hello, Tak for at kommentere.

      Det lader til, at koden er fortolkes af Bash og ikke af Python.

      Du er kører scriptet, eller linier i kode i terminalen direkte?

        • Jeg er glad for, at du løst!!!

          Tak for kommentar, Tøv ikke med at gøre det, hvis du har spørgsmål; mellem læsere og jeg vil savne dig en hånd.

  5. God igen,
    Hvad jeg ikke forstår, er den første linje med kode: #!usr/bin/env/python
    Hvad er det?
    Jeg kan se at det virker kun med eller uden at det

    • Nano Hello, Velkommen igen.

      Den linje, du nævner er den erklæring, der er ofte inkluderet i begyndelsen af et script at fortælle terminalen, hvor tolken som ordrer skal du pass, i dette tilfælde, Python; for ville bash være som følger:

      #!/bin/bash

      I dette tilfælde, virker det med erklæringen og uden det da filen har filtypenavnet .py, men det er god praksis at altid tilføje det.

      Jeg håber at have ryddet din tvivl, tilbage her når som helst du ønsker og tak for din kommentar 🙂

  6. Tak, selvstudiet er fremragende, men jeg har en tvivl:

    de forlader mig med følgende fejl:

    linje 12 importere:ikke fundet
    linje 14 syntaksfejl: uventet ord (forventer “)”)

    Min kode er:

    #GPIO-setup.py
    ### BEGYNDE INIT INFO
    # Giver: GPIO-setup.ch
    # Kræves-Start: $remote_fs $syslog
    # Kræves-Stop: $remote_fs $syslog
    # Standard-Start: 2 3 4 5
    # Standard-Stop: 0 1 6
    # Resumé: Setup-tilstand gpio
    # Beskrivelse: Opsætning af gpio 22/27/17/4 ud af mode
    ### ENDE INIT INFO

    importere RPi.GPIO som GPIO
    #Vi definerer tilstanden BCM
    GPIO.setmode(GPIO. BCM)
    #Vi nu definere GPIO output pins
    GPIO.setup(4, GPIO. UD)
    GPIO.setup(17, GPIO. UD)
    GPIO.setup(27, GPIO. UD)
    GPIO.setup(22, GPIO. UD)

    Enhver idé???

    • Hej Leoctam, Tak for at kommentere.

      De første linjer giver til at forstå, at du forsøger at oprette en system-daemon, men de er kommenteret så det ikke vil blive taget i betragtning.

      På den anden side, den kode, som du bruger til at interagere med GPIO er Python, så du skal bo i et script .py, som vil være gældende fra dit system-daemon, eller bruge Bash for at gøre det som i det første eksempel i denne tutorial.

Skriv et svar