Bringebær PI og GPIO pinner: Kontrollere en LED med Bash og Python

I forrige innlegg vi så var GPIO pinnene og eksempler på praktiske anvendelser, I dag vil vi fokusere på drift av generell pins, og lære å kontrollere dem med tolkens bestillinger Bash og med Python.

proto&ledet

Bruker en LED, en motstand av 330 ohm, wire, og en Brødfjel, eller loddetinn og lodding jern.

Vi må også våre Bringebær tenga ya Raspbian forhåndsinstallert, Hvis saken ikke, Du kan se hvordan du gjør det i følgende kobling fra den Directory.

Riding krets

Du kan lodde direkte i LED Wire og motstand som du vil se i følgende diagrammet, Selv om det er mye bedre å bruke en Brødfjel; Det er også svært viktig å se på kinnskjegg, som i den “Diagonal” innsiden av den diode LED kombinerer de to pinnene for å montere krets, allerede som hvis du montere den bakover vil ikke slå på.

Krets for å kontrollere tenningen av en LED diode.

Krets for å kontrollere kraften i en LED diode.

Jeg skal bruke en Brødfjel, og jeg anbefaler at du bruker en, Det er noen fra ca €4 og å gjenbruke komponenter igjen og igjen uten å lodde dem, de interne tilkoblingene til en Brødfjel de pleier å være følgende.

protocon

En brødfjel tilkoblinger.

Sammenhengene mellom den Brødfjel og Bringebær de må være i følgende diagram, den GPIO Du kan nå problemet 3,3V tilordne en logisk høy verdi.

Circuito en Protoboard.

Krets for å kontrollere kraften i en LED diode.

Hei verden av GPIO med Bash

Når montert krets, Vi skal gjøre det jeg kaller en “Hei verden GPIO” i Bash ejecutando el siguiente skriptet.

#!/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

Hvis du vil deaktivere LED, kan vi gjøre det med følgende skriptet.

#!/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 

Innerst inne hva vi gjør med Bash er å skape en Directory-hierarkiet i /sys/klassen/gpio y añadir contenido a cada archivo que será tratado después como una variabel.

jerarquia

Hierarki innenfor mappen /sys/class/gpio.

Introduksjon til Python

Vi har allerede bevist at vår krets fungerer og LED har det vært avfyrt for å gi en logisk høy verdi til variabelen, Nå la oss se hvordan vi kan gjøre det samme i Python, som vil tillate oss å planlegge våre Web-applikasjoner kontrollere innganger og utganger av den GPIO fra enhver enhet.

funcweb

Bruker webprogrammet.

Før du fortsetter, Jeg anbefaler at du ser kapitlene i den 1 til den 10 av Denne videoen opplæringen fra Python kanalen YouTube av Koden lettere, Hvis så jeg ikke har mye ideen om programmering i Python, os puede venir muy bien para familiarizaros con el código que vamos a ver mas adelante y llegar a entenderlo.

Forskjellige Pinouts av GPIO (BCM og styret)

Det finnes to typer pin nummerering, den fysiske nummerering eller modus STYRET, og nummereringen av chip SoC Broadcom que los controla, Vi skal bruke pinout i modus BCM, men la oss se på forskjellen.

BCMvsBOARD

Hei verden av GPIO med Python

Etter å ha sett videoene, og ulike pinouts kan allerede forstå grunnleggende koden å gjøre det “Hei verden GPIO” i Python.

Først skal vi laste ned alt du trenger å kontrollere den GPIO med Python, i Raspbian ya vienen instalados Python og biblioteker GPIO, men vi skal installere en tilleggspakke og oppdatere systemet å har den nyeste versjonen.

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

Oppdateres når, La oss se hvordan du slår på den LED med følgende skriptet, Du kan for eksempel kalle enciende.py, y podemos ejecutarlo como root con el comando “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) 

Dette kan vi slå den av, for eksempel 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 vi vil ringe deg parpadea.py, Vi vil gjøre blinker på 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 legge til den “søvn“, og hvis ikke legge den “søvn” sekundet mellom på og av, Det er mulig at våre øyne ikke vil oppfatte flimmer.

Det er veldig viktig ikke å legge til spesialtegn i den skript i Python, Derfor kommentarer ikke bære aksenter, Siden det ga tegn feil ugyldig.

I følgende oppføring Vi vil se hvordan å lage en enkel Web-applikasjon tillate oss å utføre disse skript, å kunne kontrollere den fra enhver enhet med nettleser Web.

