0% found this document useful (0 votes)
26 views19 pages

Raspberry 2014 - 02

This document provides Python code examples for controlling GPIO pins on the Raspberry Pi using the RPi.GPIO library. It includes code to set pin modes as input or output, read and write pin values, use PWM to control brightness, and interface with sensors like ultrasonic distance sensors. The examples demonstrate basic operations like blinking an LED as well as more complex functions like averaging multiple distance measurements from an ultrasonic sensor.

Uploaded by

Edwin Portuguez
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views19 pages

Raspberry 2014 - 02

This document provides Python code examples for controlling GPIO pins on the Raspberry Pi using the RPi.GPIO library. It includes code to set pin modes as input or output, read and write pin values, use PWM to control brightness, and interface with sensors like ultrasonic distance sensors. The examples demonstrate basic operations like blinking an LED as well as more complex functions like averaging multiple distance measurements from an ultrasonic sensor.

Uploaded by

Edwin Portuguez
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

1

Luis R. Agreda Corrales [email protected]


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'] = '[email protected]'
msg['To'] = '[email protected]'
# Autenticamos
mailServer = smtplib.SMTP('smtp.gmail.com',587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login("[email protected]","unindiaco")
# Enviamos
mailServer.sendmail("[email protected]","[email protected]",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'] = '[email protected]' # usuario
msg['To'] = '[email protected]'
# 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('[email protected]','unindiaco')

# usuario - password

# Enviamos de usuario a destinatario


mailServer.sendmail('[email protected]','[email protected]', 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'] = '[email protected]'
msg['To'] = '[email protected]'
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('[email protected]','unindiaco')
# Enviamos
mailServer.sendmail('[email protected]', '[email protected]', 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'] = '[email protected]'
msg['To'] = '[email protected]'
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('[email protected]','unindiaco')
# Enviamos
mailServer.sendmail('[email protected]','[email protected]', 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