#19 Wifi Bee con PICARO controlado por Comandos AT

Introducción

La tarjeta WiFi Bee te permite entregar conectividad Wi-Fi a tus desarrollos con la versatilidad que posee el módulo ESP8266, con un formato físico XBee, para fácil compatibilidad con las distintas tarjetas que poseen este socket como por ejemplo: Arduino Uno + XBee Shield, XBee IO Pro V2, PICARO+, CaiCai entre otras. 

 Este producto incorpora un moderno procesador ESP8266 que trabaja a 80Mhz otorgando internet por Wi-Fi en modo “cliente” o “Access point”, soporta protocolo TCP/IP con soporte de DNS. Incorpora una memoria flash de 4Mb y también una antena en el PCB de la tarjeta. Posee un Firmware NodeMCU. Se puede configurar en tres modos: Comandos AT, LUA (lenguaje de programación usado por el software diseñado para trabajar con este módulo) o por Arduino, donde se trabaja con si fuera un Arduino agregando unos paquetes.

 En este ejemplo configuraremos la tarjeta Wifi Bee, para usarlas con comandos AT utilizando un Xbee explorer.  Al tenerla cargada con el nuevo firmware, procederemos a usar los comandos a través del IDE de Arduino. Lo que haremos sera conectarnos a una Red Wifi, por medio del navegador web, enviaremos parámetros para ejecutar una acción, en este caso será encender o apagar un LED.

Como se mencionó anteriormente, éste módulo posee el Firmware NodeMCU para programar utilizando lenguaje LUA, por eso debemos flashear (cambiar el firmware) del módulo, para poder configurar a través de comandos AT y por medio de la IDE de Arduino.

 Para cambiar el Firmware, se deben seguir los siguientes pasos.

1. Conectar el WifiBee al Xbee explorer USB y conectarlo a la pc.

2. Descargar el Flasher Tool ESP8266. Es la herramienta para poder cargar el firmware.

3. Descargar el Firmware AT.

4. Ejecutar el programa esp8266_flasher.exe.

5. Darle click al botón bin y buscar el archivo v0.9.2.2 AT Firmware.bin.

6. Seleccionar el puerto COM, que ha sido asignado al módulo.

7. En el módulo WifiBee, apretar el botón flash seguido del Reset, para entrar en modo carga.

8. En el programa darle al botón download.

9. Se iniciará la descarga del firmware, podremos observar el porcentaje de descarga que lleva.

10. Al final, cuando muestra que lleva 99% de descarga, suele salir el error “Failed to leave flash mode”. Al parecer es algo común, así que no te preocupes. Si quieres volver al firmware anterior puedes descargarlo y y subirlo por medio de la misma herramienta que hemos utilizado.

Para estar seguro que se cargó correctamente el firmware y está funcionando,  prueba con un emulador de terminal como Hercules, en el cual podrás mandar los comandos AT y verificar que recibes una respuesta.

Si todo esta funcionando, podemos iniciar nuestro sketch en el IDE de Arduino. Si abrimos el puerto serial, veras el orden de los comandos AT y las respuesta que el módulo genera, se conectara a una red Wifi y a través de un navegador web, colocando la IP que se le asignó al modulo WifiBee, podremos enviar parámetros para ser procesados por la PICARO.

Pasos a seguir:

 

#1 Armar el circuito según la imagen

#2 Abrir el IDE de Arduino y conectar la tarjeta PICARO al computador

#3 Seleccionar el tipo de tarjeta como Arduino Uno

#4 Elegir el puerto serial en que se encuentra conectada la tarjeta PICARO

#5 Copiar el código de ejemplo al IDE, compilarlo y subirlo

Listado de componentes :

Descargas:

Código:

 En este programa utilizamos la librería SoftwareSerial.h, está ha sido desarrollada para permitir la comunicación en serie utilizando otros pines digitales del Arduino,es un software para replicar la funcionalidad (de ahí el nombre “SoftwareSerial”). Se utiliza el pin 3 como RX (Receptor)  y el pin 2 como TX (Transmisor). De igual manera utilizaremos la librería fsm.h, se basa en una máquina de estados finitos, que es un modelo de comportamiento de un sistema con entradas y salidas, en donde las salidas dependen no sólo de las señales de entradas actuales sino también de las anteriores, así podemos ejecutar una acción, al finalizar el estado anterior en un tiempo definido. En este código lo que se hace es enviar comandos AT, que podemos ver a través del puerto serial, estos se encargan de verificar el funcionamiento del módulo, mostrar las redes disponibles y conectarse a una red WiFi, seguido a esto se envía el comando AT+CIFSR que nos da como respuesta la dirección IP que le asigno el router al módulo WifiBee y otra dirección que es la dirección de red para distribuir, si quieres puedes probar conectando tu teléfono a la red del WifiBee y te entregará una dirección IP de esa red, pero en este ejemplo no es necesario , al contrario conectamos el teléfono móvil a la red WiFi donde está conectado el WiFiBee, es decir tendrán direcciones IP de la misma red, seguidamente colocamos el modulo en modo servidor por el puerto 80.

 Estos comandos AT se encuentran dentro de funciones, con nombres como: Inicio, mostrar, conectar, IP, puerto y server

Declaramos los estados que vamos a tener en nuestro código es decir, el estado de inicio , conectar, mostrar, verificar IP, el puerto y modo de servidor, estos estados son referentes a las funciones creadas anteriormente, se inicializan los puertos seriales y luego se ejecutan las transiciones a través de la librería FSM, donde se debe colocar, el estado de inicio, el estado al que cambiara y en el tiempo que lo hará. Este tiempo indica los segundos desde que se inició el programa, esto se realiza con cada una de las funciones, para así llevar un orden de lo que pasará desde el primer estado hasta el último. Esta función es necesaria debido a que evita que los datos se fusionen, es decir que no se envié un comando mientras se está recibiendo la respuesta del comando anterior ya que esto podría generar un error.

 Al tener la configuración lista, abrimos el navegador web en el dispositivo que tenemos conectado a la misma red, colocamos la IP que fue asignada al módulo WiFiBee, al darle enter, podemos observar a través del monitor serial, que empezamos a recibir datos y al recibir la palabra link indica que tenemos una conexión con la página, si deseamos enviar un dato desde el navegador web al módulo WifiBee, se utiliza el formato dir_ip/dato y lo recibiremos por el puerto serial, que podemos observar por el monitor serie, así podemos enviar cualquier palabra, que será procesada en el PICARO. En este caso se espera las palabras “LED=ON” y “LED=OFF”. En el void loop(). Constantemente se estará ejecutando la función leer, que se encarga de guardar en una variable lo que recibe en el puerto serial y de comparar dicha variable con la palabra que deseamos recibir, que son LED=ON o LED=OFF, en caso de encontrar una coincidencia, activa o desactiva el LED

#include 

#include  //Libreria maquina de estados finitos

SoftwareSerial mySerial(3,2);

String datos="";

//---Funciones de Comandos----

void off_inicio(){

  }

 

void on_inicio(){

  mySerial.println("AT"); //Verificar modulo

   }

 

void on_mostrar(){

  mySerial.println("AT+CWLAP"); //Mostrar redes Wifi disponibles

}

void on_conectar(){

  mySerial.println("AT+CWJAP=\"SSID\",\"Password\""); //Conectarse a la red (Debes cambiar a tu SSID, Password)

}

void on_ip(){

  mySerial.println("AT+CIFSR");//Muestra direccion IP

}

void on_puerto() { //Puerto TCP/UDP

  mySerial.println("AT+CIPMUX=1"); //Selecciona tipo de conexion TCP/UDP (1)Multiples puertos

}

void on_server() { //Modo Servidor

  mySerial.println("AT+CIPSERVER=1,80"); //Colocar como servidor.(1)Modo abierto, puerto

}

//---DEclaracion de estados de lib FSM---

State state_inicio_on(&on_inicio, NULL);

State state_inicio_off(&off_inicio, NULL);

State state_mostrar_on(&on_mostrar, NULL);

State state_conectar_on(&on_conectar, NULL);

State state_ip_on(&on_ip, NULL);

State state_puerto_on(&on_puerto, NULL);

State state_server_on(&on_server, NULL);

//-----Estados iniciales para cada funcion---

Fsm fsm_inicio(&state_inicio_off);

Fsm fsm_mostrar(&state_inicio_off);

Fsm fsm_conectar(&state_inicio_off);

Fsm fsm_ip(&state_inicio_off);

Fsm fsm_puerto(&state_inicio_off);

Fsm fsm_server(&state_inicio_off);

void setup()

{

   Serial.begin(9600); //Inicio puertos seriales

   mySerial.begin(9600);

   

fsm_inicio.add_timed_transition(&state_inicio_off, &state_inicio_on, 1000, NULL); //(funcion inicial, funcion siguiente,Tiempo para realizar el cambio)

fsm_mostrar.add_timed_transition(&state_inicio_off, &state_mostrar_on, 2000, NULL);

fsm_conectar.add_timed_transition(&state_inicio_off, &state_conectar_on, 7000, NULL);

fsm_ip.add_timed_transition(&state_inicio_off, &state_ip_on, 21000, NULL);

fsm_puerto.add_timed_transition(&state_inicio_off, &state_puerto_on, 23000, NULL);

fsm_server.add_timed_transition(&state_inicio_off, &state_server_on, 26000, NULL);

}

void loop()

{

parametros(); //llama a la funcion

leer();

}

void parametros()

{

fsm_inicio.check_timer(); //Se ejecutan en el orden que se colocan

fsm_mostrar.check_timer(); // a traves de la libreria, se trabaja con la funcion millis

fsm_conectar.check_timer(); //para que se ejecuten las funciones en el tiempo correcto

fsm_ip.check_timer();

fsm_puerto.check_timer();

fsm_server.check_timer();

}

void leer(){

   while (mySerial.available() > 0) //Si hay datos disponibles en el puerto serial

         {

          String request = mySerial.readString(); //Lee el String

          Serial.println(request); //Muestra lo que lee

           int value = LOW;

      if (request.indexOf("/LED=ON") != -1) //Compara lo que recibe

         {

         digitalWrite(12, HIGH); //Activa el LED

         value = HIGH;

         }

      if (request.indexOf("/LED=OFF") != -1) {

         digitalWrite(12, LOW); //Apaga el LED

         value = LOW;

         }

      }

    }

 

Demostración

Acá tenemos un vídeo donde podremos observar el funcionamiento de nuestro circuito. Como se explicó anteriormente, tenemos la tarjeta WifiBee conectada a la XBee Shield, que a su vez esta conectado a la tarjeta PICARO. Se carga el Sketch a la PICARO y se procede a abrir el puerto serial, acá podemos observar como van ejecutandose los comandos y a su ves estamos obteniendo respuestas del modulo Wifi. El orden de los comandos es el siguiente:

1. AT. Comando para verificar el funcionamiento del módulo.

2. AT+CWLAP. Muestra las redes wifi disponibles.

3. AT+CWJAP=“SSID”,”PASSWORD”. Conecta a la red Wifi especificada, recuerda colocar tu SSID y contraseña.

4. AT+CIFSR. Muestra la dirección IP asignada.

5. AT+CIPMUX=3. Permite múltiples conexiones TCP/UDP.

6. AT+CIPSERVER=mode,port. Se configura como servidor en el puerto seleccionado,en nuestro caso es modo=1, puerto=80.

Observando esto a través de la consola del IDE de arduino, proseguimos con abrir un navegador web, cuyo dispositivo se encuentre en la misma red que el módulo Wifi, colocamos la IP que recibimos al enviar el comando AT+CIFSR, presionamos enter, observamos en la consola que se crea una conexión ademas de otros datos, como el host y tipo de conexión. Seguido a esto lo que se hace es revisar las entradas de texto en la consola y realizar acciones en los pines del PICARO, en función de lo que se encuentre.

¿En busca del Kit PICARO?

Con el PICARO Starter Kit podrás realizar estos ejemplos ¡y mucho más!
Producto Chileno. Encuéntralo en MCI Electronics.

Contacto

Direccion Luis Thayer Ojeda 0115 Of. 1105, Providencia, Santiago, Chile.

Phone: +56 2 2333 9579 / +56 2 2231 9268

Horario Lunes a Viernes de 8:00 a 18:00

Nosotros

En MCI Electronics, estamos aquí para mantener la industria en movimiento. Nuestro objetivo es difundir y hacer accesible el uso de la electrónica a todo aquel que tenga el interés. Para ello nos esforzamos para traer los mejores componentes y módulos de manera que puedas aprender desarrollando tus propios proyectos.

Somos tu aliado en electrónica.

Suscríbete a nuestro boletín