Tutorial Wifly

From Asociación de Robótica UC3M
Revision as of 17:05, 15 February 2013 by JKazacos (talk | contribs)
Jump to navigation Jump to search

Tutorial practico para configurar el WiFly

Resumen

Este tutorial esta destinado a configurar el RN 171 (modelo RNXV) y se ira actualizando conforme se verifiquen las posibilidades que ofrece el modulo. Se va a configurar de manera que se conecte automaticamente a un router por si solo cada vez que se encienda. Para ello se guardaran los valores apropiados en memoria. Existen varias maneras de empezar a trabajar con el modulo. La primera de ellas sera configurarlo forzando un modo Ad-Hoc via Hardware y configurarlo mediante telnet. Seguidamente se explican otras maneras de configurarlo via arduino (FIO en este caso).

Se utilizara:

WiFly 171 RN XV
  1. Ubuntu
  2. FIO Arduino FIO
  3. Manual WiFly y Pequeño datasheet]
  4. Conocimientos previos nulos sobre nada en absoluto.


Nota: El arduino FIO incorpora un "socket" que permite acoplar un modulo XBEE en principio de la compañia DIGI. Roving Networks pone a la venta una version del modelo RN 171 con el mismo patillaje destinado a que se acople a cualquier tarjeta con soporte para XBEE. Aunque tanto el soporte XBEE de Fio y el WiFly sean de 20 pines, tan solo unos pocos estan fisicamente conectados entre el soporte XBEE y la propia tarjeta Fio. En el momento de escribir este tutorial se tiene conocimiento de que el Arduino Fio proporciona VCC, GND, RX y TX al modulo que se le acople. El esquematico de FIO no proporciona informacion sobre alguna otra conexion.


Via Telnet

Pasos

1. En primer lugar habilitamos el modo AdHoc del WiFly conectando con un cable VCC (3,3V) y el pin 8 del XBEE (GPIO_9) (Observar fotografias; el pin 1 tiene soldadura cuadrada). De esta manera el dispositivo se le prepara para que otro dispositivo se conecte al el sin AP (punto de acceso). (Nota: Puede observarse que se ha optado por la solucion mas profesional posible). Existen 2 maneras de activar el AdHoc: via Hardware como aqui se ha hecho y via Software entrando en modo configuracion, pero como aun no nos podemos conectar esta manera no nos sirve.


Cable cotesia de Juan Victores.
Al alimentarlo con el FTDI tiene que encenderse, a parte de los LEDs rojo y verde, el ambar. Si es asi, vamos por buen camino.


2. Segun el fabricante el WiFly en modo AdHoc viene por defecto con:


IP: 169.254.1.1
Netmask: 255.255.0.0


Ahora debemos conectarnos a su red. Para ello, una vez alimentado debemos esperar (puede que minutos) hasta que aparezca Wifly-GSX-XX en el listado de conexiones inalambricas de linux (arriba a la derecha). Las XX son los dos ultimos bytes de la direccion MAC del dispositivo Wifly. Una vez que aparezca vamos a editar conexiones y seleccionamos Wifly-GSX-XX dentro de wireless y la editamos. Dentro de la pestaña "wireless" debemos seleccionar modo AdHoc y dejar todo lo demas como esta. En la pestaña "Wireless security" escogemos "none". En la pestaña IPv4 escogemos metodo manual y selccionamos "add" en "Addresses" (o añadir en direccion). Ahora debemos escribir una IP para nuestro PC que este en la misma subred que el Wifly. Podemos configurar una IP por ejemplo que sea 169.254.1.2 y escribimos en Netmask 255.255.0.0.
Guardamos los cambios y conectamos con la red Wifly-GSX-XX. Una vez conectados desde la terminal hacemos "ping 169.254.1.1" y de esta manera comprobamos que estamos enviando y recibiendo paquetes a esa direccion. Si todo va bien, deberiamos de recibir informacion. Para salir de ping tecleamos "ctrl + c".


