CONEXIÓN ARDUINO-RASPBERRY

En esta practica veremos como se reciben datos por el puerto Serial de la Raspberry, ¿que significa recibir datos por puerto Serial?.

El puerto serial es una forma de comunicación entre dispositivos, más específicamente entre un ordenador y un periférico. Recibe su nombre del hecho de que los datos son trasmitidos de forma secuencial, circunstancia que los diferencia del puerto paralelo, que envía datos de forma simultánea.



La típica transmisión start-stop es la que se usa en la transmisión de códigos ASCII a través del puerto RS-232, como la que se establece en las operaciones con teletipos.

El puerto serie RS-232 (también conocido como COM) es del tipo asíncrono , utiliza cableado simple desde 3 hilos hasta 25 y conecta ordenadores o micro-controladores a todo tipo de periféricos, desde terminales a impresoras y módems pasando por mouses.

La interfaz entre el RS-232 y el microprocesador generalmente se realiza mediante el chip UART.

En nuestro caso comunicaremos la UART del Arduino con la UART primaria  de la raspberry , con el protocolo 8N1. Este es una abreviatura habitual de la configuración del puerto serie en modo asíncrono donde hay (8) bits de datos, ningún (N) bit de paridad, y un (1) bit de parada. Con esta configuración sólo el 80% de los datos transmiten información ya que de cada 10 bits se usa uno para el inicio y la finalización de cada porción de información: el byte.

8N1 es la configuración más común en los ordenadores personales para comunicaciones por puerto serie hoy en día.

Ademas utilizaremos una interfaz por Hardware ya proporcionada:

2
Para ello deberemos disponer del material contemplado en esta lista:
  • Arduino 328p
  • Cables
  • Raspberry Pi
  • 2 Transistores BD 139
Cargamos este programa en nuestro Arduino y lo dejamos conectado a alimentación.

arrrd


Primero en la RasPI tenemos que modificar el archivo /boot/cmdline.txt y eliminar la parte que dice: console=ttyAMA0,115200 . Una vez realizadas estas modificaciones reiniciamos nuestra Raspberry. Estas modificaciones evitarán que el Kernel envíe mensajes a la línea serial. Lo siguiente que haremos será desactivar el puerto serial como consola, lo cual haremos desde el escritorio en Raspbian, o bien entrado desde la línea de comandos, escribiendo: sudo raspi-config




Además deberemos deshabilitar el Bluetooth, ya que la UART de estos pines conocida como ttyAMA0, está dedicada para el Bluetooth (sólo en la Raspberry Pi 3). Para ello debemos:
Añadir “dtoverlay=pi3-disable-bt” al final del fichero “config.txt”. En el terminal, ejecutamos “$ sudo systemctl disable hciuart”. En el fichero “/lib/systemd/system/hciuart.service”, donde aparezca “ttyAMA0” o “serial1”, lo substituimos por “ttyS0”.
En el fichero “/boot/cmdline.txt”, eliminamos la parte que dice “console=ttyAMA0,115200”.
Su velocidad en baudios está ligada a la frecuencia del sistema, por tanto, variará a medida que varíe la velocidad del procesador, esta mini UART se conoce como ttyS0.

Para usarla introducimos el comando: sudo nano /boot/config.txt y debemos añadir “enable_uart=1” o en algunos casos nos aparecerá pero con =0 y solo debemos cambiarlo por un =1.


Una vez activas las dos UART introducimos la instrucción “ls/dev/tty*” para comprobar su existencia.


Una vez seguidos estos pasos, podemos usar GPIO 9 y 10 para la comunicación serial.

Una vez tengamos todas las conexiones realizadas, en el bash habrá que ejecutar el comando “$ cat /dev/ttyAMA0” si queremos leer lo que nos envía el Arduino y “$ echo * > /dev/ttyAMA0 “ para enviar caracteres al Arduino, siendo el asterisco “*” el mensaje que queramos enviar.

A continuación realizaremos un programa en el IDE de Arduino para cargar un mensaje que enviaremos a la raspberry.

Arrancamos nuestra raspberry y vamos al terminal.

Lo primero que haremos será adecuar la velocidad de la UART AMA0 de la raspberry a la velocidad del puerto serie del Arduino.

Introducimos “ stty –F /dev/ttyAMA0 9600 “ con esto ajustamos los baudios a 9600 como en Arduino.

Ejecutamos “ cat /dev/ttyAMA0”

Y nos debería aparecer el mensaje que escribimos en el programa,en este caso: