¿Nos ayudas a pagar el Hosting?

Compartir en facebook Compartir en twitter Compartir en linkedin

GPIO regleta de expansión de 40 pins

Publicado el 12/2/2016

Una de las maravillas de la Orange Pi es su conector GPIO (General Purpose Input / Output, Entrada / Salida de Propósito General). Esta placa tiene un conector de 40 pines (de forma muy similar al IDE de las placas base de ordenador) que sirve para manejar señales de entrada / salida, al que se puede conectar hardware externo con varios tipos diferentes de conexión en ellos. Existen:

  • GPIO pines que se pueden utilizar para encender y apagar LEDs, etc.
  • Pines de interfaz I2C que te permiten conectar módulos de hardware con sólo dos pines de control.
  • Interfaz SPI con dispositivos SPI, un concepto similar al I2C pero un estándar diferente.
  • Pines serie Rx y Tx para comunicación con periféricos serie.

Además, algunos pines pueden utilizarse para PWM (Pulse Width Modulation, en español Modulación de Ancho de Pulso) para control de potencia y otro tipo de generación de pulsos para el control de servomotores denominados PPM (Pulse Position Modulation).

Como su nombre indica, no tienen ningún propósito especial definido y no se usan de forman predeterminada. La idea es que cada usuario las use para su propósito concreto, dejando su uso a la imaginación de cada cual. Además de suministrar energía (3,3 V, 5 V y Masa), todos los pines GPIO pueden utilizarse como entradas o salidas digitales. Con estos pines podemos leer valores de entrada (por ejemplo, sensores de temperatura, de luz, de humedad, de aceleración, de posición...) así como enviar señales de salida (para control de motores, señalización en leds o displays...)

Todos los pines tienen niveles lógicos de 3.3V y no son 5V-safe por lo que los niveles de salida son entre 0 y 3.3V y las entradas NUNCA deben ser superiores a 3.3V. Si desea conectar una salida de 5V a una entrada Pi, habrá que utilizar un conversor de niveles.

Para obtener lecturas de los pines (entrada de datos digital) o escribir en ellos (salida de datos digital) se pueden utilizar varios lenguajes como C o Python. Para poder usar estos lenguajes, debemos usar librerías específicas que traduzcan los comandos en datos reales tanto de entrada como de salida en el GPIO.

Como salidas digitales, puede escribir programas que asignan a un determinado pin un valor ALTO (HIGH) o BAJO (LOW). Si se asigna ALTO, se tendrán 3.3V entre dicho PIN y masa y si se establece en BAJO, tendremos un valor de 0V. Para encender un LED en uno de estos pines, necesitarás conectar una resistencia de 1kΩ en serie con el LED.

Si utiliza un pin como entrada digital, entonces puedes conectar interruptores, pulsadores y sensores simples a un pin y luego puede comprobar si está abierto o cerrado (es decir, activado o no).

Lo primero que debemos saber es la disposición de estos pines. La siguiente imagen está sacada del manual esquemático de diseño del hardware de las placas Orange Pi a la que he añadido los pines de varias librerías como WiringPi o BCM:

Orange Pi 2 GPIO Pinout H3

No existe mucha documentación oficial sobre dicha regleta, las secciones que hacen referencia en la página oficial están vacías, así que iré recopilando más información. Si puedes aportar algo, no dudes en escribirme y añadiremos dicha información.

Si tienes intención de trabajar con estos pines debes saber que coincide con la del modelo A y el modelo B de la placa Raspberry Pi. Tienen soporte SPI y I2C. y está basado en Allwinner A20. Puedes leer toda la información en este documento Confidencial sobre el Procesador OTT Allwinner H3, pulsando aquí.

Los pines marcados SCL y SDA se pueden utilizar para I2C. Los pines marcados MOSI, MISO y SCKL se pueden utilizar para conectar a dispositivos SPI de alta velocidad.

I2C es un estándar muy utilizado comúnmente diseñado para permitir que un chip se comunique con otro. Por lo tanto, ya que Orange Pi Orange Pi es capaz de comunicarse con estos dispositivos, podemos conectarlo a una gran variedad de chips y módulos I2C.

Para trabajar con los pines de este BUS hay que instalar alguna librería que se comunique con ellos. La mayoría son adaptaciones de Wiring Pi, una librería para la Raspberry Pi: WiringOP, WiringBP compatible con Banana Pi, orangepi_PC_gpio_pyH3... Esta última utiliza la librería oficial de Python, y a mi es la que más me gusta.

Para placas H5 probad con https://github.com/herzig/orangepi_PC_gpio_pyH5

Para instalarla, descarga el archivo comprimido, o clónalo con: sudo git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3.git