Hvis du liker du kan følge meg på Twitter, Facebook, Google +, LinkedIn, eller dele det med knappene under denne publikasjonen, Hvis du har spørsmål eller forslag ikke nøl med å kommentere.

Hjelp oss å nå flere lesere Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

16 tanker om"Bringebær PI og GPIO pinner: Kontrollere en LED med Bash og Python

  1. tengo una duda de novato
    porque la resistencia de 330 ohmnios y cuando hay que utilizarla?

    Siempre se utilizan de 330 cuando trabajamos con RPI, o puede variar?

    Un saludo y excelente blog!!!

  2. Hola no me funciona, y pues segui los pasos al pie de la letra con python, hay que darle permiso de ejecucion al archivo de python?

    • Hola Pedro,

      En principio debería funcionar, solo les ha dado error por permisos a algunas personas pero ejecutándose desde la aplicación web, ya que el usuario www-data por defecto no tiene dichos permisos.

      Por si acaso pruebe ejecutandosudo chmod +x script.pypara volverlo ejecutable, aunque sin serlo debería funcionar igual desde terminal; puede enseñarme si le devuelve algún error en la terminal al ejecutar el script¿?

      Muchas gracias por su comentario.

  3. bra, cuando introduzco el script en python, me indica que el arroba es un SyntaxError ¿Qué puede ser? Gracias y saludos.

  4. hallo,
    estoy intentando encender un LED a través de python siguiendo la guía que muestras pero me da el siguiente error cuando ejecuto el código éste:

    importere RPi.GPIO som GPIO

    Error:
    -bash: import: no se encontró la orden

    ¿Sabes a qué se debe este error?

    Gracias y enhorabuena por el blog me está sirviendo de mucho!

    • Hei Nano, Takk for kommentar.

      Parece que el código está siendo interpretado por Bash y no por Python.

      ¿Estás ejecutando el script, o las líneas de código en la terminal directamente?

      • Hmm lo estaba ejecutando desde el terminalerror gordo jeje (soy nuevo con la raspberry me lo puedo permitir todavía =P )

        • Me alegro de que se haya solucionado!!!

          Takk for kommentar, no dudes en hacerlo si tienes cualquier duda; entre los lectores y yo te echaremos una mano.

  5. Buenas de nuevo,
    algo que no entiendo es la primera línea de código: #!usr/bin/env/ python
    ¿para qué sirve?
    veo que funciona igual con o sin ella

    • Hei Nano, bienvenido otra vez.

      La línea que comentas es la declaración que se suele incluir al inicio de un script para indicarle a la terminal donde se encuentra el intérprete al que debe pasarle las órdenes, en este caso Python; para bash sería la siguiente:

      #!/bin/bash

      En este caso funciona con la declaración y sin ella puesto que el archivo tiene extensión .py, pero es una buena práctica añadirla siempre.

      Jeg håper å ha ryddet tvil, vuelve por aquí cuando quieras y muchas gracias por tu comentario 🙂

  6. takk, el tutorial esta excelente, pero tengo una duda:

    me salen los siguientes errores:

    linea 12 import:not found
    linea 14 syntax error: word unexpected (expecting “)”)

    Mi codigo es:

    #gpio-setup.py
    ### BEGIN INIT INFO
    # Provides: gpio-setup.ch
    # Required-Start: $remote_fs $syslog
    # Required-Stop: $remote_fs $syslog
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Setup mode gpio
    # Description: Setup gpio 22/27/17/4 mode out
    ### END INIT INFO

    importere RPi.GPIO som GPIO
    #Definimos el modo BCM
    GPIO.setmode(GPIO. BCM)
    #Ahora definimos los pines GPIO como salida
    GPIO.setup(4, GPIO. UT)
    GPIO.setup(17, GPIO. UT)
    GPIO.setup(27, GPIO. UT)
    GPIO.setup(22, GPIO. UT)

    Alle begrep???

    • Hola Leoctam, Takk for kommentar.

      Las primeras líneas dan a entender que estas intentando crear un demonio del sistema, pero están comentadas por lo que no se tendrán en cuenta.

      på den andre siden, el código que estás utilizando para interactuar con los GPIO es Python, por lo que debes alojarlo en un script .py que será invocado desde tu demonio del sistema, o utilizar Bash para ello como en el primer ejemplo de este tutorial.

Legg inn en kommentar