¿Nos ayudas a pagar el Hosting?

Compartir en facebook Compartir en google+ Compartir en twitter Compartir en pinterest 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:

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 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 estrada:

[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.

ACTUALIZACIÓN Junio 2017: Pulsa aquí para un ejemplo de uso.

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.
  1. 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.


  2. 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.


  3. Javier

    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.


  4. 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í.


  5. Juan

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


  6. Javier

    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


  7. 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


  8. Javier

    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.


  9. Jorge

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


  10. 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.


  11. Javier

    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.


  12. Javier

    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.


  13. 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!


  14. Javier

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


  15. 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?


  16. Javier

    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.


  17. 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


  18. 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?


  19. Javier

    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.


  20. 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.


  21. Javier

    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



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