Accede a la carpeta recién creada e instala con:

sudo python setup.py install

NOTA: Si te sale un error sobre python.h

fatal error: Python.h No such file or directory
#include "Phyton.h"
...
				

tienes que instalar el paquete python-dev.

sudo apt-get install python-dev

Después vuelve a instalar.

sudo python setup.py install

Para probar que todo funciona, este es un ejercicio de lo mas sencillo. Crea un archivo donde escribiremos un script en python con sudo nano test.py y escribe el siguiente código. Python es bastante exigente con la indentación, así que ten cuidado si copias y pegas.

#!/usr/bin/env python

import os
import sys

if not os.getegid() == 0:
    sys.exit('Debes ejecutar este Script como SU')

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

led = port.PA20

gpio.init()
gpio.setcfg(led, gpio.OUTPUT)

try:
    print ("Pulsa CTRL+C para salir")
    while True:
        gpio.output(led, 1)
        print "led set 1 \r\n"
        sleep(2)
        gpio.output(led, 0)
        print "led set 0 \r\n"
        sleep(2)
        gpio.output(led, 1)
        sleep(0.1)
        gpio.output(led, 0)
        sleep(0.1)
        sleep(0.6)
    
except KeyboardInterrupt:
    print ("Saliendo.")

Ahora con una resistencia, 2 cables y un diodo led, conecta como en el siguiente esquema:

Ejecuta sudo python test.py y el led debe parpadear además de mostrar el estado por pantalla.

ACTUALIZACIÓN Junio 2017: Con las nuevas imágenes armbian ya no se exportan los GPIO a / gpio_sw. Para activarlo haz lo siguiente:

Ves al directorio root con cd /boot. Convierte el archivo script.bin a formato fex y ábrelo en un editor:

sudo bin2fex script.bin script.fex
sudo nano script.fex

Busca la siguiente entrada:

[twi1]
twi_used = 1

y cámbiala por:

[twi1]
twi_used = 0

Vuelve a convertir el archivo a formato bin:

sudo fex2bin script.fex script.bin

Reinicia la máquina y todo debería volver a funcionar.

Pulsa aquí para un ejemplo de uso.

ACTUALIZACIÓN Mayo 2020: Nuevos cambios. Ahora tendremos que activar el GPIO ejecutando sudo armbian-config

armbian-config
armbian-config
armbian-config

Dependiendo de la distribución tendrás que instalar las siguientes librerías. Prueba hasta que tengas acceso a GPIO. en mi caso he tenido que instalar lo siguiente:

sudo apt-get install python3-setuptools
sudo apt-get install python3-dev

git clone https://github.com/zhaolei/WiringOP.git -b h3
cd WiringOP
chmod +x ./build
sudo ./build

sudo git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3.git
cd orangepi_PC_gpio_pyH3/
sudo python3 setup.py install

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.

Orange_Tester

Con tu tutotial por fin tengo funcionando los pines de mi placa OrangePi_PC_PLUS, solo me faltaba descargarme la ultima versión del sistema operativo armbian y actualizarla con el comando sudo apt-get update (Fallo de principiante)

Muchas Gracias.


Miguel Angel

Recientemente he comprado una Orange Pi Zero, pero acabo de leer que la salida de video que tiene es mediante una expansión de 13 pines, no tiene una salida hdmi ni vga, ni nada integrado. Como no se nada de electrónica, quisiera saber como puedo sacar video de Orange Pi Zero. Si existe alguna forma o bien de sacar el video de la placa mediante el otg o algo así­ o donde adquirir la placa de expansión con la salida de video.


Administrador OrangePiWeb.es

Hola Miguel Angel. No he tenido la oportunidad de tener todavía esta placa, pero por lo que sé, está más pensada para conectar via SSH ya que no tiene salida HDMI ni VGA. Si tiene una salida marcada como TVOut entre los pines 2 (masa) y 9 (señal) para soldar o conectar una clavija RCA y conectarlo a una televisión (suele ser el conector RCA amarillo). Existen adaptadores de RCA a Euroconector, quizás sea la forma más sencilla. Esto es lo que he podido averiguar, si alguien puede aportar más, por favor, que no dude en escribir. Cuéntanos tu experiencia, que seguro es útil a mas gente. Saludos y lamento no poder ayudarte más.


Kinegua

Hola. Tengo la Orange Pi Zero desde hace una semana y de momento no he conseguido señal de vídeo compuesto a través del pin 9. Me falta pribar un poco más. En el foro de Armbian parece que también están con ello. Si he conseguido acceder por ssh con putty sin problemas con la imagen de Ubuntu oficial. Si consigo echarlo a caminar lo comentaré por aquí.


Juan

Hola, me podrias confirmar si el puerto GPIO cuenta con entradas y salidas analógicas.
Saludos


Administrador OrangePiWeb.es

Hola Juan.
Las Orange Pi no tienen entradas analógicas, así que sólo son capaces de detectar entradas digitales, es decir, valor alto - valor bajo. Como posibles alternativas puedes usar un procesador, que convierta las señales analógica en digitales como un micro MCP3008. O conectar un Arduino que te maneje las señales y se las envíe al Orange Pi.
Saludos


Adelosri

Hola
Alguien de este foro ha usado cualquiera de los UART del Orange para hacer transmision SERIAL?, necesito migrar algo hecho con Raspberry y Python, pero cuando debo configurar el puerto como '/dev/tty??' no se cual colocar.
He probado varios que arroja el comando ls /dev/tty* pero ninguno parecer leer o escribir en el puerto
Estoy tratando de leer TX y RX de los pines PA13 y PA14
Muchas gracias por su ayuda


Administrador OrangePiWeb.es

Hola Adelosri. Sin saber que SO estás usando ni que librerias para usar el GPIO poco puedo decirte. Yo no lo he usado todavía, pero mira, aquí han peleado con ello y han conseguido arreglarlo:
http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=1220
Espero que te ayude.
Saludos.


Jorge

Hola wenas aorange pi plus 2 es capaz mover un sistema ambilight con hyperion? Por gpio spi?


Raul Martin

Hola soy un novato n pañales, quiero ponerle a la orange pi pc una lcd display de 3.5 cocretamente el modelo xpt2046 esta diseñada para RPi, por mi poca experiencia creia que tansolo lo conectaba al oranpi pc a travez de los pines que tiene y listo ya tenia señal, pero ya veo que no y quisiera que me indicarais como poder conectarla que paso he de seguir, muchas gracias y unsaludo.


Administrador OrangePiWeb.es

Hola Jorge. Por capacidad de hardware, si podría moverlo. El problema es encontrar el software. No he encontrado nada que lo haga, así que habría que compilarlo partiendo de Armbian o Openelec. Cuéntanos si consigues avanzar.
Saludos.


Administrador OrangePiWeb.es

Hola Raúl.
Pues efectivamente, está diseñada para Raspberry Pi. Yo no he encontrado nada para hacerla funcionar con Orange Pi. Puedes empezar siguiendo los pasos para instalarla en uina Raspberry Pi, e ir improvisando:
https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=124961&p=840855
También hay un driver para BAnana Pi, y al haber bastante compatibilidad entre Banana Pi y Orange Pi, puedes seguir por ahí.
https://github.com/saper-2/rpi-5inch-hdmi-touchscreen-driver
Por favor, cuéntanos como te ha ido. Saludos.


Gustavo

Hola Javier, muchas gracias por compartir estos contenidos en español! ¿Sabrías de algún tutorial o ejemplo de código para poder conectar un OPIPC+ a un Arduino UNO a través de los pines?
Para los que sabemos poco de electrónica es muy difícil entender al principio algunos conceptos como por ejemplo "convertir señales analógicas en digitales con un micro", busqué bastante sobre esto y aún no encuentro algo sencillo de entender. Cualquier consejo sería de gran ayuda, saludos!


Administrador OrangePiWeb.es

Hola Gustavo.
Recién publicado:
http://orangepiweb.es/orange-pi-arduino.php
Saludos.
Javier


Marcela

Buenas tardes a todos.
Estoy intentando manejar los pines GPIO desde una interfaz gráfica en Netbeans para el control de una máquina termoformadora, pero no he podido conseguir información.
No se si exista una librería o algo que haga esto posible. Alguien podria ayudarme con esto por fabor?


Administrador OrangePiWeb.es

Hola Marcela. Pues la verdad es que no lo sé. Deberías acudir al fabricante de la termoformadora para ver si tiene librerías para manejar la máquina y así saber desde que sistema se puede hacer y adaptarlo a tu Orange Pi. Saludos.


Saul E

Excelente blog, conseguí las placas pc + solo para usarlas de centro de entretenimiento pero como me gusta trastear con linux me da curiosidad el uso del gpio así que ando investigando que puedo hacer con el, gracias al autor por la info compartida ya que no hay micha información en la red.

Saludos


Emmanuel

Buenas compre un orange pi lite y ando buscando como mover un servo con un script de python pero no encuentro ninguna documentación al respecto, hay algún lugar donde pueda encontrar esta info?


Administrador OrangePiWeb.es

