Comunicación serial Arduino – Arduino

Introducción

Una actividad recurrente en el área de electrónica y programación es la comunicación entre dos dispositivos digitales, como por ejemplo: la comunicación entre dos microcontroladores, la comunicación entre un microcontrolador y nuestra computadora, un microcontrolador y un periférico externo (teclado, mouse, joystick, etc.).

Básicamente la comunicación serial transmite y/o recibe la información byte a byte mediante un solo pin de manera secuencial y sincronizado por un reloj, en lugar de utilizar una cantidad de pines igual a la cantidad de bytes transmitidos y/o recibidos como solía suceder en una comunicación en paralelo, este último caso no es para nada eficiente. Dentro de la comunicación serial tenemos la siguiente clasificación:

  • Comunicación asincrónica

No existe coordinación en la transmisión y/o recepción de datos, es decir, cualquier equipo puede enviar y/o recibir información en cualquier momento.

  • Comunicación sincrónica

Existe coordinación en la transmisión y/o recepción de datos, dicha coordinación se da cada determinado tiempo.

Circuito a realizar

Para este proyecto vamos a necesitar los siguientes componentes:

  • 2 Placas Arduino (En este caso empleo dos Arduino Nano).
  • Cable USB-Mini B.
  • Cables Jumper Male-Male.
  • Protoboard.
Pines Tx y Rx para la comunicación serial

¡Empezamos con el código!

Script para el transmisor

/*
 * Envío de datos de Arduino a Python
 * Carlos Andrés Saldaña Amézquita
 * 
 * ▬▬▬▬▬▬▬▬▬ SÍGUEME TODOMAKER ▬▬▬▬▬▬▬▬▬▬
 * Sitio web: https://todomaker.com/
 * Instagram: https://bit.ly/3v1NmXp
 * Facebook: https://bit.ly/34IWbuH
 * YouTube: https://bit.ly/3LJRtx6
*/

// Declaramos un char array de 9 elementos
char data[9] = "TODOMAKER";

void setup() {
  // Inicializamos la velocidad de baudio
  Serial.begin(9600);
}

void loop() {
  // Leemos los 9 bytes de nuestro array
  Serial.write(data, 9);
  // Imprimimos en terminal cada 1s
  delay(1000);
}

Explicación del código

Iniciamos creando un char array y le asignamos el nombre de data, este array almacenará los caracteres de “TODOMAKER”. Luego de esto pasamos a la función setup() y declaramos la velocidad de baudios a emplear, en este caso 9600.

// Declaramos un char array de 9 elementos
char data[9] = "TODOMAKER";

void setup() {
  // Inicializamos la velocidad de baudio
  Serial.begin(9600);
}

Pasamos a la función loop(), realizamos la lectura de los 9 bytes de nuestro array e imprimimos el resultado cada segundo en la terminal de Arduino.

void loop() {
  // Leemos los 9 bytes de nuestro array
  char data[9] = "TODOMAKER";
  // Imprimimos en terminal cada 1s
  delay(1000);
}

Script para el receptor

/*
 * Envío de datos de Arduino a Python
 * Carlos Andrés Saldaña Amézquita
 * 
 * ▬▬▬▬▬▬▬▬▬ SÍGUEME TODOMAKER ▬▬▬▬▬▬▬▬▬▬
 * Sitio web: https://todomaker.com/
 * Instagram: https://bit.ly/3v1NmXp
 * Facebook: https://bit.ly/34IWbuH
 * YouTube: https://bit.ly/3LJRtx6
*/

// Char array para almacenar la data entrante
char dataRecibida[10];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

}

void loop() {
  // Lectura byte por byte
  Serial.readBytes(dataRecibida, 9);
  Serial.println(dataRecibida);
  delay(1000);
  
}

Explicación del código

Declaramos un char array de 10 elementos para recibir la data enviada por el script del transmisor y en la función setup() inicializamos la velocidad de baudios. Es importante mencionar que la velocidad de baudios, tanto en el script del transmisor como en el script del receptor tienen que coincidir.

// Char array para almacenar la data entrante
char dataRecibida[10];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

}

En la función loop() leemos el array dataRecibida e imprimimos cada segundo en nuestra terminal.

void loop() {
  // Lectura byte por byte
  Serial.readBytes(dataRecibida, 9);
  Serial.println(dataRecibida);
  delay(1000);
  
}

Resultados

Conclusiones

Este proyecto es perfecto para entender como funciona la comunicación serial, en este caso se realiza la comunicación de 2 Arduino mediante el puerto serial, pero el concepto dado y parte del código sientan las bases para que tú puedas realizar este tipo de comunicación para cualquier otro sistema. Entendiendo la aplicación dada en este post, ustedes podrán escalar el proyecto a sistemas de monitoreo y control, transmisión de datos y si en caso, necesitas asesoría en estos puntos, no dudes en dejar un comentario que el equipo de TodoMaker estará encantado de guiarte en el desarrollo de tus proyectos.

Mantente al pendiente de nuestras publicaciones y síguenos en nuestras redes sociales, estoy seguro que encontrarán mucha información de su interés. Si desean aprender algo en concreto referente a estas tecnologías lo pueden dejar en los comentarios.

Te invitamos a tomar el curso de Introducción al ESP32: Introducción al ESP32 | TodoMaker’s School

Previous Post
Next Post