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.
Índice de Contenido
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
Esquema eléctrico Arduino Mega. (x2).
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”.
Resultado final.
Ejemplo de comunicación.