Hola Emmanuel. Yo no he encontrado ninguna forma de controlar un servo con Python lo suficientemente precisa, siempre hay un movimiento incontrolable.
Mira este vídeo.
A través de una placa Arduino si que he conseguido hacerlo con precisión:
http://orangepiweb.es/orange-pi-arduino.php.
Cualquier ayuda con este tema es apreciada, gracias y saludos.


Emmanuel

Buenas gracias por la respuesta, comprare un arduino ya que estoy haciendo un proyecto de un dispensador, aun así crees que podrías compartirme el código del vídeo? , para hacerme una idea de como se usa el wiringOp.
Muchas gracias.


Administrador OrangePiWeb.es

Hola Emmanuel. El código está en la página
http://orangepiweb.es/orange-pi-arduino.php
En Aliexpress tienes muchas placas Arduino con servo incluido. Pincha aquí para ver uno que viene con muchos sensores compatibles con Orange Pi para jugar


Celestino

Hola.
Orange Pi Lite con armbian 5.38 xenial

Estoy leyendo un libro titulado "Rapsberry Pi2 para electrónicos" y al final del libro trata python (IDLE 3.5) en modo gráfico (tkinter) e importa Rpi.GPIO para acceder a los pines, pero me sale un error "ImportError: No module named 'RPi'". Imagino que es una librería específica de rapsbian para rapsberry; mi pregunta es que debo utilizar en orange pi para poder acceder a los pines desde python (IDLE 3.5) en modo gráfico (tkinter).

Es una lástima que haya tan poca bibliografía sobre orange pi. Gracías por tu web, es lo poco que se puede
encontrar en Español.

Un saludo.


Administrador OrangePiWeb.es

Hola Celestino. Rpi no funciona con Orange Pi porque es una librería diseñada para Raspberry Pi (el GPIO es compatible, pero no la forma de trabajar con él), así que esta librería no funcionará. De hecho, al instalar, seguro que te ha lanzado muchos errores.
No he probado "tkinter" y no sé si funcionarán alguna librería compatible. Buscando en GitHub, he encontrado una librería que dice ser un reemplazo de RPi para Orange Pi, pero no he ido más allá tendrás que probar:
https://github.com/Jeremie-C/OPi_H3.GPIO
Saludos.


Raul

Hola, muchas gracias por tu web. La verdad que tengo en mente una prueba de concepto con sensores de humedad y temperatura junto con machine learning. El problema es que siguiendo todos los pasos, al ejecutar el script de testing(bueno cualquier script que haga uso de pyA20.gpio) me lanza un mensaje de Violación de segmento. La versión de armbian junto con el kernel:
Armbian 20.08.5 Buster with Linux 5.8.11-sunxi64

Espero que me puedas ayudar.

Muchas gracias.


Administrador OrangePiWeb.es

Hola Raúl. Mánda el error para saber de que estamos hablando. Si autorizas las comunicaciones te podremos escribir directamente y ahorrar tiempo. NUNCA enviamos SPAM ni pasamos los correos a terceros. Saludos.


Jon

Hola, tengo una opi PC (H3) que tiene instalado retrorangepi, que se arranca al encender la placa. Como puedo hacer que se cambie el estado de dos pines gpio al arranque?


Hola Jon

Hola Jon. Si te soy sincero nunca he instalado Retrorange ya que nome interesa demasiado el tema. Pero creo que está basado en Armbian, así que deberías poder acceder a las tareas cron. No sé que librerías dispone para trabajar con GPIO, así que tampoco puedo ayudarte. Quizás deberías preguntar en foros de Retrorange. Si puedes trabajar a bajo nivel, lee este truco:

https://orangepiweb.es/consejos-y-trucos.php#gpio

Cuéntanos cómo te ha ido. Saludos.


Jon

Gracias por la ayuda. Ya he conseguido activar un ventilador y un led mediante un script Python que se ejecuta al encender la placa gracias a CRON. El problema es que al apagarla por medio del botón físico o por el menú de pantalla, el estado de los gpio se queda en 1, y no se ponen a 0 hasta que no le quito la corriente a la placa. Hay alguna manera de ejecutar otro script de apagado, que ser active al pulsar el botón? Estoy intentando hacer algo con el evento de acpi de shutdown, pero no sé muy bien que tendría que poner y donde ponerlo


Administrador OrangePiWeb.es

Hola Jon.
Aquí explicamos como programar el botón para apagar:
https://orangepiweb.es/consejos-y-trucos.php#power_button
Por otro lado, puedes pagar a traves de un script poniendo primero la órden para cambiar el estado del pin del GPIO que necesites seguido de:
sudo shutdown now
Así cambiarás el estado del pin y después se apagará.
Saludos.


Nombre*

Email* Nunca será publicado ni compartido

Comentario*



Copyright © 2024 desde 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