Arduino - Comunicación

Se han definido cientos de protocolos de comunicación para lograr este intercambio de datos. Cada protocolo se puede clasificar en una de las dos categorías: paralelo o en serie.

Comunicación paralela

La conexión en paralelo entre el Arduino y los periféricos a través de puertos de entrada / salida es la solución ideal para distancias más cortas de hasta varios metros. Sin embargo, en otros casos cuando es necesario establecer comunicación entre dos dispositivos para distancias más largas, no es posible utilizar una conexión en paralelo. Las interfaces paralelas transfieren varios bits al mismo tiempo. Por lo general, requieren buses de datos, que se transmiten a través de ocho, dieciséis o más cables. Los datos se transfieren en oleadas enormes y estrepitosas de 1 y 0.

Ventajas e inconvenientes de la comunicación paralela

La comunicación paralela ciertamente tiene sus ventajas. Es más rápido que en serie, sencillo y relativamente fácil de implementar. Sin embargo, requiere muchos puertos y líneas de entrada / salida (E / S). Si alguna vez ha tenido que mover un proyecto de un Arduino Uno básico a un Mega, sabe que las líneas de E / S en un microprocesador pueden ser preciosas y pocas. Por lo tanto, preferimos la comunicación en serie, sacrificando la velocidad potencial por el espacio de los pines.

Módulos de comunicación en serie

Hoy en día, la mayoría de las placas Arduino están construidas con varios sistemas diferentes para la comunicación en serie como equipo estándar.

Cuál de estos sistemas se utiliza depende de los siguientes factores:

  • ¿Con cuántos dispositivos tiene que intercambiar datos el microcontrolador?
  • ¿Qué tan rápido debe ser el intercambio de datos?
  • ¿Cuál es la distancia entre estos dispositivos?
  • ¿Es necesario enviar y recibir datos simultáneamente?

Una de las cosas más importantes en relación con la comunicación en serie es la Protocol, que debe observarse estrictamente. Es un conjunto de reglas, que deben aplicarse de manera que los dispositivos puedan interpretar correctamente los datos que intercambian mutuamente. Afortunadamente, Arduino se encarga automáticamente de esto, de modo que el trabajo del programador / usuario se reduce a una simple escritura (datos a enviar) y lectura (datos recibidos).

Tipos de comunicaciones en serie

La comunicación en serie se puede clasificar además como:

  • Synchronous - Los dispositivos que están sincronizados utilizan el mismo reloj y su tiempo está sincronizado entre sí.

  • Asynchronous - Los dispositivos asíncronos tienen sus propios relojes y se activan por la salida del estado anterior.

Es fácil saber si un dispositivo es síncrono o no. Si se da el mismo reloj a todos los dispositivos conectados, entonces son síncronos. Si no hay línea de reloj, es asíncrona.

Por ejemplo, el módulo UART (transmisor receptor universal asincrónico) es asincrónico.

El protocolo serial asíncrono tiene una serie de reglas integradas. Estas reglas no son más que mecanismos que ayudan a garantizar transferencias de datos sólidas y sin errores. Estos mecanismos, que obtenemos para evitar la señal de reloj externo, son:

  • Bits de sincronización
  • Bits de datos
  • Bits de paridad
  • Tasa de baudios

Bits de sincronización

Los bits de sincronización son dos o tres bits especiales transferidos con cada paquete de datos. Son el bit de inicio y el bit de parada. Fieles a su nombre, estos bits marcan el comienzo y el final de un paquete respectivamente.

Siempre hay un solo bit de inicio, pero el número de bits de parada se puede configurar en uno o dos (aunque normalmente se deja en uno).

El bit de inicio siempre se indica mediante una línea de datos inactiva que va de 1 a 0, mientras que los bits de parada volverán al estado inactivo manteniendo la línea en 1.

Bits de datos

La cantidad de datos en cada paquete se puede establecer en cualquier tamaño de 5 a 9 bits. Ciertamente, el tamaño de datos estándar es su byte básico de 8 bits, pero otros tamaños tienen sus usos. Un paquete de datos de 7 bits puede ser más eficiente que el de 8, especialmente si solo está transfiriendo caracteres ASCII de 7 bits.

Bits de paridad

El usuario puede seleccionar si debe haber un bit de paridad o no y, en caso afirmativo, si la paridad debe ser par o impar. El bit de paridad es 0 si el número de unos entre los bits de datos es par. La paridad impar es todo lo contrario.

Tasa de baudios

El término velocidad en baudios se utiliza para indicar el número de bits transferidos por segundo [bps]. Tenga en cuenta que se refiere a bits, no a bytes. Por lo general, el protocolo requiere que cada byte se transfiera junto con varios bits de control. Significa que un byte en el flujo de datos en serie puede constar de 11 bits. Por ejemplo, si la velocidad en baudios es de 300 bps, se pueden transferir un máximo de 37 y un mínimo de 27 bytes por segundo.

Arduino UART

El siguiente código hará que Arduino envíe un saludo al mundo cuando se inicie.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
   Serial.println("hello world"); //print hello world
}

void loop() {

}

Después de que el boceto de Arduino se haya cargado en Arduino, abra el monitor serial

en la sección superior derecha de Arduino IDE.

Escriba cualquier cosa en el cuadro superior del Monitor serial y presione enviar o ingresar en su teclado. Esto enviará una serie de bytes al Arduino.

El siguiente código devuelve todo lo que recibe como entrada.

El siguiente código hará que Arduino entregue una salida dependiendo de la entrada proporcionada.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
}

void loop() {
   if(Serial.available()) //if number of bytes (characters) available for reading from { 
      serial port
      Serial.print("I received:"); //print I received
      Serial.write(Serial.read()); //send what you read
   }
}

Darse cuenta de Serial.print y Serial.println enviará el código ASCII real, mientras que Serial.writeenviará de vuelta el texto real. Consulte los códigos ASCII para obtener más información.