You are on page 1of 19

1

Luis R. Agreda Corrales luisagreda@gmail.com


GPIO 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)
GPIO.output(pin,estado)
GPIO.output(pin,estado)

#estado: 1 GPIO.HIGH - True


#estado: 0 GPIO.LOW False

3
pr_01.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.OUT)
while True:
GPIO.output(7,GPIO.HIGH)
time.sleep(0.5)
GPIO.output(7,GPIO.LOW)
time.sleep(0.5)
GPIO.cleanup()

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

pr_01b.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.OUT)
try:
while True:
GPIO.output(7,not GPIO.input(7))
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()

pr_02.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(7):
# range(n)=range(0,n)=[0,1,...,n-1]. Es decir, i=0,1,2,3,4,5,6
GPIO.output(7,True)
time.sleep(0.5)
GPIO.output(7,False)
time.sleep(0.5)
print(i)
GPIO.cleanup()

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

pr_04.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)

# i = 1,2,3,4,5,6,7

5
GPIO.output(li,GPIO.LOW)
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()

pr_4a.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))
time.sleep(0.5)
except KeyboardInterrupt:
GPIO.cleanup()

pr_05.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):
# 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:
pass
GPIO.output(li,GPIO.LOW)
GPIO.cleanup()

pr_06.py

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

pr_07.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(1)
GPIO.output(li[i],GPIO.LOW)
except KeyboardInterrupt:
pass
GPIO.output(li,GPIO.LOW)
GPIO.cleanup()

7
ENTRADAS

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

pr_09.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)

