Objetivos
Material requerido
Raspberry Pi 3 o equivalente | |
Un LED | |
Una resistencia de 1K | |
Unos cables Dupont Macho-Hembra protegidos |
Python y GPIO
Ha llegado el momento que todos esperábamos. Vamos a ver cómo podemos usar la Raspberry Pi para influir y leer valores del mundo exterior. Y para eso vamos a empezar viendo cómo podemos manejar los GPIO o pines de acceso al exterior que nuestra muy querida Raspberry dispone, y de los que empezamos a hablar en la sesión anterior.
La idea de esta sesión es empezar tranquilamente con un proyecto de lo más sencillo, encendiendo y apagando manualmente un pequeño LED conectado a un pin de nuestro conector externo, para irnos iniciando en todo este asunto, sin nervios.
Pero antes de empezar, voy a insistir (A riesgo de ponerme pesado) que tienes que tener el mayor cuidado con no equivocarte de pines porque tu Raspi es una virguería, pero muy poco amiga de bromas y si no pones cabeza en lo que estás haciendo la puedes quemar con bastante facilidad.
No quiero meteros miedo, podéis usarla sin problemas para controlar cosas conectadas a los GPIO, pero no tiene ninguna protección y si hacéis las cosas atolondradamente os acordareis de estas advertencias y tendrás 40 euros menos en el bolsillo.
Pero por si acaso vamos a poner aquí algunas precauciones básicas que necesitas tener en cuenta:
[one-fourth] [/one-fourth][three-fourth last][margin value=»5″ /][fancy-ul style=»rounded-tick»]
[three-fourth last][margin value=»5″ /][fancy-ul style=»rounded-tick»]
Siempre que vamos a empezar con algo en la Raspi conviene asegurarnos de que tenemos al día las librerías necesarias, y por eso es buena costumbre empezar actualizando todo:
sudo apt-get update sudo apt-get upgrade
Como suele ocurrir si hace un tiempo que no habéis hecho esto encontrara algunas cosas que os propondrá actualizar. Hacedlo sin más y podemos continuar, aunque en realidad de lo que quería asegurarme es que tenéis al día las librerías Python para acceder a los GPIO, que podéis comprobar así:
sudo apt-get install python-dev sudo apt-get install pyton-rpi.gpio
Normalmente en los últimos tiempos vienen instaladas y configuradas de serie y si lanzas esos comandos, lo normal es que te diga que ya están instaladas en su ultima versión. Y eso es todo, ya podemos empezar nuestro pequeño montaje de pruebas.
Esquema de protoboard
Las conexiones son triviales. Un sencillo led de 5V y una resistencia de 1KΩ. Tened en cuenta que en esta ocasión vamos a alimentar el LED con 3.3V (Que es lo que proporciona un pin de la Raspi)y que la intensidad que obtendremos será:
3.3 / 1K Ω = 3 mA
No es mucho, pero suficiente para iluminar correctamente el LED aunque su brillo no será para tirar cohetes. Siempre es buena idea tener cerca una impresión de los pines y sus funciones cuando vas a conectar algo a los GPIO y por eso os voy a repetir aquí el diagrama de la sesión anterior:
Y sin más el diagrama de conexión de este sencillo ejemplo seria este:
No tiene dificultad más allá de equivocaros con los pines. Fijaros que hemos conectado GND al pin 6 de la Raspberry y vamos a usar el pin 12 como control del encendido mediante una resistencia intermedia.
El programa de control
Lo primero vamos abrir el IDLE de Python 3 para empezar nuestro programa:
Vamos a empezar usando comandos manuales, o sea sin guardarlo en programa, para ver como usamos los comandos directamente y más adelante jugaremos con el programa general (Para esto tenemos un interprete como Dios manda).
Para empezar, tenemos que importar la librería que nos permite manejar los GPIO desde Python (Que espero os venga instalada de serie)
import RPi.GPIO as gpio
[one-fourth] [/one-fourth][three-fourth last][margin value=»5″ /][fancy-ul style=»rounded-tick»]
[three-fourth last][margin value=»5″ /][fancy-ul style=»rounded-tick»]
No nos importa demasiado en estos primeros momentos, de nervios con Python y GPIO entrar en detalles de lo que significa esa primera línea. Baste entender que al importar la librería GPIO, creamos un objeto llamado gpio que la representa y a cuyo través vamos a acceder a los pines correspondientes
Ahora es un buen momento para recordaros de que existen al menos dos formas diferentes de numerar los pines del GPIO (Como comentábamos en la sesión anterior). Según los pines del conector externo, o según los pines del chip interno.
No hay mayor problema en elegir uno u otro modo y ya sois mayorcitos para elegir lo que queréis, pero una vez elegido aseguraros de que usáis esa nomenclatura, y para ello tenemos que informar a nuestra Python de cuál de los dos modos vamos a usar.
A mí me parece más sencillo usar la numeración exterior de los pines por lo que el comando a usar para establecer esto sería:
gpio.setmode(gpio.BOARD)
Pero si te gusta más usar la numeración del chip BROADCOM, podrías hacer:
gpio.setmode(gpio.BCM)
Insistimos, no hay mayor problema o diferencia entre uno y otro, pero ten cuidado o vas tener problemas para conseguir que tus programas funcionen (Y peor aún, que enchufes pines donde no debes). En el caso de nuestro ejemplo hemos conectado el pin de control del LED al pin 12 según la numeración del conector externo (BOARD) o al pin 18 según la numeración del chip (Modo BCM de broadcom)
[one-fourth] [/one-fourth][three-fourth last][margin value=»5″ /][fancy-ul style=»rounded-tick»]
[three-fourth last][margin value=»5″ /][fancy-ul style=»rounded-tick»]
Para los que venís del mundo Arduino lo que viene a conti
nuación os va a parecer de lo más normal. Hay que definir que vamos a usar el pin 12 como una salida y después escribir en el True, para levantar la señal y encender el LED. Escribiendo False en el pin, bajamos la señal y lo apagamos claro está.
gpio.setmode(gpio.BOARD) gpio.setup(12, gpio.OUT) gpio.output(12, True)
La primera línea establece la forma de numeración de los pines. La segunda informa nuestra Raspberry de que queremos usar el pin 12 como de salida (OUT) , y la tercera linea le ordena que ponga ese pin en valor alto, es decir, que le de tensión (True = HIGH).
Cuando escribas el último comando, el LED se iluminará (Siempre y cuando no haya líos de cables o nomenclaturas). Para apagarlo basta con que hagas:
gpio.output(12, False)
[one-fourth] [/one-fourth][three-fourth last][margin value=»5″ /][fancy-ul style=»rounded-tick»]
[three-fourth last][margin value=»5″ /][fancy-ul style=»rounded-tick»]
Bueno de momento creo que vale la pena que lo dejemos aquí para ir asimilando ideas. No hemos hecho un programa, que será el tema de la próxima sesión, porque inicialmente tenía mucho interés en que vieras que manejar la Raspberry no es mucha más complicado, ni conceptualmente diferente a nuestros queridos Arduinos,
Basta con importar las librerías y comprender un poco la idea básica. En las próximas sesiones iremos aprendiendo instrucciones de Python y preparando los primeros programas que nos permitan sacarle partido, pero ya disponiendo de los pines GPIO para jugar con lo que nos apetezca de electrónica y evitar en la medida de lo posible dedicarnos a calcular secuencias de Fibonaccio o paridas parecidas para ilustrar el aprendizaje de Python (Aunque alguna caerá, ya lo creo. No vais a poder evitarlo)
Por cierto, no desmontéis el circuito anterior porque, naturalmente, vamos a usarlo en la próxima sesión.
Resumen de la sesión