Arduino (IoT): Simple Tutorial WiFi

Arduino Honduras Santiapps Marcio Valenzuela

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:

  1. Computadora (mac)
  2. Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry…  Este tutorial en particular usa una Arduino MEGA.
  3. Wifi Shield & WiFi Library
  4. Arduino IDE (https://www.arduino.cc/en/Main/Software)

Estaremos usando el modulo WiFi de Roving Networks basado en la WiFly.

Ardiuno - WiFiBee Module Santiapps Marcio Valenzuela
Arduino – WiFiBee Modulo

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í:

Arduino WiFi Tutorial Santiapps Marcio Valenzuela
Arduino WiFi Tutorial

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”);

}

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s