miércoles, 16 de mayo de 2012

XBee Shield + WiFly RN-XV + Arduino UNO



Tenía en mente desarrollar algún sistema inalámbrico usando el Arduino y para ello pregunté a la gente de cooking-hacks que módulo sería mejor. Adquirí un módulo XBee Shield para poder colocar diferentes módulos de comunicación (wifi, bluetooth, radio, etc..) y para las primeras pruebas adquirí un módulo de Rovin Networks que es totalmente compatible con el shield de XBee.

Después de las pruebas he podido comprobar que este módulo funciona muy bien, es muy potente y tiene muchas funcionalidades. Os dejo el enlace por si os interesa verlo en detalle aquí.

El módulo se integra muy bien con el Arduino y se puede empezar a trabajar principalmente de dos forma con él. Una de ellas es programarle una configuración y otra es configurarlo en tiempo real desde el propio Arduino.

Al principio os aconsejo montarlo y utilizarlo sin el Arduino para ir familiarizándonos con él y para ello debemos seguir unos sencillos pasos.

Lo primero es que no nos podremos comunicar con el módulo WiFly si está por medio el Arduino ya que en este caso comparten el puerto serie. Solución, lo quitaremos de la placa :-)

ACTUALIZACIÓN

Ya no es necesario quitarlo de la placa ya que he descubierto
que cargando en el Arduino un sketch vacío se puede acceder al WiFly directamente.

El sketch es el siguiente:

void setup() { }
void loop() { }

funciona tanto para este shield como para el Wireless SD Shield.
Puedes saltarte el paso de desmontar el micro de la placa.




Para ello, primero y muy importante acordarnos de la orientación del microprocesador y luego usando un destornillador plano y de manera muy suave haciendo palanca lo sacamos. En el caso de que el microprocesador venga directamente soldado en placa no podremos hacer las pruebas pero podremos igualmente programar el WiFly desde el propio Arduino.

Una vez extraido el micro podemos montar el WiFly en el XBee Shield


y montamos el shield en el Arduino sin el microprocesador.


De esta manera la placa del Arduino y el shield harán la función de puente entre el ordenador y el módulo WiFly aunque nos queda un paso importante. El shield dispone de dos jumpers marcados como XBEE/USB. La posición XBEE es para que el microprocesador y el módulo se comuniquen entre sí, la posición USB hace que el módulo se conecte directamente con el puerto USB pero al compartir el RX/TX con el microprocesador es necesario quitarlo (que es lo que hemos hecho). Colocamos los dos jumpers en la posición USB y ya podemos conectar la placa Arduino con el ordenador.

Al conectarlo por primera vez el módulo WiFly intentará conectarse automáticamente a una red pero en nuestro caso lo haremos manualmente.

Para ello desde nuestro ordenador instalaremos el software que el fabricante suministra para la comunicación serie con el módulo WiFly llamado Teraterm (que es parecido al Hyperterminal pero que no recomienda usar el fabricante). Lo podeís descargar desde aquí.

Lo arrancamos, establecemos la comunicación por el puerto serie apropiado y debería salir algo así. Esto es el módulo intentando conectarse automaticamente.


Para entrar en modo comandos hay que enviar por el puerto serie la secuencia $$$

Al estar el ECO desactivado no veremos lo que escribimos y hay otro detalle importante. Si entre pulsación y pulsación pasan más de 250 ms el módulo interpretará estas pulsaciones como letras sueltas en lugar de la palabra de control. Ya sabeis, pulsad $ tres veces de manera rápida.


Si todo va bien, saldrá el texto CMD y estaréis en modo comando. El manual de usuario que podreís encontrar aquí (WiFly User Manual) dispone de múltitud de comandos para juguetear un rato y os permitirán configurar muchísimos parámetros del módulo Wifi.


por ejemplo el comando "ls" muestra algunos ficheros que se encuentran dentro del sistema de archivos del módulo WiFly y podemos por ejemplo ejecutar el "wps" para invocar la aplicación para el modo WPS.

En el prompt aparece la versión del firmware instalado que en mi caso es la 2.30 (en la documentación hablan de la 2.32 por lo que tendré que destinar otro post para la actualización cuando averigüe como se hace ;-)

Tambien podeis ver detalles de la versión del firmware instalado con la orden "ver".

Un comando muy interesante para hacer pruebas es el comando "scan" con el que el módulo WiFly escaneará las redes wifi disponibles.


una vez que vemos nuestra red (en mi caso "ismcasa") vamos a pasar a configurar el WiFly para que se conecte a nuestra red. Para ello existen una serie de comandos para realizar esta tarea que podemos ver en el manual antes comentado aunque explicaré ahora los más importantes.

Primeramente vamos a configurar el funcionamiento por dhcp para que dispongamos de una dirección ip de manera automática con "set ip dhcp 1" y configuraremos la forma en la que vamos a usar el protocolo IP con "set ip protocol 2"


para el primer comando os dejo en la siguiente tabla las opciones que disponemos:

Mode Protocol
0 DHCP OFF, use stored static IP address
1 DHCP ON, get IP address and gateway from AP
2 Auto-IP, generally used with Adhoc networks
3 DHCP cache mode, Uses previous IP address if lease is not expired (lease survives reboot)
4 Reserved for future use

para elegir el tipo de protocolo ip tenemos que tener en cuenta que lo que se indica es la posición del bit que queremos activar por lo que el comando "set ip protocol 2" indica que activamos la posición 1 (en binario b0010) poniendo el módulo en tipo servidor y cliente TCP

Bit Position Protocol
0 UDP
1 TCP Server & Client (Default)
2 Secure (only receive packets with IP address matches the store host IP)
3 TCP Client only
4 HTTP client mode

Una vez establecidos los parámetros ejecutamos "set wlan join 0" para que el WiFly deje de intentar conectarse automaticamente como lo hacía al principio, colocamos la clave WAP o WAP2 en este caso con "set wlan phrase " y ejecutamos "join ismcasa" para conectarnos a esa red. Si nuestra red es WEP usaremos "set wlan key ".


Si todo va bien veremos los anteriores mensajes que nos informan que todo está bien y cual es nuestra dirección ip. El led verde del WiFly comenzará a pardadear lo que indicará que está asociado a la red. Para comprobar que funciona, desde nuestro equipo podemos hacer un ping a esa ip y veremos como el WiFly nos contesta.





Si deseamos guardar la configuración podremos ejecutar la orden "save" y quedará ya configurado así la próxima vez con sólo hacer un "join SSID" nos conectaremos a la red Wifi.

Bueno, ya hemos jugado un poco con nuestro módulo WiFly, ahora toca apagarlo, montar el microprocesador y realizar todos los pasos anteriores pero esta vez desde un programa Arduino y que sea este el que configura el módulo y lo utiliza acordándonos de colocar los jumpers en la posición XBEE, pero esto, para el siguiente post.

