Arduino.cl – Compra tu Arduino en Línea

Cómo configurar la comunicación UART en Arduino

Tabla de contenidos

En este tutorial, discutiremos qué es la comunicación UART y cómo funciona. También escribiremos un sencillo sketch para mostrar cómo utilizar la interfaz UART del Arduino Uno. Luego demostraremos con un proyecto que utiliza UART para comunicarse entre dos Arduinos.

¿QUÉ ES UART?

UART significa Receptor/Transmisor Asíncrono Universal. Es un dispositivo de hardware (o circuito) utilizado para la comunicación en serie entre dos dispositivos.

¿CÓMO SE CONECTAN LOS DISPOSITIVOS UART?

La conexión de dos dispositivos UART es sencilla y directa. La Figura a continuación muestra un diagrama de conexión UART básico.

 

Un cable es para transmitir datos (llamado pin TX) y el otro es para recibir datos (llamado pin RX). Sólo podemos conectar dos dispositivos UART juntos.

¿CÓMO FUNCIONA UART?

UART funciona convirtiendo los datos en paquetes para enviarlos o reconstruyendo los datos a partir de los paquetes recibidos.

ENVÍO DE DATOS EN SERIE

Antes de que el dispositivo UART pueda enviar datos, el dispositivo transmisor convierte los bytes de datos en bits. Después de convertir los datos en bits, el dispositivo UART los divide en paquetes para su transmisión. Cada paquete contiene un bit de inicio, una trama de datos, un bit de paridad y los bits de parada. La figura a continuación muestra un paquete de datos de ejemplo.

Después de preparar el paquete, el circuito UART lo envía a través del pin TX.

RECEPCIÓN DE DATOS EN SERIE

El dispositivo UART receptor comprueba si el paquete recibido (a través del pin RX) presenta errores, calculando el número de 1’s y comparándolo con el valor del bit de paridad contenido en el paquete. Si no hay errores en la transmisión, procederá a eliminar el bit de inicio, los bits de parada y el bit de paridad para obtener la trama de datos. Es posible que tenga que recibir varios paquetes antes de poder reconstruir el byte de datos completo a partir de las tramas de datos. Después de reconstruir el byte, se almacena en el buffer UART.

 El dispositivo UART receptor utiliza el bit de paridad para determinar si hubo una pérdida de datos durante la transmisión. La pérdida de datos en la transmisión ocurre cuando un bit cambia su estado mientras se transmite. Los bits pueden cambiar debido a la distancia de transmisión, la radiación magnética y la falta de coincidencia de las velocidades de transmisión, entre otras cosas.

PARÁMETROS UART

UART tiene ajustes que deben ser iguales en ambos dispositivos para tener una comunicación adecuada. Estos ajustes de UART son la tasa de baudios, la longitud de los datos, el bit de paridad, el número de bits de parada y el control de flujo.

TASA DE BAUDIOS

La tasa de baudios es el número de bits por segundo (bps) que un dispositivo UART puede transmitir/recibir. Necesitamos configurar ambos dispositivos UART con la misma tasa de baudios para tener una correcta transmisión de datos. Los valores más comunes para la tasa de baudios son 1200, 2400, 4800, 9600, 19200, 38400, 57600, y 115200 bps.

LONGITUD DE LOS DATOS

La longitud de datos se refiere al número de bits por byte de datos.

BIT DE PARIDAD

El bit de paridad es un bit que se añade a los datos transmitidos y que indica al receptor si el número de 1’s en los datos transmitidos es par o impar. La configuración posible para el bit de paridad es par o impar.

     ODD – el bit de paridad es ‘1’ si hay un número impar de 1’s en la trama de datos

     EVEN – el bit de paridad es ‘0’ si hay un número par de 1’s en la trama de datos

NÚMERO DE BITS DE PARADA

Los dispositivos UART pueden utilizar ninguno, uno o dos bits de parada para marcar el final de un conjunto de bits (llamados paquetes) transmitidos.

