Fundamentos del Hardware de Raspberry PI.

Ya que tenemos la base del uso de nuestra placa Raspberry, ahora podemos entrar de lleno dentro de la configuración de la placa y de sus patillajes para condicionarla a la hora de conectar circuitos eléctricos o componentes como se hace en Arduino UNO.

Raspberry PI tiene un uso general para conectar las entradas y las salidas (GPIO) mediante un conector que hace las funciones de puerto.

Sin contar la nueva versión de Raspberry PI 5 (a fecha de esta clase), ha habido 3 versiones de GPIO en la placas de Raspberry PI. Dos diseños de 26 pines para las primeras Raspberry PI, y otra de 40 pines con los modelos de "+" de las placas Raspberry PI.

Puertos de GPIO de la raspberry PI

En la imagen anterior puedes ver que las dos primeras empezando por la izquierda son los puertos GPIO originales de las primeras Raspberry PI, mientras que los puertos GPIOs de la derecha son los actuales de las versiones plus.

En las distintas revisiones de las placas, se cambiaron los puertos I2C de posición como puedes ver en la anterior imagen. Los pines SDA y SCL siguen siendo los mismos, pero utilizan la interfaz I2C interna diferente, por lo que si estás utilizando los pines como GPIO en lugar de IC2, se referirá a ellos como 2 y 3 en una tarjeta de revisión 2. Además la placa de GPIO 21 fue reemplazada por la de 27 pines en la revisión 2.

El GPIO utiliza la alimentación de 3,3V para todas sus entradas y salidas. Los pines TXDy RXD son los pines de transmisión y recepción de la interfáz serie (al igual que en Arduino UNO). SDA ySCL formar la interfaz I2C, pero también la MOSI,MISO y SCKL (la interfaz SPI).

En el modelo de 40 pines, suelen coincidir en parte los puertos con sus anteriores modelos (por lo menos los 26 primeros). Los 40 pines del conector se componen de 3 masas GND y 9 pines GPIO. Los pines ID_SD e ID_SC estan diseñados para ser utilizados en la comunicación con un chip de memoria en serie especial, que se puede incluir en las tarjetas de interfaz que forma el Hardware At Top (HAT) estándar y que permite que la Raspberry PI identifique la tarjeta.

Si no dispone de una plantilla específica de los pines en la Raspberry PI, puede que se produzca errores de conexión a dichos puertos, ya que por defecto la Raspberry PI no viene con dicha plantilla y por lo tanto identificar los puertos puede ser un tanto complicado visualmente.

Plantilla de GPIO de la raspberry PI

Además, los pines GPIO son pines digitales. No tienen pines analógicos como ocurre en la Arduino. Si necesitas utilizar pines analógicos puedes utilizar un chip convertidor ADC por separado para convertir tus puertos a analógico.

Configuraciones.

Si quieres utilizar tu Raspberry PI 3B+ con componentes electrónicos y circuitos eléctricos en sus pines GPIOs, has de saber y tener en cuenta estas consideraciones:

● No ponga ningún pin GPIO a más de 3,3V como entrada.
● La intensidad máxima de salida es de 16mA por cada pin GPIO.
● El total de intensidad de salida de todos los pines GPIO no debe superar los 100mA.
● Utilize un máximo de 3mA al enceder algún led (y limita su intensidad con una resistencia).
● Cuando esté encendida la placa no cortocircuites puertos GPIO.
● No alimenta la Raspberry PI con más de 5V.
● No extraiga más de 250mA de los pines de suministro de 5V.

Al igual que cualquier ordenador, la fragilidad es considerable cuando se utiliza electrónica y alimentación externa. Es fácil que tu placa Raspberry PI se autodestruya si no sigues estas reglas y pasos y, aunque las versiones posteriores son más robustas, hay que tener en cuenta lo mencionado para evitar problemas ya que no es una placa tan barata como la Arduino UNO.

A continuación vamos a ver como configurar ciertos servicios desde nuestro Raspbian para habilitar algunas interfaces de comunicación.

