Para el proyecto de monitorización de mi pequeño huerto
urbano necesito
comunicar dos módulos Arduino de forma inalámbrica, para eso tenemos distintas
opciones y dependiendo de las necesidades podremos usar un sistema u otro.
En mi caso, solo necesito enviar unos pocos datos a pocos metros, lo que viene
siendo desde mi balcón donde tengo un módulo hasta el router donde tengo el otro
conectado a Internet.
Para ello he usado un transmisor y un receptor de RF a 433Mhz. Lo más
interesante de estos módulos es su bajo coste y lo podemos encontrar fácilmente
en Amazon
o DX.com por menos de 5 euros.
Para usar estos módulos podemos usar la librería
VirtualWire la cual nos hará el
proceso mucho más sencillo.
Modulo emisor:
Conexiones:
12345
Arduino | Emisor
----------- | ---------------
5V | VCC
GND | GND
Digital 12 | DATA
#include <VirtualWire.h>voidsetup(){// Para el ledpinMode(13,OUTPUT);// Pin de escrituravw_set_tx_pin(12);// Velocidad de transferencia en Kbps// debe ser la misma en el receptorvw_setup(2000);}voidloop(){// Un mensaje cualquiera, podríamos preparar una cadena// concatenando distintos valores de sensores.Stringmessage="hello world!";// Convertimos el string a un array char.charbuf[message.length()];message.toCharArray(buf,message.length()+1);// Iluminamos el led para indicar que estamos transmitiendodigitalWrite(13,true);// Enviamos el mensajevw_send((uint8_t*)buf,strlen(buf));// Se mantiene en espera hasta que todo el mensaje se ha enviadovw_wait_tx();// Apagamos el leddigitalWrite(13,false);// Simplemente esperamos un segundodelay(1000);}
Modulo receptor:
Conexiones:
12345
Arduino | Receptor
----------- | -----------------------------------------
5V | VCC
GND | GND
Digital 11 | DATA # Uno de los dos disponibles
#include <VirtualWire.h>Stringdata;voidsetup(){Serial.begin(9600);// Para el ledpinMode(13,OUTPUT);// Pin de lecturavw_set_rx_pin(8);// Velocidad de transferencia en Kbps// debe ser la misma en el transmisorvw_setup(2000);// Ponemos en escuchavw_rx_start();}voidloop(){// Inizializamos el buffer con las constantes definidas en VirtualWireuint8_tbuf[VW_MAX_MESSAGE_LEN];uint8_tbuflen=VW_MAX_MESSAGE_LEN;if(vw_get_message(buf,&buflen)){// Iluminamos el led para indicar que hay una transmisión entrantedigitalWrite(13,true);// Leemos el buffer y lo volcamos en la variable datadata="";inti;for(i=0;i<buflen;i++){data+=String(char(buf[i]));}// Lo imprimimos por el puerto serieSerial.println(data);// Y apagamos el leddigitalWrite(13,false);}}
Con todo enchufado y el código cargado en ambos módulos podremos ver los leds
parpadeando y por el puerto serie del receptor los mensajes que manda el emisor.