14 comentarios:

  1. Excelente información, te felicito, realice todos los pasos y magnifico, sólo un detalle: luego que realice el SAVE y posteriormente volví a conectar el wifly al puerto com5, con el software Tera Term TV, no puedo escribir los comandos, no permite entradas desde el teclado ¿qué podrá ser?

    ResponderEliminar
    Respuestas
    1. Me ha pasado alguna vez que tengo que cerrar el TeraTerm y volver a abrirlo y conectar de nuevo al resetear el WiFly. Espero que así se solucione.

      Eliminar
  2. Hola, gracias por este excelente resumen. Muy bueno para ponerse al corriente tras años haciendo otra cosa. Ha sido para mi una verdadera inspiración para volver al asunto. GRACIAS.

    ResponderEliminar
  3. Buenísima información, estoy realizando mi PFC y quiero incluir esta conexión. Me va a ser de gran ayuda para empezar a experimentar. Gracias!

    ResponderEliminar
  4. Hola!!
    Muy buena info!! Te felicito por el post!!
    Ahora, qué pasa si tengo al micro soldado a la placa?? en mi caso no lo puedo sacar.. =(
    Cómo puedo acceder, programando desde arduino, al WiFly?? Y cómo me puedo comunicar con él vía consola??
    Espero alguien me pueda dar una mano.
    Saludos!!!

    ResponderEliminar
    Respuestas
    1. Hola

      prueba a cargar este sketch vacio:

      void setup() { }
      void loop() { }

      en mí caso ha funcionado con la placa Wireless SD Shield.

      Un saludo
      ilde

      Eliminar
    2. Muchas, gracias por responder. He intentado hacer lo que me has dicho pero no ha funcionado. Creo que estoy colocando mal los Jumpers del XbeeShield.
      De todas formas pude ingresar desde consola seteando, al wifly, en modo Adhoc; ahí pude ingresar al modo comando.

      Esto lo hice, alimentando SOLO al wifly, por medio del pin 1(VDD 3.3V), del pin 10(GND) y del pin 8(Enable Adhoc mode, 8mA drive, 3.3V tolerant).
      Una vez realizado esto, se prendieron los 3 Leds, y aparece una red con el nombre del Wifly.
      Me conecte a dicha red, hay que esperar unos minutos a que se registre la nueva IP y luego verificar con "ipconfig" (por consola de sistema). Luego hay que escribir "telnet 169.254.1.1 2000" para ingresar al modulo por el puerto 2000. En el caso de Windows Vista y 7, el comando "telnet" no esta habilitado por defecto, así que hay que habilitarlo. (http://www.aquinohayquienviva.es/trucos/usar-telnet-con-windows-7-y-vista)

      Una vez hecho esto el Wifly contesto "*HELLO*" y ahí por consola se puede ingresar al modo comando por medio de los $$$.
      Esto esta en la hoja de datos.

      Ahora mi problema es con los puertos series.. tengo que saber qué jumpers utilizar con mi Xbee Shield V1.0... para que mi arduino me lo tome y poder terminar la comunicacion.

      Por otro lado, sabes como mandar datos al wifly?? es decir, que tipo de configuracion de red me convendría mas?? yo necesitaria una comunicacion permanente de lectura por parte del wifly, ya que recibe datos continuamente.

      Gracias nuevamente!! Espero tu prox respuesta =)
      Saludos!!

      Eliminar
  5. I read you post. Your given post for learning XBee module with Xbee examples is very beneficial for readers.

    ResponderEliminar
    Respuestas
    1. Fantástico me ha funcionado todo perfecto muy sencillo y muy útil.

      Eliminar
  6. Los módulos que usas pueden comunicarse entre si sin la shield como los xbee? Gracias!!!

    ResponderEliminar
    Respuestas
    1. Hola, si, con una configuración mínima conectando la alimentación, la masa y conectando los pines de envío y recepción. Más info en: http://www.ismsolar.com/blog/

      Eliminar
  7. Hola Ildefonso, gracias por el tutorial (Comunicar Arduino por WIFI) ha sido muy divertido hacer que mi RN-XV este en mi red, siguiendo las instrucciones y leyendo el manual de referencia ha sido suficiente, para salir exitoso hasta el final.
    Lo que no encuentro es el siguiente tutorial para usarlo con a
    Arduino, no estoy seguro de como usarlo y las librerías que he de usar, ¿ha salido ya la segunda parte?
    Gracias otra vez

    ResponderEliminar
    Respuestas
    1. Gracias, me alegro que haya sido de utilidad. He puesto un tutorial más extenso en la siguiente dirección

      http://www.ismsolar.com/blog/

      donde explico ya como conectarnos y hacer uso de la red con el Arduino. Espero que os guste.

      Un saludo

      Eliminar
  8. para los que usamos mac. no existe el teraterm, pero el coolterm va genial y además nos vale si usamos xbee!!!

    excelente post

    ResponderEliminar