Configurar IC2.
Supón que tienes un dispositivo que usa I2C (como por ejemplo sensores, pantallas LCD, etc.). Para poder utilizar los puertos tienes que configurar abre una nueva terminar de Consola Linux y escribe el siguiente comando:

raspi-config nonint get_i2c

Si te devuelve un 1, significa que la interfaz de I2C está deshabilitada.

Comprobar que el puerto I2C esté activo

Para activar la interfaz de I2C utiliza el siguiente comando:

sudo raspi-config nonint do_i2c 0

Con lo que la intefaz de IC2 quedará activa. Para pasarla de nuevo a desactivada, pon el comando:

sudo raspi-config nonint do_i2c 1

NOTA: Si te sale este mensaje, asegurate que estás conectado a un Raspberry PI.

Fallo de activación

Para comprobar que el puerto I2C esté activo, utiliza el siguiente comando:

sudo raspi-config nonint get_i2c

Si te devuelve 0, eso significa que ya esta activado el I2C.

Puerto I2C activo

Utilizar módulos que usen I2C es una buena forma de iteractuar con nuestra Raspberry PI. Reduce el número de cables necesarios para la conexión y existen módulos I2C que son fantásticos y funcionales. Pero recuerda la máxima intensidad de corriente de cada módulo para no dañar la placa.

La mayoría de los componentes que conectas en tu Arduino UNO, utilizan interfaces de I2C, por lo que es muy recomendable conectarla por defecto.

Pyserial.
Podemos usar los puertos Rx y Tx para comunicarnos con otros programas en Python usando el módulo PySerial.

Primero antes de nada, si has hecho un upgrade de tu sistema o update, puede que se te haya instalado el protocolo PySerial. Para comprobarlo desde la consola haz un pip list y comprueba que tienes el programa.

Si no lo tienes utiliza sudo apt-get install pyserial y se te descargará las dependencias para este módulo.

Una vez comprobado que lo tienes, puedes crear una conexión básica utilizando el dispositivo al que te quieras conectar y la velocidad en baúdios en forma de número:

ser = serial.Serial(DEVICE, BAUD)

Una vez realizada la conexión, para recibir datos escribe:

ser.write('Hola mundo')

Para recibir una respuesta, como las respuestas pueden venir cuando se quiera, implica tener un bucle que reciba la respuesta y la muestre. Así por ejemplo:

while True:
    print(ser.read())

Si quieres saber más como funciona PySerial para controlar un display de 7 segmentos, visita este ENLACE.

Si quieres probar tu conexión serial puedes instalar un módulo desde tu terminal:

sudo apt-get install minicom

Este módulo te permite iniciar una sesión de comunicaciones en serie con un dispositivo conectado a los pines RXD y TXD de la GPIO de tu placa mediante el siguiente comando:

minicom -b 9600 -o -D /dev/ttyAMAO

Siendo -b la velocidad de baúdios y -D el puerto serie.

Esta herramienta solo se suele utilizar para comprobar que los mensajes se envian o reciben y que funciona el puerto serie.

Convertir señales de 5V a 3.3V.

Ya hemos hablado que la Raspberry PI puede recibir señales por sus GPIO de hasta 3.3V, por lo que es necesario de adaptar el valor de las entradas cuando conectamos dispositivos externos, como por ejemplo un puerto TX de nuestro Arduino UNO:

Forma de reducir la tensión de salida a 3.3V

Como puedes ver en la imagen anterior la forma eléctrica de resolver este problema es hacer un divisor de tensión. Como puedes ver una salida del Arduino UNO la conectamos al puerto 15 GPIO de la Raspberry PI mediante una resistencia de 270Ω. Y en paralelo con este puerto también conectamos una resistencia de 470Ω que regula la intensidad recibida.

La señal TXD de tu Raspberry PI es una salida de 3.3V. Esta se puede conectar directamente a un puerto de 5V del Arduino sin problemas, pero al revés hay que hacer esto, porque puedes sobrecargar la Raspberry PI.

En la última clase práctica veremos algunos circuitos con la Raspberry PI y como conectaremos componentes a sus puertos GPIO.