CONTROL DE FLUJO

El control de flujo es el método para evitar el riesgo de pérdida de datos cuando se transmiten datos por UART. El dispositivo UART utiliza caracteres especiales como control de flujo para iniciar/detener la transmisión.

INTERFAZ UART DE ARDUINO

Arduino tiene uno o más pines UART dependiendo de la placa. Para este caso usaremos un Arduino Uno que tiene sólo una interfaz UART, la que se encuentra en el pin 0 (RX0) y el pin 1 (TX0). Los pines 0 y 1 de Arduino también se utilizan para comunicarse con el IDE de Arduino a través del USB. Así que si vas a cargar sketches a tu UNO, asegúrate de desconectar primero los cables de los pines 0 y 1. La figura a continuación muestra la ubicación de los pines UART TX y RX.

                                                          Pines Tx/Rx Arduino Uno

NIVEL LÓGICO UART

Los niveles lógicos de UART pueden diferir entre fabricantes. Por ejemplo, un Arduino Uno tiene un nivel lógico de 5V pero el puerto RS232 de un ordenador tiene un nivel lógico de +/-12V. Conectar un Arduino Uno directamente a un puerto RS232 dañará el Arduino. Si ambos dispositivos UART no tienen los mismos niveles lógicos, se necesita un circuito convertidor de nivel lógico adecuado para conectar los dispositivos.

UN SIMPLE PROYECTO UART

Después de aprender cómo funciona la UART, construyamos ahora un sencillo sketch que demuestra cómo utilizar la comunicación UART usando Arduino Uno.

Nuestro proyecto consiste en controlar el LED incorporado de un Arduino de forma remota a través de UART. Un pulsador conectado a la primera placa Uno controlará el LED incorporado de la segunda placa Uno y viceversa.

COMPONENTES NECESARIOS

Para construir nuestro proyecto, necesitamos los siguientes componentes: 
  •     Arduino Uno (2 unidades)
  •     Pulsadores (2 unidades)
  •     Placa de pruebas (protoboard)
  •     Cables

DIAGRAMA DE CONEXIÓN

La figura muestra cómo conectar los componentes utilizados en nuestro proyecto.

Diagrama de Conexión

ESQUEMA DE ARDUINO

Después de reunir y ensamblar el hardware, ahora estamos listos para programar nuestras placas. Para este proyecto, ambas placas tendrán bocetos idénticos. En primer lugar, ponemos el modo del pin 8 (pulsador) en INPUT_PULLUP, ponemos el modo del pin 13 (LED) en OUTPUT y ponemos el estado inicial del pin 13 en LOW (LED apagado).

				
					void setup() {
  pinMode(8, INPUT_PULLUP); // set push button pin as input
  pinMode(13, OUTPUT);      // set LED pin as output
  digitalWrite(13, LOW);    // switch off LED pin
}
void loop() {
}
				
			

OBJETO SERIE

Como siempre, el Arduino nos facilita el uso del hardware UART incorporado mediante el objeto
serial. El objeto serial tiene las funciones necesarias para un fácil uso de la interfaz UART del Arduino.

SERIAL.BEGIN()

Para comunicarnos a través de la interfaz UART, necesitamos configurarla primero. La forma más sencilla de configurar UART del Arduino es utilizando la función Serial.begin(speed). El parámetro speed es la tasa de baudios que queremos que ejecute la comunicación UART. Usando esta función se establecerán los restantes parámetros UART a los valores por defecto (Longitud de datos=8, Bit de paridad=1, Número de bits de parada=Ninguno).

 Si la configuración por defecto no te funciona, utiliza la función Serial.begin(speed,config) en lugar de Serial.begin(speed). El parámetro adicional config se utiliza para cambiar la configuración de la longitud de los datos, el bit de paridad y el número de bits de parada. Los valores definidos para el parámetro config se pueden encontrar aquí.

 El código siguiente añade Serial.begin(9600); dentro de setup() para inicializar UART de Arduino Uno con una tasa de baudios de 9600 bps y otros parámetros ajustados a los valores por defecto.

				
					void setup() {
  pinMode(8, INPUT_PULLUP); // set push button pin as input
  pinMode(13, OUTPUT);      // set LED pin as output
  digitalWrite(13, LOW);    // switch off LED pin
  Serial.begin(9600);       // initialize UART with baud rate of 9600 bps
}
void loop() {
}
				
			