3. Es hora de configurar el modulo: En el manual se explican todas las instrucciones posibles para configurarlo y algunos ejemplos. Aqui vamos a hacer un resumen para no tener que sumergirse tanto en todas las instrucciones que hay disponibles y poder tener el modulo "ready to go" en pocos pasos y tiempo.
  • El modulo Wifly puede estar en dos modos: configuracion, y datos (por defecto). Para empezar a hablar al WiFly, desde la terminal tecleamos "telnet 169.254.1.1 2000" (puerto 2000 por defecto) y deberiamos recibir un "HELLO" por parte del dispositivo.
  • Introducimos $$$ y deberia contestarnos CMD. Ya estamos en modo configuracion.
  • Escribimos set wlan auth 0 para que la red sea abierta, sin autentificacion.
  • set ip dhcp 0 Con esto hacemos "DHCP off": No pedira al router una IP ni puerta de acceso. Usara la configuracion que le guardemos a continuacion.
  • set ip adress XXX.XXX.XXX.YYY. Aqui escribimos la IP que tendra el Wifly.
  • set ip host XXX.XXX.XXX.ZZZ. Aqui la IP del router al que se debe conectar. (observese que solo debe variar el ultimo byte).
  • set ip netmask 255.255.255.0.
  • set wlan ssid "nombre de la red".
  • set wlan chanel 0. Un valor de 0 hara que busque por la SSID escrita anteriormente por todos los canales.
  • set wlan join 1. Intentara acceder automaticamente al punto de acceso que coincida con la SSID guardada.
  • save.
  • reboot.


4. Ahora podemos desconectar el FTDI y quitar el cable que puentea el VCC con el PIN8 (GPIO_9). La proxima vez que se alimente el WiFly se conectara automaticamente al router.


Mediante libreria

En internet pueden encontrarse varias librerias destinadas al manejo del WiFly, y funcionan todas ellas de un modo similar (WiFly, WiFlySerial, WiflyHQ, etc).

La libreria mas completa y robusta es: Wifly-Shield-Master

Para instalarla hay que descargarla y descomprimir el contenido en la carpeta libraries (si no existe se debe crear) dentro de sketchbook (carpeta principal de arduino), esto es colocar la carpeta Wifly-Shield-Master en ~/sketchbook/libraries. La propia libreria trae ejemplos de codigos para arduino (cliente, servidor, etc). El arduino IDE no acepta librerias con guiones '-' asi que debemos cambiar el nombre de la carpeta (por ejemplo por simplicidad a Wifly). (luego para usarla en un programa habra que escribir #include <Wifly.h>).

Para empezar a trabajar con ella basta con escribir una funcion setup() de esta manera:

#include <SoftwareSerial.h>
#include <WiFly.h>
#include <SPI.h>
#include "Credentials.h"


//(naranja, amarillo) del ftdi
SoftwareSerial serialTest(8,7);


void setup() {
Serial.begin(9600);
serialTest.begin(9600);
serialTest.println("antes del begin");
WiFly.setUart(&Serial);
WiFly.begin();
serialTest.println("despues del begin");
Serial.flush();


if (!WiFly.join(ssid, passphrase, true)) {
serialTest.println("no se ha conectado");
while (1) {
// Hang on failure.
}
}
serialTest.print("IP: ");
serialTest.println(WiFly.ip());
}

En esta funcion de inicializacion mediante la funcion Wifly.begin() se entra en modo configuracion y establece (por defecto) un servidor externo del cual extraer la hora. Se recomienda comentar esa parte de la libreria para simplificar la configuracion. El fichero de la libreria Wifly.h en el que se encuentran casi todos los metodos de referencia es WiflyDevice.cpp. Mediante las funciones begin() de los puertos serie se inicializan dichos puertos. Con la libreria SoftwareSerial habilitamos unos pines diferentes de los pines por defecto como tx y rx. Como argumentos de entrada del objeto de la clase SoftwareSerial hay que escribir los pines a los que se conectan los cables (Naranja, amarillo).