Controlando GPIO con Python
Publicado en Junio de 2017Es 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 # -*- coding: iso-8859-15 -*- # author : "javier pérez santos para orangepiweb.es" # credits : "javier pérez santos, orangepiweb.es" # copyright : "Copyright 2017, orangepiweb.es" """ ___ ____ ___ __ _ / _ \ _ __ __ _ _ __ __ _ ___| _ \(_) \ / /__| |__ ___ ___ | | | | '__/ _` | '_ \ / _` |/ _ \ |_) | |\ \ /\ / / _ \ '_ \ / _ \/ __| | |_| | | | (_| | | | | (_| | __/ __/| | \ V V / __/ |_) | __/\__ \ \___/|_| \__,_|_| |_|\__, |\___|_| |_| \_/\_/ \___|_.__(_)___||___/ |___/ Controlando GPIO con 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.
No olvides añadir tu distribución y tu placa.
Todos los comentarios serán validados antes de su publicación.
Tur3te
Llevo dias documentándome para intentar iniciar un proyecto basado en orange pi zero y el cual consiste en crear una máquina de juegos portátil de escaso tamaño, como antiguas portátiles. He observado que orange pi admite ciertas pantallas tft spi conectadas en varios puntos al gpio, pero me encuentro también con la dificultad aunque esto sea posible que los botones no tengo muy claro si podría también conectarlos y programarlos en el gpio. De poder hacerse de esta manera me evito tener que introducir en el escaso espacio controladores tanto d e pantalla como de controles. Gracias de antemano ;)
Administrador OrangePiWeb.es
Hola. Creo que lo que buscas es Retropie:
https://retropie.org.uk/
Tienen muy biena documentación, así que yo no puedo aportar mucho más.
Lalo Acuña
Hola. Tendrás algún ejemplo de como utilizar esta librerias (y que pines) para controlar un servo (estoy tratando de utilizar un SG90), solo he encontrado ejemplos con la raspberry pi y la libreria RPi.GPIO.
Administrador OrangePiWeb.es
Hola Lalo. Uno de las grandes deficiencias de Orange Pi es que no hay una librería capaz de leer PWM (modulación por pulsos) para (por ejemplo) mover con eficiencia un servo. Mira este vídeo:
https://www.youtube.com/watch?v=P8X0HuofVo8
Ese tembleque es lo que se obtiene, y eso no nos vale. Yo he conseguido moverlo a través de un Arduino:
http://orangepiweb.es/orange-pi-arduino.php
Estoy seguro de que cualquier día habrá un librería capaz, pero de momento yo no la he encontrado. Si encuentras algo, no dudes en contárnoslo.
Saludos
Pi
Cuando intento inicializar con gpio.init() me dice que el acceso está denegado, alguna solución?
Administrador OrangePiWeb.es
Hola Pi. ¿En que momento te dice eso? Si has seguido los pasos debería ejecutarse sin problemas. Saludos
Copyright © 2024 desde 2016. Todos los derechos reservados | Diseño JaviPSantos