La siguiente parte a codificar es leer y guardar un valor recibido del serial. Para ello, utilizaremos la función Serial.available() junto con una sentencia If para comprobar si hay datos recibidos. Luego llamaremos a Serial.read() para obtener un byte de los datos recibidos y guardaremos el valor en la variable data_rcvd. El valor de data_rcvd controla el encendido/apagado del LED incorporado.

SERIAL.AVAILABLE()

Para comprobar si hay datos esperando a ser leídos en el buffer UART (o serial), utilizaremos la función Serial.available() que devuelve el número de bytes en espera en el buffer.

SERIAL.READ()

Para leer los datos que están esperando en el buffer serie, utilizaremos la función Serial.read(). Esta función devuelve un byte de datos leídos del buffer.

				
					void setup() {
  pinMode(8, INPUT_PULLUP); // set push button pin as input
  pinMode(13, OUTPUT);      // set LED pin as output
  digitalWrite(13, LOW);    // switch off LED pin
  Serial.begin(9600);       // initialize UART with baud rate of 9600 bps
}
void loop() {
  if(Serial.available()) {
    char data_rcvd = Serial.read();   // read one byte from serial buffer and save to data_rcvd
    if(data_rcvd == '1') digitalWrite(13, HIGH);  // switch LED On
    if(data_rcvd == '0') digitalWrite(13, LOW);   // switch LED Off
  }
}
				
			

SERIAL.WRITE()

Para que podamos enviar datos a través de los pines TX0 de Arduino, utilizaremos la función Serial.write(val). El parámetro val es el byte (o serie de bytes) a enviar.

 En nuestro sketch, enviaremos un valor char dependiendo del estado del pin 8. Enviaremos el valor char de ‘1’ si el pin 8 está ALTO o un valor char de ‘0’ si el pin 8 está BAJO.

				
					void setup() {
  pinMode(8, INPUT_PULLUP); // set push button pin as input
  pinMode(13, OUTPUT);      // set LED pin as output
  digitalWrite(13, LOW);    // switch off LED pin
  Serial.begin(9600);       // initialize UART with baud rate of 9600 bps
}
void loop() {
  if (Serial.available()) {
    char data_rcvd = Serial.read();   // read one byte from serial buffer and save to data_rcvd
    if (data_rcvd == '1') digitalWrite(13, HIGH); // switch LED On
    if (data_rcvd == '0') digitalWrite(13, LOW);  // switch LED Off
  }
  if (digitalRead(8) == HIGH) Serial.write('0');    // send the char '0' to serial if button is not pressed.
  else Serial.write('1');                           // send the char '1' to serial if button is pressed.
}
				
			

CARGA Y PRUEBA DEL SKETCH

Guarda el sketch como arduino_uart_tutorial.ino. El paso restante es subir el sketch a ambas placas Arduino Uno. Recuerda desconectar los cables conectados a los pines TX0 y RX0 antes de subir el sketch. Después de subirlo con éxito, vuelve a conectar los cables en los pines TX0 y RX0.

Después de la carga, podemos controlar el LED incorporado de una de las placas pulsando el botón conectado a la otra placa. Nuestro sketch comprueba el estado del botón y envía un valor char correspondiente de ‘0’ o ‘1’ a la otra placa para controlar el LED incorporado.

 

 Jan Mallari. How to Set Up UART Communication on the Arduino. Circuit Basics. https://www.circuitbasics.com/how-to-set-up-uart-communication-for-arduino/

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *