Compartir en facebook Compartir en google+ Compartir en twitter Compartir en pinterest Compartir en linkedin

Controlando GPIO con Python

Publicado en Junio de 2017

Es muy sencillo controlar las entradas y salidas de GPIO en una Orange Pi, y aquí vamos a montar un ejemplo muy sencillo. Se han usado un pin de entrada y tres de salida para mostrar la capacidad de la Orange Pi a través de un sencillo programa en Python. Un diodo fotosensible sensor de luz con relé, conectado a un pin del GPIO configurado como entrada y un laser que apunta directamente a él. Cuando el haz se corta, el Relé cambia su estado (en este caso, pasa a 0) y la Orange Pi al detectar el cambio, activa tres pines configurados como salida que encienden y apagan 3 leds. Vamos.

Que necesitas:

Vamos a necesitar una Orange Pi con Armbian y la librería de duxingkei33 instalada. Si no sabes como hacerlo, pásate por aquí. Con todo esto, también necesitarás "algo" que se active a la salida. En este ejemplo he querido usar un relé por las posibilidades que da y poder conectar cualquier aparato que funcione a 220v. También se podría haber usado un fotodiodo sencillo y conectar la salida al pin del GPIO (en este caso de la misma forma que conectamos el relé) y encender y apagar unos leds, o ejecutar un programa que haga otras cosas. Como siempre digo, el límite es tu imaginación y tus necesidades.

Este proyecto es muy sencillo y vamos a ir muy rápido. Primero un esquema para hacernos una idea de lo que queremos:

Todas las tierras (masas, GND's) deben ir conectadas juntas y la alimentación debe ir a 3v o 5v, asegúrate de la tensión de entrada de cada uno de los elementos. Al montarlo todo en una placa de pruebas quedará mas o menos así:

Y el programa en Python es muy sencillo. Crea un archivo llamado, por ejemplo, gpiolaser.py y copia este código:

#!/usr/bin/env python

import os
import sys

from time import sleep
from pyA20.gpio import gpio
from pyA20.gpio import port

rele = port.PA1
led0 = port.PA12
led1 = port.PA11
led2 = port.PA6

gpio.init()
gpio.setcfg(rele, gpio.INPUT)
gpio.setcfg(led0, gpio.OUTPUT)
gpio.setcfg(led1, gpio.OUTPUT)
gpio.setcfg(led2, gpio.OUTPUT)

try:
    print ("Pulsa CTRL+C para salir")
    while True:
        if gpio.input(port.PA1) == 0:
                gpio.output(led0, 1)
                sleep(0.1)
                gpio.output(led0, 0)
                #sleep(0.1)

                gpio.output(led1, 1)
                sleep(0.1)
                gpio.output(led1, 0)
                #sleep(0.1)

                gpio.output(led2, 1)
                sleep(0.1)
                gpio.output(led2, 0)
                #sleep(0.1)

                sleep(0.6)
except KeyboardInterrupt:
    print ("Saliendo")

Con las primeras lineas importamos las librerías necesarias. Con la linea 10 rele = port.PA1 asignamos a la variable rele el puerto PA1, que corresponde al pin 11 de la placa. Recordad que una cosa es el número de pin y otra el nombre con el que lo identifica la librería. Con las lineas 11 a 13, asignamos los pines para los Leds (PA12 -> pin 3, PA11 -> pin 5, PA6 -> pin 7). En la linea 15 iniciamos la librería y configuramos los pines como entradas o salidas. También he usado el pin 2 como +5v y el pin 6 como tierra.

En la linea 24, dentro del bucle infinito while True: se comprueba el estado de la entrada. Si está en nivel bajo (0), no se hace nada, pero cuando cambia el estado y se pone en alto (1), se ejecuta el siguiente código y cambia el estado de los pines PA12, PA11 y PA6, en este caso unos leds que se encienden y se apagan. Ejecuta el código con sudo python gpiolaser.py y prueba a cortar el haz de luz.

Con este ejemplo comprobamos lo fácil que es programar y usar el GPIO para operaciones de control, como lectura de niveles de sensores y lanzar eventos por software o hardware.

Espero que te haya sido de utilidad, no dudes en escribir un comentario si ves algún error o si puedo ayudarte.


Utiliza este espacio si quieres añadir algún comentario adicional o si tienes alguna duda.

Todos los comentarios serán validados antes de su publicación.

Nombre*

Email* Nunca será publicado ni compartido

Comentario*



Copyright © 2016. Todos los derechos reservados | Diseño JaviPSantos

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-ley 13/2012. Si continúa navegando consideramos que acepta el uso de cookies.

OK | Más información