jueves, 19 de febrero de 2015

Arduino y wifi ESP8266



Hoy vamos a explicar cómo funciona el módulo wifi de bajo coste (3$) ESP8266 y tamaño reducido, además trabajaremos con arduino para comunicarnos con él mediante comunicación serie.



Hace poco estábamos buscando un módulo wifi que nos sirviera para comunicarnos con nuestros controladores, pero la gran mayoría de módulos que vimos eran demasiado caros entre 30 y 60 euros, que por ese precio casi tienes una raspberry pi con un usb wireless, hasta que vimos este, que podía encajar perfectamente con lo que necesitábamos, un módulo que sea capaz de conectarse a internet inalambricamente, bueno después de esta aclaración sobre el módulo elegido vamos a trabajar con él.

Sólo 1 cosa más, este sistema trabaja a 3,3v, si lo conectamos a 5v lo quemaremos, además el consumo en funcionamiento es elevado cómo para utilizar el pin de 3.3v de arduino, dicho esto vamos allá.

Primero deberemos hacer el siguiente montaje:



Os lo he puesto con fritzing para que sea más sencillo interpretarlo, el funcionamiento es sencillo, sacamos 5v del UNO, y mediante un regulador de tensión LM317, convertimos la tensión a 3,3v con esto ya podemos alimentar a partir de ahí al ESP8266 (Cable Azul), por otro lado nos queda que a la hora de trasmitir por puerto serie arduino al módulo, debemos bajar la tensión para que no sean 5v esto lo hacemos mediante un divisor. (Resistencias)
Y el receptor cómo el que trasmite es el Wireless, no necesitamos colocar nada en las líneas.
Os recomiendo antes de conectar el Wifi al cable azul, medir con el polímetro entre cable azul y gnd, para comprobar que realmente hemos hecho bien el montaje y salen 3.3v.

Ahora nos queda programar, os dejo el programa a continuación:

#include <SoftwareSerial.h>
SoftwareSerial WIFI(7, 6); // RX | TX

char dato=0;

void setup()
  {  
     Serial.begin(9600);
     WIFI.begin(9600);
  }
  
void loop()
  {  
     while (WIFI.available())
         { 
           dato = WIFI.read();
           Serial.print(dato);
         }
     while (Serial.available())
         {  
           dato = Serial.read();
           WIFI.print(dato);
         }
   }  


El funcionamiento del programa es muy sencillo, por un lado utilizamos el puerto serie por hardware, para comunicarnos con el ordenador y por otro lado utilizamos un puerto serie por software, con la librería SoftwareSerial.h para comunicarnos con el módulo.
Es decir lo que escribamos por el puerto serie lo envía directamente al Wifi, y lo que recibimos del módulo, lo envía al serie. Así podremos probar los comandos a mano antes de ponernos a hacer el programa definitivo para nuestro proyecto.

Ahora abrimos el puerto serie en nuestro IDE.


Mirar la opción "Ambos NL & CR", esto es importante para que funcione, y la velocidad a 9600, si no os funciona a 9600 modificar las velocidades tanto en programa cómo en el IDE del serial, hasta que os funcione.

Bueno una vez preparado todo, vamos a empezar a jugar con nuestro módulo wireless.

Primero para comprobar que todo funciona escribimos el siguiente comando:

AT y pulsamos enter

Si todo va bien debería devolvernos OK

En segundo lugar deberemos establecer el modo de trabajo del módulo, en mi caso he utilizado el modo station+softAP

Escribimos: AT+CWMODE=3  y pulsamos enter.

Una vez configurado podemos buscar las wifis que hay a nuestro alcance, esto se hace con el siguiente comando:

AT+CWLAP y pulsamos enter.

Entonces nos mostrará las wifis a nuestro alcance, si vuestra wifi no sale en este listado y está al alcance no os preocupéis que la conexión la hace.

Ahora vamos a conectarnos a nuestro router wifi, para ello necesitamos el SSID que es el nombre que tiene el router cuando buscas la wifi y la contraseña para conectar.

Escribimos el siguiente comando: AT+CWJAP=”SSID”,”contraseña” y pulsamos enter.

Deberá devolvernos un OK

Por último vamos a conocer la ip que nos ha asignado el router, para ello tenemos que escribir el siguiente comando:

AT+CIFSR

Entonces nos devuelve las ips que tiene asignadas el módulo.

Hemos aprendido a conectarnos a internet, en el siguiente artículo veremos cómo enviar datos a un servidor.

6 comentarios:

  1. ¡Muy interesante! Espero con ganas el siguiente artículo.

    ResponderEliminar
  2. AT
    Gran artículo!
    Acabo de montar el circuito como el tuyo, aparentemente funciona correctamente pero al solicitar la lista de redes disponibles parece como si la cadena de texto devuelta no fuera completa, estuviera cortada y tuviera errores de transmisión. ¿Que podria estar pasando?
    Muchas gracias por el artículo.


    OK
    AT+CWLAP

    +AWLAP:(4,"wigibaleares-`ngkor",-93,#4c:5e:0c:ce;d4:f3",1)
    +CWLAP:(2F::WZ-e1

    ResponderEliminar
    Respuestas
    1. Hola tsalas!

      Perdona la demora pero en todo este tiempo no he podido sentarme a contestar los comentarios, ¿Qué arduino estas utilizando?
      El problema de comunicación puede venir de la librería de puerto serie por software, recomiendan probarlo en un arduino mega, dicen que va mejor.

      Espero haberte ayudado.

      Eliminar
  3. hola!! sirve un LM358 para regular la tension?

    ResponderEliminar
    Respuestas
    1. Hola Fernando!!

      No conozco este componente, lo único que necesitas es un componente que te de 3,3V con 1A para entregarle la alimentación correspondiente ya sea bien lineal o conmutado.
      Yo recomiendo el 317 ya que llega según la versión hasta 1,5A y se puede configurar para 3,3v y además tiene protecciones de temperatura, etc.

      Suerte con tu montaje.

      Eliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar