Chat inalámbrico con Arduinos y APC220


En determinados proyectos con varios Arduino es necesario una comunicación entre ellos de forma inalámbrica. Transmitir datos de sensores o controlar dispositivos puede ser una de estas aplicaciones. En este artículo, aprenderemos a realizar este tipo de comunicación mediante los módulos de radiofrecuencia APC220. Realizaremos un divertido chat con dos Arduinos conectados a los módulos APC220.

Gracias al monitor serie que posee la IDE de Arduino, podremos visualizar los mensajes transmitidos y recibidos por radiofrecuencia entre dos Arduino.

Material necesario

  • 2 Arduinos. (Comprar arduino UNO)
  • 2 Módulos APC220. (Comprar módulos APC220)
  • 2 PC con la IDE de Arduino.

Artículos recomendados

chat apc220 4
Esquema eléctrico Arduino Mega. (x2).

chat apc220 3
Esquema gráfico Arduino Mega. (x2).

Funcionamiento

Las conexiones para los dos Arduinos son las mismas, al igual que el código del programa. Podemos apreciar, que los módulos están conectados al puerto serie 1 y no al 0 como se hace habitualmente, esto es simplemente para evitar tener que desconectar los módulos cada vez que se cargue un programa en Arduino; recordamos que la programación de Arduino emplea el puerto serie 0.

Código

char inChar; // Variable para almacenar los datos del puerto serie
boolean sending = false; // Variable para indicar que se está enviando
boolean receiving = false; // Variable para indicar que se está recibiendo

void setup(){
Serial.begin(9600); // Configuración de velocidad del puerto serie
Serial1.begin(9600); // Configuración de velocidad del puerto serie1 (Igual que APC220)
}

void loop(){

// Envio:
  if (Serial.available()) { // Si hay datos en el puerto serie:
    if(sending == false){ // Si no se estaba enviando un mensaje:
    Serial.print("Yo: "); // Escribimos etiqueta del mensaje
    sending = true; // Indicamos que se está enviando un mensaje
    }
  delay(100); // Esperamos para que lleguen todos los datos al buffer del puerto serie.
    while (Serial.available() > 0) { // Repetimos hasta que no queden datos en el buffer:
    inChar = Serial.read(); // Leemos carácter a carácter
    Serial1.write(inChar); // Enviamos el carácter escrito
    Serial.write(inChar); // Mostramos en pantalla el carácter enviado
    }
  } else if(sending == true){  // Si ya se han enviado todos los caracteres: 
  Serial1.println(); // Enviamos un salto de línea
  Serial.println(); // Saltamos a la siguiente línea
  sending = false; // Indicamos que ya no se está enviando un mensaje
  }

// Reccepción:
  if (Serial1.available()) { // Si hay datos en el puerto serie:
    if(receiving == false){ // Si no se estaba recibiendo un mensaje:
    Serial.print("El: "); // Escribimos etiqueta del mensaje
    receiving = true; // Indicamos que se está recibiendo un mensaje
    }
  delay(100); // Esperamos para que lleguen todos los datos al buffer del puerto serie.
    while (Serial1.available() > 0) { // Repetimos hasta que no queden datos en el buffer:
    inChar = Serial1.read(); // Leemos carácter a carácter
    Serial.write(inChar); // Mostramos en pantalla el carácter recibido
      if (inChar== '\n'){ // Si es el final de la línea:
      receiving = false; // Indicamos que el mensaje a finalizado
      }
    }
  }   
}

Descripción del código

El código está compuesto de dos partes generales, envío y recepción.

En el envío, Arduino estará a la espera de que se escriba un mensaje en el monitor serie. Como el monitor serie usa el puerto serie 0, usaremos la función Serial.available() para determinar cuándo hay datos en el buffer del puerto serie. Estos datos serán enviados por el puerto serie 1, en el que estará conectado el módulo APC220, y a su vez serán enviados al puerto serie 0, de esta forma se podrá ver en el monitor serie el mensaje que se envía.

Para que el receptor pueda identificar de una manera más fácil el final de un mensaje, se enviará un salto de línea con la instrucción Serial1.println().

La recepción es algo similar que el envío. El mensaje captado por el módulo APC220 será enviado al puerto serie 1. Arduino estará esperando ese mensaje con la función Serial1.available(), momento en el que leerá el mensaje y a su vez lo mostrar en el monitor serie por el puerto serie 0.

El final del mensaje se identificará por el símbolo correspondiente al salto de línea que se enviará al final de cada mensaje “n”.

chat apc220 2
Resultado final.

chat apc220 1
Ejemplo de comunicación.

Descargar sketch


Deja un comentario