Enviar Datos y Leer Puerto Serie con Arduino - Comunicación Serial
¡Bienvenido al octavo capítulo de este curso de Arduino desde cero en Español! En el tutorial anterior te expliqué qué es y cómo controlar un servomotor. Hoy vas a aprender cómo enviar datos y leer el puerto serie con Arduino. Gracias a ello podrás hacer que tu microcontrolador se pueda comunicar tu PC u otro microcontrolador, lo cual abre un mundo de posibilidades.
¡Suscríbete a nuestro canal de YouTube para aprender más sobre Arduino!
Qué es y cómo funciona el puerto serial
Antes de pasar con el código, es importante que entiendas la teoría. Lo primero que tienes que saber es que «puerto» es el nombre que se le da a las interfaces que permiten la comunicación entre dos dispositivos.
Como los dispositivos electrónicos solo entienden de bits, es decir, de ceros y unos, toda la información que se envía a través del puerto es en bits. En la imagen de abajo puedes ver dos tipos de comunicación diferentes.

La primera, que es la que está arriba, es la comunicación serial. Como podrás imaginar por su nombre, éste es el tipo de comunicación que utiliza el puerto serie. En este caso, todos los bits se envían en una secuencia. Esto quiero decir que primero se envía un bit, después otro, después otro, etc.
Justo abajo se encuentra la comunicación en paralelo. Es otro tipo de comunicación en el cual todos los bits se envían a la vez, de forma simultánea. De primeras puedes pensar que la comunicación en paralelo es más rápida. Sin embargo, gracias a los avances tecnológicos la comunicación serial es más rápida y se utiliza mucho más.
Además, por cada bit que es capaz de enviar la comunicación en paralelo de forma simultánea, se necesita una conexión. Si por ejemplo se envían 8 bits a la vez, serán necesarias como mínimo 8 conexiones. Sin embargo, en la comunicación serial, solo se necesitan 2 conexiones, RX para recibir datos y TX para enviarlos.
Enviar datos por el puerto serie con Arduino
El objetivo del código que hay abajo es crear un contador que cuente del 1 al 10 y que Arduino nos envíe el valor que guarda dicho contador a través del puerto serie.
Para utilizar el puerto serie con Arduino lo primero que tienes que hacer es iniciarlizarlo. Para ello debes utilizar la función «Serial.begin()» y el único parámetro que le tienes que pasar son los bits por segundo, es decir, la velocidad de transmisión de datos. Abre el monitor serie y abajo a la derecha puedes ver los valores estándares de velocidad. Yo en mi caso estoy utilizando 9600 bps.
Con la función «Serial.print()» Arduino nos envía datos a través del puerto serie. Dentro de los paréntesis tienes que escribir la variable que quieres que te envíe. También podría ser un dato en concreto, como por ejemplo «Hello», un 10 o lo que necesites. En este caso como queremos conocer el valor de la variable «cont», que es el contador, escribimos dicha variable dentro de los paréntesis de la función.
Si subes el programa y abres el monitor serie puedes ver la cuenta del 1 al 10. Sin embargo, cada número aparece al lado del otro sin ningún espacio, por lo que es bastante difícil leerlos. Si en vez de la función «Serial.print()», utilizas la función «Serial.println()» para enviar datos por el puerto serie con Arduino, los números aparecerán uno debajo de otro, siendo mucho más fácil leerlos.
int cont = 0; void setup() { //Inicializar puerto serie Serial.begin(9600); } void loop() { cont++; //Enviar datos por el puerto serie //Serial.print(cont); Serial.println(cont); if(cont>=10){ cont = 0; } delay(1000); }
Leer el puerto serie con Arduino
Hasta este momento, ha sido Arduino el que ha estado enviando la información o datos a tu ordenador personal. ¿Qué ocurre si quieres hacer justo lo contrario? Es decir, que tu ordenador personal le envíe datos a tu placa de Arduino. Esto es lo que vamos a ver en este apartado.
Antes de empezar con el código necesitas conectar un LED. El objetivo del programa es el siguiente: si le envías una «a» se enciende el LED, si es una «b» se apaga y si es cualquier otra cosa no ocurre nada.
En la función «void setup()» utilizo como siempre la función «Serial.begin()» para inicilizar el puerto serial. En este caso también lo hago con una velocidad de 9600 bps. Para poder encender el LED configuro el pin al que está conectado como un pin de salida.
Para leer el puerto serie con Arduino, lo primero que tienes que hacer es comprobar si está disponible o no. ¿Cómo haces ésto? Pues utilizando la función «Serial.available()». Esta función devuelve un 0 si el puerto está ocupado y un 1 si no lo está.
En caso de que esté disponible, utilizo la función «Serial.read()» para leer el puerto serie, y guardo el valor leído en la variable «option». Como te he dicho al principio, si el valor leído es una «a» enciendo el LED y si es una «b» lo apago.
char option = ' '; int LED = 12; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(LED, OUTPUT); } void loop() { // put your main code here, to run repeatedly: if(Serial.available() != 0){ option = Serial.read(); if(option == 'a'){ digitalWrite(LED, HIGH); } else if(option == 'b'){ digitalWrite(LED, LOW); } } delay(100); }
Enviar datos con el monitor serie de Arduino
Posiblemente te estés preguntado cómo puedes ahora enviarle datos desde tu PC a Arduino. Podrías desarrollar un programa en Python, C, C++ o cualquier otro lenguaje de programación que se ejecutara en tu ordenador e hiciera dicha tarea.
Sin embargo, ¡hay una manera mucho más sencilla de hacerlo! Simplemente abre el monitor serie de Arduino. Arriba tienes un espacio donde puedes escribir. Simplemente escribe lo que quieras enviarle a Arduino y dale al botón de enviar que hay arriba a la derecha.
Si has compilado y subido el programa del apartado anterior, al enviar una «a», el led debería encenderse, y al enviar una «b», apagarse.
