Tabla de contenido:

Comunicación serie Arduino: 5 pasos
Comunicación serie Arduino: 5 pasos

Video: Comunicación serie Arduino: 5 pasos

Video: Comunicación serie Arduino: 5 pasos
Video: Curso Arduino 6: Comunicación Serial 2024, Noviembre
Anonim
Comunicación serial Arduino
Comunicación serial Arduino

Muchos proyectos de Arduino se basan en la transmisión de datos entre varios Arduino.

Ya sea que sea un aficionado que esté construyendo un automóvil RC, un avión RC o diseñando una estación meteorológica con una pantalla remota, necesitará saber cómo transferir datos en serie de forma confiable de un Arduino a otro. Desafortunadamente, para los aficionados es difícil lograr que la comunicación de datos en serie funcione en sus propios proyectos, ya que los datos en serie se envían como un flujo de bytes.

Sin ningún tipo de contexto dentro del flujo de bytes, es casi imposible interpretar los datos. Sin poder interpretar los datos, sus Arduinos no podrán comunicarse de manera confiable. La clave es agregar estos datos de contexto al flujo de bytes utilizando un diseño de paquete en serie estándar.

El diseño de paquetes en serie, el relleno de paquetes y el análisis sintáctico de paquetes es complejo y difícil de lograr. Afortunadamente para los usuarios de Arduino, hay bibliotecas disponibles que pueden hacer toda esta lógica compleja detrás de escena para que pueda concentrarse en hacer que su proyecto funcione sin problemas adicionales. Este Instructable utilizará la biblioteca SerialTransfer.h para el procesamiento de paquetes en serie.

En resumen: este Instructable repasará cómo puede implementar datos seriales robustos fácilmente en cualquier proyecto utilizando la biblioteca SerialTransfer.h. Si desea obtener más información sobre la teoría de bajo nivel sobre la comunicación en serie robusta, consulte este tutorial.

Suministros

  • 2 arduinos

    Se recomienda encarecidamente que utilice Arduinos que tengan varios UART de hardware (es decir, Arduino Mega)

  • Conectar cable
  • Instalar SerialTransfer.h

    Disponible a través del administrador de bibliotecas de Arduino IDE

Paso 1: Conexiones físicas

Conexiones físicas
Conexiones físicas

Al utilizar la comunicación en serie, se deben tener en cuenta algunos puntos de cableado:

  • ¡Asegúrese de que todas las conexiones a tierra estén conectadas!
  • El pin Arduino TX (Transmitir) debe estar conectado al pin RX (Recibir) del otro Arduino

Paso 2: cómo utilizar la biblioteca

Cómo utilizar la biblioteca
Cómo utilizar la biblioteca

SerialTransfer.h le permite enviar fácilmente grandes cantidades de datos utilizando un protocolo de paquetes personalizado. A continuación se muestra una descripción de todas las funciones de la biblioteca, muchas de las cuales utilizaremos más adelante en este tutorial:

SerialTransfer.txBuff

Esta es una matriz de bytes en la que todos los datos de carga útil que se envían en serie se almacenan en búfer antes de la transmisión. Puede llenar este búfer con bytes de datos para enviar a otro Arduino.

SerialTransfer.rxBuff

Esta es una matriz de bytes donde todos los datos de carga recibidos del otro Arduino se almacenan en búfer.

SerialTransfer.bytesRead

El número de bytes de carga útil recibidos por el otro Arduino y almacenados en SerialTransfer.rxBuff

SerialTransfer.begin (Stream & _port)

Inicializa una instancia de la clase de la biblioteca. Puede pasar cualquier objeto de clase "Serie" como parámetro, ¡incluso objetos de clase "SoftwareSerial"!

SerialTransfer.sendData (const uint16_t y messageLen)

Esto hace que su Arduino envíe un número de bytes "messageLen" en el búfer de transmisión al otro Arduino. Por ejemplo, si "messageLen" es 4, los primeros 4 bytes de SerialTransfer.txBuff se enviarán vía serial al otro Arduino.

SerialTransfer.available ()

Esto hace que su Arduino analice cualquier dato serial recibido del otro Arduino. Si esta función devuelve el booleano "verdadero", significa que un nuevo paquete se ha analizado correctamente y los datos del paquete recién recibido están almacenados / disponibles en SerialTransfer.rxBuff.

SerialTransfer.txObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Introduce el número "len" de bytes de un objeto arbitrario (byte, int, float, double, struct, etc.) en el búfer de transmisión comenzando en el índice especificado por el argumento "index".

SerialTransfer.rxObj (const T & val, const uint16_t & len, const uint16_t & index = 0)

Lee "len" el número de bytes del búfer de recepción (rxBuff) comenzando en el índice especificado por el argumento "index" en un objeto arbitrario (byte, int, float, double, struct, etc.).

NOTA:

La forma más sencilla de transmitir datos es definir primero una estructura que contenga todos los datos que desea enviar. El Arduino en el extremo receptor debe tener definida una estructura idéntica.

Paso 3: transmitir datos básicos

El siguiente esquema transmite tanto el valor ADC de analogRead (0) como el valor de analogRead (0) convertido a voltaje a Arduino # 2.

Sube el siguiente boceto a Arduino # 1:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; voltaje de flotación; } datos; configuración vacía () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } bucle vacío () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (datos, tamaño de (datos)); myTransfer.sendData (tamaño de (datos)); retraso (100); }

Paso 4: Reciba datos básicos

El siguiente código imprime los valores de voltaje y ADC recibidos de Arduino # 1.

Sube el siguiente código a Arduino # 2:

#include "SerialTransfer.h"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; voltaje de flotación; } datos; configuración vacía () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (Serial1); } bucle vacío () {if (myTransfer.available ()) {myTransfer.rxObj (datos, tamaño de (datos)); Serial.print (data.adcVal); Serial.print (''); Serial.println (voltaje.tensión); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("ERROR:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); else if (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); else if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

Paso 5: prueba

Una vez que ambos bocetos se hayan cargado en sus respectivos Arduino, puede usar el Monitor serial en Arduino # 2 para verificar que está recibiendo datos de Arduino # 1.

Recomendado: