Usando los GPIO con Python

Objetivos

 

  • Importar la libreria GPIO a Python.
  • Volver sobre las formas de numerar los pines.
  • Encender y apagar un LED desde Python.[/three-fourth] 
     

    Material requerido

     

    Vista mayor Raspberry Pi 3 o equivalente
    componente Un LED
    Resistencia de 1/4 wat Una resistencia de 1K
    cables M-F 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»]

  • Cuando conectes cables a los GPIO procura no equivocarte y fíjate bien en lo que haces sino quieres comprarte una nueva.
  • Usa cables con recubrimiento del tipo Dupont Macho-hembra por ejemplo, y no acerques cables sin proteger a tus GPIO (Y mucho menos un destornillador) porque puedes hacer un corto con facilidad.
    cables M-F
  • Una vez que conectes un cable hembra protegido, vuelve a mirar y asegúrate de que lo has conectado al pin que querías y no al de al lado.
  • Especial cuidado con los pines que uses para sacar 3V o 5V de tu Raspi. No dejes el otro extremo al aire: Asegúrate de conectarlo a algún sitio.
  • NO CONECTES NADA DE 5V si no estás seguro. Tu Raspberry funciona a 3.3V y meterle 5V en un pin puede suponer quemar el procesador central.[/fancy-ul] [/three-fourth]
  •  
    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:

    detalle y posicion

  • No es mala idea que imprimas este diagrama y hasta que lo plastifiques para tenerlo por la mesa si vas a andar conectando y desconectando cosas a tus GPIO.
  •  
    Y sin más el diagrama de conexión  de este sencillo ejemplo seria este:

    Blinking led

    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:

    Entorno Python 3

    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»]

  • Atentos a la jugada: La linea de arriba ilustra uno de esos casos en que es muy difícil no pensar en que los que diseñan estas cosas lo hacen a mala leche, porque por si no os habéis fijado la i de RPi es minúscula, lo que hace correr cantidad de consultas en los foros diciendo que les da un error, y que no tienen instaladas las librerías GPIO y buscando una solución para instalarlas a mano.
  • Ya sé que no se ve, pero es una minúscula que ha causado incontables sufrimientos a los primerizos en estas cosas (Yo incluido, para que os voy a engañar) Recordad que Python distingue, como C, mayúsculas y minúsculas, así que cuidado.[/fancy-ul] [/three-fourth].
  •  
    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 el resto de nuestro ejemplillo, vamos a usar la numeración del conector o modo BOARD y por eso nombraremos ese pin como el 12 pero si tienes el capricho de usar el modo BCM basta que lo reemplaces por 18 en todo lo que sigue.
  • Ya que estamos, tened especial cuidado con la cuestión de la nomenclatura de los pines cuando copies código directamente de Internet (Que os conozco cabritos) sin aseguraros de cual es el modo de nomenclatura de los pines.[/fancy-ul] [/three-fourth]
  •  
    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»]

  • De nuevo cuidado con que False y True, llevan la inicial en mayúscula, de lo contrario Python te devolverá de inmediato un alegre mensaje de error de los que tanto nos gustan a los masoquistas que disfrutamos enredando con cacharritos.[/fancy-ul] [/three-fourth]
  •  
    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

     

  • Vimos como asegurarnos de que estamos actualizados y con las librerías GPIO al día.
  • Vimos que varias maneras de numerar o referenciar los pines GPIO.
  • Hicimos una promera aproximacion sencilla al control de los GPIO y sus instrucciones
  • Encendimos nuestro primer LED con Rasbperry Pi.[/three-fourth][margin value=»5″ /]
  •  

    Deja una respuesta