
Tutorial WiFi
Es muy común querer conectar nuestros proyectos Arduino a la nube. WiFi es una de las maneras en que podemos hacer esto. Claro también podemos usar GPRS y lo haremos mas adelante. Por ahora veamos como conectar nuestra Arduino a una WiFi shield y lograr conectividad a la web.
Requisitos:
- Computadora (mac)
- Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry… Este tutorial en particular usa una Arduino MEGA.
- Wifi Shield & WiFi Library
- Arduino IDE (https://www.arduino.cc/en/Main/Software)
Estaremos usando el modulo WiFi de Roving Networks basado en la WiFly.

Aquí podemos ver la WiFi shield (en azul) con su modulo WiFi Bee (en rojo). En este caso, dado que es una shield como la Grove Shield para sensores, hay Shields específicos para un tipo de board. Aquí vemos que ya esta montada sobre la UNO. Esto es importante a la hora de comprar porque hay Shields para distintas boards ya que el pinout (la configuración de pines) puede variar por milímetros de distancia en algunos casos. Esto no quiere decir que no podrás usar una WiFi Shield para MEGA en una UNO, aunque las distancias sean distintas entre pines. Si la tienes o la has comprado por error, simplemente sera necesario usar cables para llegar de un pin a otro.
El código lo pueden descargar aquí…Arduino WiFi Tutorial
Es necesario modificar los parámetros:
-mySSID
-myPassword
-site (aquí pueden poner google.com por ejemplo)
Para configurar el modulo es necesario conectarlo a la UNO, ajustar los pines a Normal, PC, SoftSerial y subir el sketch Blink. Luego ajustamos los pines a Normal, PC, UART y abrimos el Serial Monitor en 9600 bps y No Line Ending. Aqui ingresamos $$$ y recibimos el mensaje “CMD” sin los “”. Ahora cambiamos a Carriage Return and el Serial Monitor y podemos enviar los siguientes comandos:
set ip dhcp 1
set wlan ssid nuestrowifi
set wlan key nuestra clave wep
set wlan channel 6
save
reboot
Podemos ahora ver nuestros parámetros desde el Serial Monitor con el comando get ip y debería darnos algo así:
AOK
<4.00> get ip
IF=DOWN
DHCP=ON
IP=192.168.1.185:2000
NM=255.255.255.0
GW=192.168.1.1
HOST=192.168.1.1:2000
PROTO=TCP,
MTU=1524
FLAGS=0x7
TCPMODE=0x0
BACKUP=0.0.0.0
y ahora tratamos de unirnos a la red manualmente:
join nuestrowifi
Auto-Assoc nuestrowifi chan=6 mode=WEP SCAN OK
Joining nuestrowifi now..
<4.00> Associated!
DHCP: Start
DHCP in 1090ms, lease=86400s
IF=UP
DHCP=ON
IP=192.168.1.59:2000
NM=255.255.255.0
GW=192.168.1.1
Listen on 2000
Estamos listos para el sketch!
Al montar el código a la UNO (con la WiFi montada encima) podemos enviar el request al servidor y ver la data.
La conexión en sí no es complicada. Simplemente se monta la WiFi shield sobre la UNO. Una vez ensamblada se puede conectar la UNO a la pc y subir el código. Al correrlo se pueden ver las LEDs funcionando en la WiFi shield de la siguiente manera:
La data que aparece en el Monitor Serial se puede ver aquí:

Excelente! Ya podemos conectarnos al internet. Esto abre nuestro abanico de proyectos:
- Podríamos crear un robot que tome muestras de aire, agua o cualquier fenómeno y postear data al internet.
- El internet puede ser un servidor, una aplicación web, twitter, Facebook, etc.
- Podríamos también controlar nuestro robot, su movimiento o decisiones via la nube!
Ahora vamos a combinar la recolección de datos de sensores con la transmisión de esos datos a la web. Así iniciará el nacimiento de nuestro robot!
EXTRA: Si queremos usar el NTP necesitamos hacer:
wifly.setTimeAddress(“129.6.15.30″);//ntp-nist.ldsbc.net”); //28, 29 or 64.113.32.5 or 216.229.0.179
wifly.setTimePort(123);
wifly.setTimezone(7);
wifly.setTimeEnable(5); //maybe because we dont want it to set time on powerup
wifly.time();
wifly.save();
delay(1000);
// there must have been a line with MyTime that I erased
uptime = wifly.getUptime();
timezone = wifly.getTimezone();
rtc = wifly.getRTC();
Serial.print(“uptime: “);
Serial.println(uptime);
Serial.print(“timezone: “);
Serial.println(timezone);
Serial.print(“rtc: “);
Serial.println(rtc);
Serial.print(“MyTime from wifly getTime: “);
Serial.println(MyTime);
//Get time from wifi module
if (wifly.time()) { // My testing of rtc
//print time
delay(1000); // My testing of rtc below
//char *something = wifly.getTime(dataBufferToReceive,sizeof(dataBufferToReceive));
int something = wifly.getRTC();
Serial.print(“RTC from wifly getRTC: “);
Serial.println(something);
Serial.print(“Time of buf: “);
Serial.println(wifly.getTime(dataBufferToReceive, sizeof(dataBufferToReceive)));
} else {
Serial.println(“Failed to get time”);
}