Tabla de contenido:
- Suministros
- Paso 1: Conexiones físicas
- Paso 2: cómo utilizar la biblioteca
- Paso 3: transmitir datos básicos
- Paso 4: Reciba datos básicos
- Paso 5: prueba
Video: Comunicación serie Arduino: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
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
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
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:
Comunicación inalámbrica de largo alcance, 1,8 km, Arduino a Arduino con el HC-12: 6 pasos (con imágenes)
Comunicación inalámbrica de largo alcance, 1.8 km, Arduino a Arduino con el HC-12 .: En este instructivo, aprenderá cómo comunicarse entre Arduinos a una larga distancia de hasta 1.8 km al aire libre. El HC-12 es un puerto serie inalámbrico módulo de comunicación muy útil, extremadamente potente y fácil de usar. Primero leerás
Comunicación en serie Arduino y Python - Pantalla del teclado: 4 pasos
Comunicación en serie Arduino y Python - Pantalla del teclado: este proyecto está hecho para usuarios de Mac, pero también se puede implementar para Linux y Windows, el único paso que debería ser diferente es la instalación
Comunicación en serie inalámbrica con Bluefruit: 4 pasos
Comunicación en serie inalámbrica usando Bluefruit: Aquí hay una guía simple paso a paso para reemplazar sus cables con una conexión bluetooth de baja energía: Me tomó un tiempo resolver esto porque casi no hay documentación sobre cómo hacer esto con la tecnología moderna de bluetooth de baja energía, como como el Bluefrui
SmartMirror basado en web mediante comunicación en serie: 6 pasos
SmartMirror basado en web que usa comunicación en serie: este instructivo se entrega con todo el código listo para usar. El desarrollo fue muy complicado pero una vez configurado es muy fácil de personalizar. Echa un vistazo y disfruta;)
Comunicación en serie con ARM Cortex-M4: 4 pasos
Comunicación en serie usando ARM Cortex-M4: este es un proyecto basado en una placa de pruebas que usa ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) para la comunicación en serie usando un terminal virtual. La salida se puede obtener en la pantalla LCD de 16x2 y la entrada para la comunicación en serie se puede dar en Serial Mo