Taller Protocols 
La comunicación entre Arduinos se refiere al intercambio de datos y comandos entre dos o más placas Arduino utilizando algún tipo de protocolo de comunicación. Esto permite que los Arduinos se comuniquen entre sí y compartan información, lo que es útil en proyectos donde se requiere la coordinación o interacción de múltiples dispositivos.
Existen varios métodos y protocolos de comunicación que se pueden utilizar para establecer la comunicación entre Arduinos, algunos de los cuales ya mencionamos anteriormente. Algunos de los protocolos más comunes incluyen UART, I2C, SPI y CAN.
La elección del protocolo de comunicación dependerá de varios factores, como la velocidad de transmisión requerida, la distancia entre los Arduinos, la cantidad de dispositivos que necesitan comunicarse y las características específicas del proyecto.
Al establecer la comunicación entre Arduinos, uno de ellos actúa como el "maestro" o "emisor", enviando los datos, mientras que el otro(s) actúa como el "esclavo" o "receptor", recibiendo los datos transmitidos. Los datos pueden ser cualquier información que necesite ser intercambiada, como comandos, valores de sensores, estado de actuadores, entre otros.
La comunicación entre Arduinos puede ser bidireccional, lo que significa que ambos Arduinos pueden enviar y recibir datos, o puede ser unidireccional, donde un Arduino envía datos y el otro solo los recibe.
Tomada de: http://www.practicasconarduino.com/manualrapido/conexin_entre_dos_arduinos_por_cable.html
Conceptos clave relacionados con el protocolo LC2H
ASCII: Es un código de caracteres que asigna un número único a cada letra, número y símbolo utilizado en la comunicación de texto. Los caracteres alfabéticos mayúsculos (A-Z) en ASCII tienen valores hexadecimales que van desde 0x41 hasta 0x5A.

Conversión a hexadecimal: Para transmitir una letra en LC2H, se convierte su valor ASCII en un valor hexadecimal correspondiente. Por ejemplo, la letra 'A' tiene un valor ASCII de 65, que en hexadecimal es 0x41. De manera similar, 'B' tiene un valor ASCII de 66, que en hexadecimal es 0x42, y así sucesivamente.

Comunicación serie: En el contexto de Arduino, la comunicación serie se refiere a la transferencia de datos a través de un puerto serie, como el puerto USB. Los Arduinos tienen un puerto serie incorporado que permite la comunicación entre ellos o con otros dispositivos conectados.

Serial.write(): Es una función en Arduino que se utiliza para enviar un byte de datos a través del puerto serie. En el caso de LC2H, se utiliza para enviar los valores hexadecimales de las letras.

Serial.read(): Es una función en Arduino que se utiliza para leer un byte de datos entrantes desde el puerto serie. En el receptor Arduino, se utiliza para recibir los valores hexadecimales de las letras enviadas por el emisor.

Al implementar el protocolo LC2H, el emisor Arduino convierte las letras mayúsculas en sus valores hexadecimales ASCII correspondientes y los envía como bytes individuales. El receptor Arduino lee los bytes entrantes y los convierte nuevamente a las letras mayúsculas originales.

Es importante asegurarse de que tanto el emisor como el receptor estén configurados para la misma velocidad de transmisión (baud rate) para garantizar una comunicación correcta.
Protocolos de comunicación comunes
1. UART (Universal Asynchronous Receiver-Transmitter): Es un protocolo de comunicación serial utilizado ampliamente en los microcontroladores, incluidos los Arduinos. Se basa en la transmisión de bits en serie a una velocidad predefinida y utiliza una línea para transmitir datos (TX) y otra para recibir datos (RX).
I2C (Inter-Integrated Circuit): Es un protocolo de comunicación en serie que permite la transferencia de datos entre varios dispositivos utilizando solo dos líneas: una para la transmisión de datos (SDA) y otra para el reloj (SCL). Es utilizado comúnmente para conectar múltiples dispositivos a un Arduino, como sensores, pantallas LCD y módulos de memoria.

Tomada de: https://www.circuitbasics.com/basics-uart-communication/
2. SPI (Serial Peripheral Interface): Es otro protocolo de comunicación en serie que se utiliza para la transferencia de datos entre dispositivos, como microcontroladores, sensores y memorias. Utiliza cuatro líneas: MOSI (Master Out Slave In), MISO (Master In Slave Out), SCK (Serial Clock) y SS (Slave Select) para la comunicación.

Tomada de: https://es.wikipedia.org/wiki/Serial_Peripheral_Interface
3. CAN (Controller Area Network): Es un protocolo de comunicación ampliamente utilizado en aplicaciones de automatización industrial y automotriz. Permite la comunicación entre varios dispositivos a través de un bus común. Es adecuado para aplicaciones que requieren alta velocidad y resistencia al ruido.
Tomada de: https://erg.abdn.ac.uk/users/gorry/eg3576/CAN.html
Para implementar el protocolo de comunicación LC2H (Letter Communication to Hex) y permitir la comunicación serie de letras mayúsculas alfabéticas entre dos Arduinos, se realizaron los siguientes pasos. Este protocolo convierte cada letra en su representación hexadecimal ASCII correspondiente antes de la transmisión.

// Define el rango ASCII para letras mayúsculas
#define LETRA_INICIAL 'A'
#define LETRA_FINAL 'Z'

void setup() {
  Serial.begin(9600);  // Inicializa la comunicación serie
}

void loop() {
  // Lee la entrada del usuario u otras fuentes
  char entrada = 'A';  // Ejemplo de entrada, cámbialo según sea necesario
  
  // Verifica si la entrada es una letra mayúscula
  if (entrada >= LETRA_INICIAL && entrada <= LETRA_FINAL) {
    // Convierte la letra a su representación hexadecimal ASCII
    byte valorHex = entrada - 'A' + 0x41;
    
    // Envía la letra por el puerto serie como un solo byte
    Serial.write(valorHex);
  }
  
  delay(1000);  // Retardo entre transmisiones
}


Receptor:

void setup() {
  Serial.begin(9600);  // Inicializa la comunicación serie
}

void loop() {
  if (Serial.available()) {
    // Lee el byte entrante
    byte valorHex = Serial.read();
    
    // Convierte el valor hexadecimal ASCII nuevamente a la letra correspondiente
    char letraRecibida = valorHex - 0x41 + 'A';
    
    // Imprime la letra recibida
    Serial.print("Letra recibida: ");
    Serial.println(letraRecibida);
  }
  
  delay(100);  // Retardo entre lecturas
}
Aquí, el Arduino emisor lee una entrada (establecida como 'A'), verifica si es una letra mayúscula, la convierte a su representación hexadecimal ASCII y la envía a través del puerto serie utilizando la función Serial.write().

El Arduino receptor verifica continuamente la existencia de datos entrantes utilizando Serial.available() y lee el byte entrante con Serial.read(). Luego, convierte el valor hexadecimal ASCII nuevamente a la letra correspondiente e imprime el resultado en el monitor serie.

El protocolo de comunicación LC2H (Letter Communication to Hex) es un protocolo simple diseñado para transmitir letras mayúsculas alfabéticas entre dispositivos utilizando una comunicación serie. La idea principal detrás de LC2H es convertir cada letra en su representación hexadecimal ASCII antes de la transmisión.
Communication Protocols
Published:

Communication Protocols

Published:

Creative Fields