Está en la página 1de 14

1

GPIO USANDO LOS COMANDOS DE LINUX O BASH

Para el ejemplo con comandos de Linux, se realiza la siguiente conexin:


GPIO25 RESISTOR DE 1 k LED -> GND

Se ejecutan los comandos en modo root, que es el nombre de usuario que tiene
todos los privilegios
Para pasar al modo administrativo o de superusuario se ejecuta el comando: sudo
su o sudo i. Para salir del modo root, se ejecuta el comando exit
Hay que exportar al espacio de usuario el nro. de pin que se va a usar para
salida: echo 25 > /sys/class/gpio/export con lo que se est escribiendo el nro.
25 al archivo export. Se crea un archivo de acceso GPIO, para el pin 22 fsico.
Se cambia de directorio con el comando: cd /sys/class/gpio/gpio25
Con el comando ls vemos que se tiene los archivos: active_low, direction, edge,
power, subsystem. uevent y value
value contiene el valor actual del pin GPIO25, escribiendo en direction
configuramos el pin como entrada o como salida
Para que el pin 25 funcione como salida se usa el comando: echo out > direction
Para encender el LED: echo 1 > value
Para apagar el LED: echo 0 > value
Para mostrar el nivel lgico del pin 25: cat value
Para liberar el pin 25: cd .. y echo 25 > unexport
Salimos del modo superusuario: exit

sudo su
echo 25 > /sys/classs/gpio/export
ls l /sys/class/gpio/gpio25/
echo out > /sys/class/gpio/gpio25/direction
echo 1 > /sys/class/gpio/gpio25/value
echo 0 > /sys/class/gpio/gpio25/value
cat /sys/class/gpio/gpio25/value
echo 25 > /sys/class/gpio/unexport
exit

Export crea una nueva carpeta para el pin exportado y crea archivos de cada una de
sus funciones de control (es decir, active_low , direction, edge , power, subsystem,
uevent y value) . Tras su creacin, los archivos de control pueden ser ledos por
todos los usuarios, pero slo pueden ser escritos por el administrador. Sin embargo,
una vez creado, es posible que los usuarios que no sean root, tambin puedan escribir
entradas a los archivos de control, cambiando la propiedad o los permisos de estos
archivos. Los cambios en la propiedad del archivo o permisos inicialmente deben
hacerse como root.
Parpadeo de un Led, archivo .sh:
sudo nano blink.sh
#!/bin/bash
echo Exportando pin $1
echo $1 > /sys/class/gpio/export
echo Configurando direcccion...
echo out > /sys/class/gpio/gpio$1/direction

3
#for ((;;))
for ((i=1; i<=7; i++))
do
echo Escribiendo un nivel alto...
echo 1 > /sys/class/gpio/gpio$1/value
sleep 0.5s
echo Escribiendo un nivel bajo...
echo 0 > /sys/class/gpio/gpio$1/value
sleep 1s
done
echo $1 > /sys/class/gpio/unexport
Se vuelve ejecutable con el comando:
sudo chmod +x blink.sh
Se ejecuta con el comando:
sudo ./blink.sh
Se termina la ejecucin con las teclas:
CTRL + C

4
GPIO USANDO PYTHON

En la Tabla se muestran los pines del conector GPIO de la Raspberry B:

Comprobamos la versin de la librera RPi.GPIO instalada:


sudo python
// versin 2.7.3
sudo python3
// versin 3.2.3
>>>import RPi.GPIO
>>>RPi.GPIO.VERSION
Ctrl + D, para salir de la consola de Python.
Funciones para salidas:
GPIO.setup(pin,GPIO.OUT,valor inicial)
GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH)
GPIO.setup(pin,GPIO.OUT,initial=GPIO.LOW)
Se puede omitir el estado inicial:
GPIO.output(pin,estado)
GPIO.output(pin,estado)

# estado: 1 GPIO.HIGH - True


# estado: 0 GPIO.LOW False

5
CIRCUITO PARA PROBAR SALIDAS DIGITALES:

A la base de cada transistor, se conecta un resistor de 1,5 k, como se observa en la parte inferior izquierda
de la anterior figura.

6
Se crea el archivo pr01.py con el editor nano: sudo nano pr01.py
Una vez escrito el cdigo, para grabar y salir del editor se tienen dos opciones:

CTRL+O
CTRL+X

ENTER CTRL+X
Y ENTER

pr01.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22,GPIO.OUT)
while True:
GPIO.output(22,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(22,GPIO.LOW)
time.sleep(0.5)
GPIO.cleanup()
Se ejecuta el programa con: sudo python pr01.0y

pr02.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(29,GPIO.OUT)
try:
while True:
GPIO.output(29,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(29,GPIO.LOW)
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()

pr03.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22,GPIO.OUT)

7
try:
while True:
GPIO.output(22,not GPIO.input(22))
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()
En la consola:
python
>>> range(7)
RESPUESTA:
[0,1,2,3,4,5,6]
>>>
CTRL + D para salir

pr04.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.OUT)
for i in range(9):
# range(n)=range(0,n)=[0,1,...,n-1]. Es decir, i=0,1,2,3,4,5,6,7,8
print(i+1)
# imprime del 1 al 9
GPIO.output(7,True)
time.sleep(0.5)
GPIO.output(7,False)
time.sleep(0.5)
GPIO.cleanup()

pr05.py
#!/usr/bin.env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22,GPIO.OUT)
i = 0
while i <= 9:
print(i)
GPIO.output(22,1)
time.sleep(0.5)
GPIO.output(22,0)
time.sleep(0.5)
i = i + 1
GPIO.cleanup()

# i = 0,1,2,3,4,5,6,7,8,9

En la consola:
python
>>> li = [11,12,13,15,16,18,22,7]
RESPUESTA:
>>>
>>> li
RESPUESTA:
[11,12,13,15,16,18,22,7]
>>>
>>> li[0]
RESPUESTA:
11
CTRL + D para salir

pr06.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
li = [11,12,13,15,16,18,22,7]
GPIO.setup(li,GPIO.OUT)
try:
while True:
GPIO.output(li,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(li,GPIO.LOW)
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()

pr07.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
li = [11,12,13,15,16,18,22,7]
GPIO.setup(li,GPIO.OUT)
try:
while True:
GPIO.output(li,(1,0,1,0,1,0,1,0))
time.sleep(0.5)
GPIO.output(li,(0,1,0,1,0,1,0,1))

9
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()

pr08.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
li = [11,12,13,15,16,18,22,7]
GPIO.setup(li,GPIO.OUT)
try:
while True:
for i in range(8):
# i=0,1,2,3,4,5,6,7
GPIO.output(li[i],GPIO.HIGH)
time.sleep(0.5)
GPIO.output(li[i],GPIO.LOW)
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.output(li,GPIO.LOW)
GPIO.cleanup()

pr09.py

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(22,GPIO.OUT)
def parpadeo():
try:
i = 1
while i <=7:
GPIO.output(22,True)
time.sleep(0.5)
GPIO.output(22,False)
time.sleep(0.5)
i = i + 1
except KeyboardInterrupt:
GPIO.cleanup()
parpadeo()

10
pr10.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
li = [11,12,13,15,16,18,22,7]
GPIO.setmode(GPIO.BOARD)
GPIO.setup(li,GPIO.OUT)
try:
while True:
for i in range(8):
GPIO.output(li[i],GPIO.HIGH)
time.sleep(0.5)
GPIO.output(li[i],GPIO.LOW)
except KeyboardInterrupt:
GPIO.output(li,GPIO.LOW)
GPIO.cleanup()

pr11.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
li = [11,12,13,15,16,18,22,7]
GPIO.setmode(GPIO.BOARD)
GPIO.setup(li,GPIO.OUT)
GPIO.output(li,GPIO.HIGH)
try:
while True:
for i in range(8):
GPIO.output(li[i],GPIO.LOW)
time.sleep(0.1)
GPIO.output(li[i],GPIO.HIGH)
except KeyboardInterrupt:
GPIO.output(li,GPIO.LOW)
GPIO.cleanup()

11
CIRCUITO PARA PROBAR ENTRADAS DIGITALES:
Para configurar un pin como entrada digital se usa las instrucciones:
GPIO.setup(pin,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(pin,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)

pr12.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(29,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(7,GPIO.OUT)
try:
while True:
if GPIO.input(29)==GPIO.LOW:
GPIO.output(29,GPIO.LOW)
else:
GPIO.output(29,GPIO.HIGH)
except KeyboardInterrupt:
GPIO.cleanup()

12
pr13.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(29,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(31,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(22,GPIO.OUT)
try:
while True:
if GPIO.input(29)==GPIO.HIGH:
GPIO.output(22,GPIO.HIGH)
if GPIO.input(31)==GPIO.LOW:
GPIO.output(22,GPIO.LOW)
except KeyboardInterrupt:
GPIO.cleanup()

pr14.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(29,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(31,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(22,0)
try:
while True:
if GPIO.input(29)==1:
GPIO.output(22,1)
if GPIO.input(31)==0:
GPIO.output(22,0)
except KeyboardInterrupt:
GPIO.cleanup()

add_event_detect.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(29, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(31, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.add_event_detect(29,GPIO.RISING,bouncetime=200)
GPIO.add_event_detect(31,GPIO.FALLING,bouncetime=200)
while True:

13
if GPIO.event_detected(29):
print('Pulsador en pin 29 Presionado')
if GPIO.event_detected(31):
print('Pulsador en pin 31 Presionado')
GPIO.cleanup()

callback.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(29,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(31,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(11,GPIO.OUTPUT)
GPIO.setup(18,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(22,GPIO.OUT,initial=GPIO.LOW)
def isr_uno(channel):
GPIO.output(18,not GPIO.input(18))
def isr_dos(channel):
GPIO.output(22,not GPIO.input(22))
GPIO.add_event_detect(29,GPIO.FALLING,callback=isr_uno,bouncetime=200)
GPIO.add_event_detect(31,GPIO.FALLING,callback=isr_dos,bouncetime=200)
try:
while True:
GPIO.output(11,not GPIO.input(11))
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()

wait_for_edge.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(29, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(31, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
GPIO.wait_for_edge(29, GPIO.RISING)
print("Pulsador en pin 29 se ha presionado")
GPIO.wait_for_edge(29, GPIO.FALLING)

14
print("Pulsador en pin 29 se ha soltado")
GPIO.wait_for_edge(31, GPIO.FALLING)
print('Pulsador en pin 31 se ha presionado')
GPIO.wait_for_edge(31, GPIO.RISING)
print('Pulsador en pin 31 se ha soltado')
GPIO.cleanup()

También podría gustarte