Seleccionar página
< Todos los temas
Imprimir

Manejar Serial con microcontroladores (WIP)

Aprender a manejar comunicaciones por serial es esencial cuando se trabaja con microcontroladores como arduino, ESP32 o raspberry pico. Nos permite comunicar placas mediante ordenadores, móviles, lidars u otras placas de distinto tipo mediante cable o bluetooth.

La comunicación es bidireccional, es decir, se puede enviar y recibir tanto de un lado hacia el otro.

Para iniciar el serial primero debemos agregar la función Serial.begin() en el void setup y asignarle los baudios (bits por segundo) en el que va a trabajar. Tenemos diferentes velocidades que suelen ser 9600, 38400 y 115200 que son los más comunes. En arduino el máximo es 115200 y para los ESP32 pueden llegar a los 5000000. Estos valores son para transferencia de datos pero no es necesario utilizar tantos para el uso que se le va a dar. En esta Wiki usaremos 115200 que es más que suficiente.

Cuando iniciamos el serial ya podemos empezar a “printar” mensajes hacia nuestro monitor serial. Usaremos la función Serial.print() si queremos que se muestre en una sola línea o Serial.println() si lo mostraremos en la siguiente línea. OJO: usar Serial.print normal hará que todo lo que mostremos continuamente se printará en una sola línea hasta el infinito.

En el Serial.print añadiremos lo que queremos mostrar, en este caso un Hola mundo pero como es un texto literalmente debe estar entre “” comillas.

Código “Hola mundo”:

Código:

Veremos que habrá un led en pla placa que estará parpadeando rápido, ese es el indicador de que se está enviando datos por serial al pc.

Si aparecen caracteres extraños es porque no tenemos el mismo baudrate que hemos programado. Para cambiarlo lo tenemos abajo a la derecha del monitor.

A parte del mensaje podemos establecer el formato de salida: HEX hexadecimal, BIN binario, DEC y OCT. También agregar caracteres especiales que nos sirven para gestionar datos más complejos: \t tabulación, \n nueva línea o \r retorno de carro.

Código diferentes variables:

Código:

Ya hemos visto cómo enviar por serial diferentes tipos de mensajes, ahora nos pondremos con la recepción que es muy importante. Primero usaremos la función Serial.available() que cambiará de tamaño según vaya recibiendo bytes que se almacenan en el búffer: si recibo un “hola” son 4 bytes por lo que es mayor que 0 y el if se cumplirá:

Código recepción de Char:

Código:

Para leer los bytes que vayamos recibiendo se usa la función Serial.read() que lo almacenamos en una variable que llamaremos mensaje y será de tipo char, porque son letras que se irán mostrando una a una hasta el final.

Debemos destacar que al final de un mensaje hay varios modos de decir hasta dónde acaba (porque debe haber un principio y un final). Tenemos 4 modos:

  • Sin ajuste de línea: lo que escribamos será en una sola línea, que al enviar tecleamos Enter manualmente.
  • Nueva línea: se añadirá \n al final.
  • Ambos NL y CR: añade nueva línea \n y también retorno de carro \r que sirve para decir que aquí acaba todo el mensaje.
  • Retorno de carro: agrega sólo \r para mensajes de una línea simple.

Llegado el momento si queremos enviar un texto entero podemos llerlo de una sola vez. La función en este caso es Serial.readStringUntil(‘\n’), o sea lee string hasta nueva línea:

Código recepción de String:

Código:

Visto la emisión y recepción de mensajes simples procedamos a comunicar dos placas que se enviarán cada segundo una cuenta:

Código placa emisora:

Código:

Código placa receptora:

Código:

Esta comunicación se basa en dos placas conectadas al pc pero existen otras maneras inalámbricas mediante wifi, RF o bluetooth.

BluetoohSerial (WIP)

StringSplitter (WIP)

Notas

  • Asegurarse de tener los mismos baudios entre el emisor y el receptor.
Tabla de contenidos