Práctica - Comunicación Arduino/Raspi utilizando el puerto serial.

Comunicación utilizando el puerto serial.
  
Aquí explicare paso a paso la practica realizada por mi de comunicación utilizando el puerto serial de la Rasberry y Arduino UNO siguiendo el tutorial de mi profesor José Luis Perez.
Las Raspberry incluyen una serie de pines de propósito general que pueden ser utilizados como entradas
o salidas digitales entre los cuales se incluye un pequeño puerto serial. Este puerto puede ser utilizado
para enviar o recibir datos desde y hacia otros dispositivos. De fábrica viene configurado como un puerto
de consola para monitorear el funcionamiento del RasPI.


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL8bVg53QVfENdjurgI68qN0ar42cRy_-hepxIua3kdUlgpa3mK4PCrttXBpJtiRCfZDwmWdro8I9RrsCkUtu9Dn33XjN1Bq4zbGgwQCGTH47pgC0p03KMUuikZTA5K4WdChAVv3w6hm5I/s200/Pines+Serial.png


Antes de intentar comunicar algo por el puerto tenemos que cambiar un par de líneas de configuración:


  1.  Primero en la RasPI tenemos que modificar el archivo /boot/cmdline.txt y eliminar la parte que dice:
   
    console=ttyAMA0,115200


  1. Lo siguiente, es desactivar el puerto serial como consola.
(También podemos hacerlo tecleando el comando → $ sudo raspi-config)





Problema en la RASPBERRY

En la Raspberry Pi 3, hay más capacidades que en las versiones anteriores, como WiFi y Bluetooth.
ttyAMA0                                                                                                                                                                           La UART en la que había residido anteriormente la consola en serie, GPIO 14 (TX), GPIO 15 (RX), ahora se utiliza para la comunicación Bluetooth. Esta UART se reconoce como ttyAMA0.
El motivo, por el que se necesita esta UART, es que se puede establecer su velocidad de bus sin depender de la velocidad de reloj del sistema, lo cual es necesario para el módulo de Bluetooth.
ttyS0                                                                                                                                                                          
Existe una mini UART secundaria en la Raspberry Pi 3, pero con algunas restricciones. Una de ellas es que su velocidad de baudios está ligada a la frecuencia del sistema, lo que significa que variará a medida que la velocidad del procesador varía. Sin una velocidad de baudios fija es casi imposible conseguir una comunicación eficaz. Esta mini UART se reconoce como ttyS0.
Para activar la mini UART, debemos de añadir “enable_uart=1” en el fichero “config.txt”, situado en la carpeta “/boot”. Tras esto, con la instrucción “$ ls /dev/tty*” podemos comprobar la existencia de las dos UART.

 


SOLUCIÓN                                                                                                                                                                         
Si queremos utilizar la UART ttyAMA0, tal y como lo hacíamos antes en los GPIO14 y GPIO15, deberemos de deshabilitar el Bluetooth del siguiente modo:
  1. Añadimos “dtoverlay=pi3-disable-bt” al final del fichero “config.txt”.
  2. En el terminal, ejecutamos “$ sudo systemctl disable hciuart”.
  3. En el fichero “/lib/systemd/system/hciuart.service”, donde aparezca “ttyAMA0” o “serial1”, lo sustituimos por “ttyS0”.
  4. En el fichero “/boot/cmdline.txt”, eliminamos la parte que dice “console=ttyAMA0,115200”.


 QtTerm (Software gráfico de comunicaciones)


  1. Para poder compilar el código de la Raspberry Pi se necesitan estos paquetes instalados :
$ sudo apt-get update
$ aptitude search build-essential qt4-dev-tools
$ sudo apt-get install build-essential (para poder usar gcc, g++, make …)
$ sudo apt-get install qt4-dev-tools
  1. Descarga y compilación del qtTerm :
$ sudo wget http://qtterm.googlecode.com/files/3BpiQtTerm01.tar.gz
Si la orden anterior no enlaza, lo descargais en windows https://code.google.com/archive/p/qtterm/downloads  y luego lo pasais a la Raspi.
$ sudo tar -zxvf 3BpiQtTerm01.tar.gz
  1. /3BpiQtTerm/qextserialport $ qmake
/3BpiQtTerm/qextserialport $ make
/3BpiQtTerm/qextserialport $ sudo make install
  1. qextserialport ha sido instalado en Raspberry Pi. Ahora se tiene que compilar qtTerm
/3BpiQtTerm $ qmake
/3BpiQtTerm $ make
  1.  Ejecutamos qtTerm
               /3BpiQtTerm $ ./qtterm


  Una vez que hayamos hecho lo anterior pasamos a configurar  el Arduino UNO


Instalar el IDE de Arduino en la RASPi

.- Actualizamos los repositorios:
$ sudo apt-get update


.- Instalamos el paquete Arduino:
$ sudo apt-get install arduino
Una vez instalado aparecerá una nueva sección, llamada “Electronics”, en el menú de programas, con el acceso directo al IDE de Arduino.


.- Damos permiso al usuario “pi”, para acceder al puerto serie:
$ sudo usermod -a -G tty pi


.- Agregamos al usuario “pi” al grupo “dialout”
$ sudo usermod -a -G dialout pi


.- Conectamos el arduino uno al puerto usb y comprobamos que se añade el puerto serie /dev/ttyACM0, con la siguiente orden:
$ ls /dev/tty*

Abrimos el IDE y tras configurar la tarjeta y el puerto serie, podemos programar y descargar sobre la tarjeta Arduino UNO:





 Aquí tenemos el esquema de montaje del circuito para realizar la practica.
                                             


QUE HACER EN LA TARJETA ARDUINO UNO 


Cargamos el siguiente programa:
void setup()
{
 Serial.begin(9600);
}
void loop()
{
 Serial.write("Hola Raspi!\n");
 Serial.write("Soy un Arduino UNO\n");
 delay(1000);
}
 
QUE HACER EN LA TARJETA RASPBERRY PI

  • Comprobamos los distintos puertos de los que dispone la RASPI
    $ ls /dev/tty*
  • Con el siguiente comando podemos configurar el puerto serie:
    $ sudo stty -F /dev/ttyAMA0 9600
  • Para leer los datos de la consola, en el bash, ejecutamos el siguiente comando:
    $ cat /dev/ttyAMA0

 

  • Para mandar datos desde la consola, en el bash, ejecutamos el siguiente comando:
    $ echo * > /dev/ttyAMA0 → siendo * aquel carácter que deseamos mandar

   




Comentarios

Entradas populares de este blog

Práctica - PT100

Práctica - Arduino + LabView