8
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(12,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(7,GPIO.OUT)
try:
while True:
if GPIO.input(11)==GPIO.HIGH:
GPIO.output(7,GPIO.HIGH)
if GPIO.input(12)==GPIO.LOW:
GPIO.output(7,GPIO.LOW)
except KeyboardInterrupt:
GPIO.cleanup()

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

add_event_detect.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(12, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.add_event_detect(11,GPIO.RISING,bouncetime=200)
GPIO.add_event_detect(12,GPIO.FALLING,bouncetime=200)
while True:
if GPIO.event_detected(11):
print('Pulsador 11 Presionado')
if GPIO.event_detected(12):
print('Pulsador 12 Presionado')
GPIO.cleanup()

callback.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(12,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(22,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(18,GPIO.OUT,initial=GPIO.LOW)
def isr_uno(channel):
GPIO.output(22,not GPIO.input(22))
def isr_dos(channel):
GPIO.output(18,not GPIO.input(18))
GPIO.add_event_detect(11,GPIO.RISING,callback=isr_uno,bouncetime=200)
GPIO.add_event_detect(12,GPIO.FALLING,callback=isr_dos,bouncetime=200)
try:
while True:
GPIO.output(7,not GPIO.input(7))
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(11, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(12, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
GPIO.wait_for_edge(11, GPIO.RISING)
print(Button 1 Pressed)
GPIO.wait_for_edge(11, GPIO.FALLING)
print(Button 1 Released)
GPIO.wait_for_edge(12, GPIO.FALLING)
print(Button 2 Pressed)
GPIO.wait_for_edge(12, GPIO.RISING)
print(Button 2 Released)
GPIO.cleanup()

10

PWM en RPi.GPIO

Para crear una instancia PWM:


p = GPIO.PWM(channel,frequency)
Para iniciar PWM:
p.start(dc)

# donde dc es el ciclo de trabajo (0.0 <= dc <= 100.0)

Para cambiar la frecuencia:


p.ChangeFrequency(freq)

# donde freq es la nueva frecuencia en Hz

Para cambiar el ciclo de trabajo:


p.ChangeDutyCycle(dc)
Para detener PWM:
p.stop()

# donde dc es el ciclo de trabajo 0.0 <= dc <= 100.0

11
pr_12.py
#!/usr/bin/env python
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
p = GPIO.PWM(12,50) # channel=12 frequency=50Hz
p.start(0)
try:
while 1:
for dc in range(0,101,5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
for dc in range(100,-1,-5):
p.ChangeDutyCycle(dc)
time.sleep(0.1)
except KeyboardInterrupt:
pass
p.stop()
GPIO.cleanup()

pr_13.py
#!/usr/bin/env python
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12,GPIO.OUT)
p = GPIO.PWM(12,1)
# pin=12 frecuencia=1 Hz
p.start(50)
# 50% de ciclo de trabajo
input('Presione una tecla para terminar: ')
p.stop()
GPIO.cleanup()

pr_14.py
#!/usr/bin/env python
import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BCM)
pinLed = 18
frecuencia = 50.0
ciclo_trabajo = 0.0
gpio.setup(pinLed, gpio.OUT)
p = gpio.PWM(pinLed,frecuencia)
p.start(ciclo_trabajo)
try:

12
while True:
for i in range(101):
p.ChangeDutyCycle(i)
time.sleep(0.02)
for i in range(101):
p.ChangeDutyCycle(100-i)
time.sleep(0.02)
except KeyboardInterrupt:
pass
p.stop()
gpio.cleanup()

pr_15.py
#!/usr/bin/env python
import smtplib
# Importamos los modulos necesarios
from email.mime.text import MIMEText
# Creamos el mensaje
msg = MIMEText("Contenido del e-mail a enviar")
# Conexion con el server
msg['Subject'] = 'Asunto del correo'
msg['From'] = 'luisagredaraspi@gmail.com'
msg['To'] = 'luisagreda@gmail.com'
# Autenticamos
mailServer = smtplib.SMTP('smtp.gmail.com',587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login("luisagredaraspi@gmail.com","unindiaco")
# Enviamos
mailServer.sendmail("luisagredaraspi@gmail.com","luisagreda@gmail.com",msg.as_string())

# Cerramos conexion
mailServer.close()

13
SENSOR DE ULTRASONIDO

pr_16.py
#!/usr/bin/env python
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO_TRIGGER = 11
GPIO_ECHO
= 12

14
GPIO.setup(GPIO_TRIGGER,GPIO.OUT)
GPIO.setup(GPIO_ECHO,GPIO.IN)
GPIO.output(GPIO_TRIGGER, False)

# Trigger
# Echo

time.sleep(1)
print 'Inicio de la medicion'
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()
while GPIO.input(GPIO_ECHO)==0:
start = time.time()
while GPIO.input(GPIO_ECHO)==1:
stop = time.time()
tiempo = stop - start
distancia = (tiempo * 34300)/2
print "Distancia : %.1f cm" % distancia
GPIO.cleanup()

15
pr_17.py
#!/usr/bin/env python
import time
import RPi.GPIO as GPIO
def measure():
# This function measures a distance
stop=0
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()
while GPIO.input(GPIO_ECHO)==0:
start = time.time()
while GPIO.input(GPIO_ECHO)==1:
stop = time.time()
elapsed = stop-start
distancia = (elapsed * 34300)/2
return distancia
def measure_average():
distancia = 0
a = [0,1,2,3,4,5,6,7,8,9]
for i in range(0,10,1):
a[i] = measure()
distancia = distancia + a[i]
distancia = distancia / 10
return distancia
# Main Script
GPIO.setmode(GPIO.BOARD)
GPIO_TRIGGER = 11
GPIO_ECHO
= 12
GPIO_LED
= 7
print "Ultrasonic Measurement"
GPIO.setup(GPIO_TRIGGER,GPIO.OUT) # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN)
# Echo
GPIO.setup(GPIO_LED,GPIO.OUT)
GPIO.output(GPIO_TRIGGER, False)
start=0
stop=0
try:
while True:
resultado = measure_average()
print "Distancia : %.1f" % resultado
entero = int(round(resultado))
if (entero > 10):
GPIO.output(GPIO_LED,GPIO.HIGH)

16
else:
GPIO.output(GPIO_LED,GPIO.LOW)
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()

SENSOR DE MOVIMIENTO

pr_18.py
#!/usr/bin/python#!
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO_PIR = 26
GPIO.setwarnings(False)
GPIO.setup(GPIO_PIR,GPIO.IN)
print 'Inicialiando PIR (CTRL-C para salir)'
try:

17
print 'Espera de cinco segundos ...'
time.sleep(5)
print " Listo"
# Se repite el ciclo while, hasta que se presione CTRL-C
while True :
if GPIO.input(GPIO_PIR):
print("Se detecta presencia")
time.sleep(0.5)
else :
print("No hay presencia")
time.sleep(0.5)
except KeyboardInterrupt:
pass
print " Quit"
GPIO.cleanup()

ENVO DE CORREOS POR GMAIL


pr_19.py
#!/usr/bin/env python
# Importamos smtplib
import smtplib
# Importamos los modulos necesarios para enviar un correo simple
from email.mime.text import MIMEText
# Creamos el mensaje
msg = MIMEText('Este es el contenido del correo')
msg['Subject'] = 'Tienes un correo'
msg['From'] = 'luisagredaraspi@gmail.com' # usuario
msg['To'] = 'luisagreda@gmail.com'
# destinatario
# Se establece la conexion con servidor smtp de gmail
mailServer = smtplib.SMTP('smtp.gmail.com',587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login('luisagredaraspi@gmail.com','unindiaco')

# usuario - password

# Enviamos de usuario a destinatario


mailServer.sendmail('luisagredaraspi@gmail.com','luisagreda@gmail.com', msg.as_string())

# Cerramos conexion
mailServer.close()

pr_20.py
#!/usr/bin/env python
import smtplib
import RPi.GPIO as GPIO

18
import time
# Importamos los modulos necesarios para enviar un correo simple
from email.mime.text import MIMEText
# Sistema de numeracion - pin 26 entrada
GPIO.setmode(GPIO.BOARD)
GPIO_PIR = 26
GPIO.setwarnings(False)
GPIO.setup(GPIO_PIR,GPIO.IN)
# Creamos el mensaje
msg = MIMEText('Este es el contenido del correo')
msg['Subject'] = 'Tienes un correo'
msg['From'] = 'luisagredaraspi@gmail.com'
msg['To'] = 'luisagreda@gmail.com'
print 'Alarma (CTRL-C para terminar)'
try:
print 'Inicializando PIR ...'
time.sleep(5)
print 'Listo'
while True:
if GPIO.input(GPIO_PIR):
print('Se detecta presencia')
time.sleep(0.5)
# Se establece la conexion con servidor smtp de gmail
mailServer = smtplib.SMTP('smtp.gmail.com',587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login('luisagredaraspi@gmail.com','unindiaco')
# Enviamos
mailServer.sendmail('luisagredaraspi@gmail.com', 'luisagreda@gmail.com', msg.as_string())

# Cerramos conexion
mailServer.close()
else:
#
print("No hay presencia")
time.sleep(0.5)
except KeyboardInterrupt:
pass
print 'Quit'
GPIO.cleanup()

pr_21.py
##!/usr/bin/env python
import smtplib
import RPi.GPIO as GPIO
import time

19
# Importamos los modulos necesarios para enviar un correo simple
from email.mime.text import MIMEText
# Sistema de numeracion - pin 26 entrada
GPIO.setmode(GPIO.BOARD)
GPIO_PIR = 26
GPIO.setwarnings(False)
GPIO.setup(GPIO_PIR,GPIO.IN)
# Creamos el mensaje
msg = MIMEText('Este es el contenido del correo')
msg['Subject'] = 'Tienes un correo'
msg['From'] = 'luisagredaraspi@gmail.com'
msg['To'] = 'luisagreda@gmail.com'
alerta = 0
# Funcion de atencion de interrupcion
def isr(channel):
alerta = 1
print('Se detecta presencia')
time.sleep(0.5)
# Se establece la conexion con servidor smtp de gmail
mailServer = smtplib.SMTP('smtp.gmail.com',587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login('luisagredaraspi@gmail.com','unindiaco')
# Enviamos
mailServer.sendmail('luisagredaraspi@gmail.com','luisagreda@gmail.com', msg.as_string())

# Cerramos conexion
mailServer.close()
# Configuracion de la interrupcion, pin 26 flanco de subida
GPIO.add_event_detect(26,GPIO.RISING,callback=isr,bouncetime=200)
print 'Alarma (CTRL-C para terminar)'
print 'Inicializando PIR ...'
time.sleep(5)
print 'Listo'
try:
while True:
if alerta:
isr()
print("No hay presencia")
time.sleep(1)
alerta = 0
except KeyboardInterrupt:
pass
mailServer.close()
GPIO.cleanup()

You might also like