Del mismo modo que Arduino dispone de una serie de pines que podíamos conectar al mundo exterior para leer o escribir, Raspberry dispone de otra serie de pines homólogos que en la jerga habitual de la RPI se llaman GPIO (General Purpose Input Output).
GPIO:
- https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
- https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header
La cantidad de pines disponibles en el GPIO ha variado de unas versiones a otras, manteniendo la compatibilidad con las versiones anteriores para evitar problemas, y a grandes rasgos ha habido dos versiones de GPIO. La gran variación fue de la Raspi 1 a la Raspi 2 que aumentó el número de pines disponibles y que básicamente se pueden ver aquí:
A esta forma de numerar se le suele conocer como modo GPIO, Pero surgió otra forma de numerar, no de acuerdo a la posición de los pines en la salida, sino a la posición de los pines correspondientes en el chip Broadcom que es la CPU de la Raspberry, y a esta segunda manera se la llama modo BCM.
Nos encontramos con dos formas distintas de referirse a los pines, GPIO según los números del conector externo o BCM según los pines del chip que revuelven las posiciones. No tiene por qué ser mejor una que otra pero es importante asegurarse de cuál de las dos se está usando.
Disposición de los pines en la placa:
En Raspberry Pi Zero:
Pinout: https://pinout.xyz/
Más información:
- https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
- https://www.prometec.net/rpi-gpio/
- https://www.programoergosum.com/cursos-online/raspberry-pi/238-control-de-gpio-con-python-en-raspberry-pi/que-es-gpio
- https://comohacer.eu/gpio-raspberry-pi/
- https://maker.pro/raspberry-pi/tutorial/raspberry-pi-4-gpio-pinout
Especificaciones eléctricas GPIO
Los pines trabajan con una tensión de 3,3 V y un consumo máximo de corriente de 16 mA. Esto significa que podemos suministrar energía de forma segura desde un solo pin GPIO a través de una resistencia, uno o dos LEDs.
IMPORTANTE:Todos los IO ports son de 3.3V, así que se debe tener cuidado.
Para alimentar cualquier otra cosa que requiera más corriente, como un motor de corriente continua, es necesario utilizar componentes externos para evitar dañar el GPIO.
Salidas: Un pin GPIO designado como pin de salida puede ajustarse a alta (3V3) o baja (0V).
Entradas: Un PIN GPIO designado como PIN de entrada puede ser leída como alta (3V3) o baja (0V). Esto es más fácil con el uso de resistencias internas de pull-up o pull-down. Los pines GPIO2 y GPIO3 tienen resistencias pull-up fijas, pero para otros pines esto puede ser configurado en el software.
Especificaciones eléctricas del GPIO: http://www.mosaic-industries.com/embedded-systems/microcontroller-projects/raspberry-pi/gpio-pin-electrical-specifications
Plantilla GPIO: http://rasp.io/portsplus/
Iconos de alerta de firmware: https://www.raspberrypi.org/documentation/configuration/warning-icons.md
Accesorio expansión GPIO:
Comprar: https://www.amazon.es/ASHATA-Accesorios-Expansion-Raspberry-Breadboard/dp/B07J1SBD6G/
Advertencia: aunque la conexión de componentes simples a los pines GPIO es perfectamente segura, es importante tener cuidado en la forma de cablear las cosas. Los LEDs deben tener resistencias para limitar la corriente que pasa a través de ellos. No use 5V para los componentes de 3V3. No conecte los motores directamente a los pines GPIO, en su lugar utilice un circuito de puente H o una placa controladora de motores.
Manejar GPIO
Se puede acceder a una referencia práctica de los GPIO abriendo una ventana de terminal y ejecutando el comando pinout. Esta herramienta es proporcionada por la librería GPIO Zero Python, que se instala por defecto en la imagen de escritorio de Raspbian, pero no en Raspbian Lite.
Para manejar los pines de GPIO la mejor manera de usarlos es en Python mediante el uso de librerías. Veremos más adelante cómo usarlo en el apartado de programación y manejo.
Pueden tener una dirección para recibir o enviar corriente (entrada, salida respectivamente) y todo esto es totalmente controlable por lenguajes de programación como Python, JavaScript, Node-RED y otros.
Librería GPIOZero: https://gpiozero.readthedocs.io/en/stable/
Es posible controlar los pines de la GPIO usando un número de lenguajes y herramientas de programación. Vea las siguientes guías para empezar:
- GPIO with Scratch 1.4
- GPIO with Scratch 2
- GPIO with Python
- GPIO with C/C++ using standard kernel interface via libgpiod
- GPIO with C/C++ using 3rd party library pigio
- GPIO with Processing3
Para probar los pines del GPIO mediante línea de comandos: https://geekytheory.com/tutorial-raspberry-pi-gpio-parte-1-control-de-un-led
Simulador Raspberry Pi
- Raspberry Pi web emulator: https://azure-samples.github.io/raspberry-pi-web-simulator/
- Manual: https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-raspberry-pi-web-simulator-get-started
- Guía: https://channel9.msdn.com/coding4fun/blog/Raspberry-Pi-Online-Simulator-and-Azure-IoT
- Código: https://github.com/Azure-Samples/raspberry-pi-web-simulator
Además puedes montar una máquina virtual con Raspbian. Puede crear un live disk, ejecutarlo en una máquina virtual o incluso instalarlo en el equipo. Descargar en https://www.raspberrypi.org/downloads/raspberry-pi-desktop/
Tutoriales instalar Raspbian en Virtualbox:
Pingback: Manejar GPIO Raspberry Pi | Aprendiendo Arduino