bclose

Arduino y WIFI ESP8266

Conectado Arduino a las redfes WIFI

 

Objetivos

 

 
    • Presentar el módulo WIFI ESP8266.
    • Describir sus posibilidades.
    • Presentar un circuito de prueba para conectarlo a nuestros Arduinos.
    • Empezar con los comandos AT que acepta.
    • Montarun pequeño servidor Web a través de WIFI..
 

Material requerido.

 

  Tienda España Tienda Mexico
Vista principal Un Arduino UNO Un Arduino UNO
Un ESP01 WIFI Un ESP01 WIFI
vista general

Cables Dupont Macho-Hembra

 Cables Dupont Macho-Hembra

 

Arduino y las conexiones WIFI

 

A medida que te acostumbras a la idea de que puedes conectar tu Duino al mundo exterior vía una conexión inalámbrica, seguir usando cables se hace un poco cuesta arriba, da como pereza.

Ya hemos visto cómo usar una primera opción de conexión sin hilos mediante Bluetooth en las sesiones previas, pero antes o después llegaremos a querer usar WIFI para esto.

Las razones son fáciles de entender. Las WIFIs mezclan la comodidad de uso de las conexiones inalámbricas Bluetooth, con un  mayor alcance y por si fuera poco, muy probablemente tengas un acceso WIFI en casa o en el trabajo y listo para conectarte a el.

Así, pues, parece que ha llegado el momento de comprar un Shield WIFI  similar al shield Ethernet. Acostumbrados, como estamos, a que las cosas en Arduino sean baratitas,  nos acercamos a nuestra página de compra preferida y nos llevamos un buen susto.

No hay modo de comprar un shield WIFI por menos de 50€ y los hay hasta de 80€. ¿Qué está pasando aquí?

Bueno, la verdad es que no está muy claro, pero mientras que puedes comprar un adaptador USB WIFI para tu PC por menos de lo que vale una entrada de cine, cuando hablamos de Arduino, los precios se disparan.

Puede ser que desarrollar la tarjeta sea cara, especialmente el software o simplemente que han visto la ocasión de hacer un negóciate con nosotros, pero sea como sea es lo que hay.

Por eso yo decidí que por ahora de Shields WIFI ni hablar a ese precio y me puse a ver que había por ahí que me pudiera servir y mira por donde hay cosas de precio mucho más atractivo si estás dispuesto a aceptar ciertas limitaciones.

Y en cuanto empieces a buscar algo de WIFI barato te encontrarás con el módulo WIFI ESP8266, que es algo muy parecido a los módulos Bluetooth de las sesiones previas de comunicaciones, y que al igual que ellos incluye toda la electrónica necesaria para la comunicación Radio Frecuencia en la banda WFI, así como la pila TCPIP y que se comunica con nosotros a través de un puerto serie.

De hecho, exactamente igual que los modos HC-06 y HC-05 se gobierna mediante comandos AT, algo que ya no tiene secretos para los seguidores de estas sesiones, y todo por un precio similar al de los Bluetooth.

Así, que vamos a ver como usamos estos interesantes módulos.

 

Conectando el módulo ESP8266

 

Lo primero es decir que este es modulo muy sencillo y diseñado desde el principio con la Internet of Things en mente ( IOT), y por eso incluye todo lo necesario para conectarse a un punto de acceso WIFI mediante comandos de texto AT, vía una puerta serie, que puede ser configurada a diferentes velocidades.

Una vez que le instruimos para que se conecte a nuestra WIFI, el modulo es capaz de enviar información que le remitimos vía la puerta serie a una dirección  IP y puerto que deseemos.

Cuando se trata de recibir, limpia todo el empaquetado TCPIP y nos reenvía por la puerta serie la información de datos limpia de polvo y paja, con lo que tiene la enorme virtud de permitirnos olvidarnos de la gestión del TCPIP y de las demandas de procesador y memoria que suponen.

A cambio no es exactamente una conexión WIFI, porque no tenemos acceso al stack o al socket IP pero para el Arduino esto es casi una ventaja.

 
  • De hecho el módulo ESP8266 incluye un pequeño procesador interno que podríamos programar para funcionar de modo autónomo y que incluso dispone de un par de puerto GPIO (General Purpose Input Output) para su uso como activador de algo, pero esto e una historia para otro día.
 
Veamos como conectarlo a nuestro Arduino, el patillaje del módulo visto desde la parte superior donde se puede observar la antena integrada, es así:

Patillaje del modulo WIFI

La fuente interna de 3.3V del Arduino da un máximo de 50 mA, cuando el consumo del módulo suele ser en el arranque bastante superior a esto, lo que le llevara a unos arranques poco fiables, y aunque se acaba consiguiendo,  deben repetirse una y otra vez ( aunque naturalmente el modulo sufrirá).

Si disponéis de una fuente externa de alimentación de 3.3V no dudéis en usar la para alimentar este módulo ESP8266. Se inicia como una seda, mientras que si no disponéis de ella, el montaje que indico a continuación os permitirá hacer pruebas, lo he comprobado, pero os costará arrancar.

 

 

Diagrama d eprotoboard

 
  • Las hojas de normas del módulo WIFI ESP8266 especifica que debe ser alimentado a 3,3 Voltios y no recomienda conectarle 5V directamente so pena de quemarlo.
  • Menos claro está el hecho de que RXD y TXD deban ser a 3,3 V. He visto varias notas por Internet recomendando montar un divisor de tensión en cada pin para evitar problemas, pero yo los he conectado directamente a Arduino sin problemas (Me compré dos, por si acaso, son muy baratos).
  • Según la versión de firmware que incluya el modulo, el pin RST debe o no ser conectado a tensión (3,3V) para poder activar el uso del módulo. El que yo he recibido, desde luego no se activa sin él, pero he leído que hay versiones más antiguas que no lo necesitan.
 

En lo que he mirado por Internet, estamos de nuevo con la historia de conectar este módulo a los pines digital 0 y 1 del Arduino para aprovechar la conexión serie hardware, porque dicen que la conexión mediante la librería SotwareSerial es problemática a 115.200 baudios.Problema que yo al menos nunca he detectado

Yo soy demasiado vago para andar conectando y desconectando el modulo, cada vez que quiero reprogramar mi Duino, así que he hecho pruebas y a mi este montaje me funciona sin problemas, así que es el que os lo recomiendo.

 
  • Como norma general, y mientras no se demuestre lo contrario, en estas páginas nunca conectaremos las líneas de comunicación serie a los pines 0 y 1 del Arduino, siempre intentaremos usar otros pines y dejar estos libres para la comunicación vía USB.
 

 

Primeros comandos AT con ESP8266

 

Aunque al principio los modulos ESP8266 venian programados a una velocidad de comunicacion de 9.600 ultimamente estan viniendo a 115.200 y por eso convendria que supongais esa velocidad de entrada e ir bajando si es necesario.

Ojo: Los Arduinos UNO no van muy finos a 115200 con la libreria serie, usad un MEGA o DUE si podeis, porque hay muchos errores de transmision en caso contrario

Vamos a volcar a nuestro Arduino el siguiente programita, que heredamos de la conexión Bluetooth, que simplemente vuelca la consola al puerto serie y viceversa:

#include <SoftwareSerial.h>
SoftwareSerial BT1(3, 2); // RX | TX

void setup()
  {  Serial.begin(115200);
     BT1.begin(115200);
  }

void loop()
  {  String B= "." ;
     if (BT1.available())
         { char c = BT1.read() ;
           Serial.print(c);
         }
     if (Serial.available())
         {  char c = Serial.read();
            BT1.print(c);
         }
   }

Abrid ahora la consola y aseguraros de que enviamos seleccionamos ambos en la terminación de línea. Además en mi caso la comunicación venia definida a 115200 baudios de fábrica, por lo que en principio conviene que lo probéis así.

Configurar puerto serie

Si con la conexión que hemos descrito en el apartado anterior hay veces que el ESP8266 parece que no arranca.  Soltad la alimentación del módulo, y volved a conectarla al cabo de uso segundos. Deberíais ver algo así:

Mensaje bienvenida

Si no tenéis el mensaje de ready, repetid el proceso. A mí me ha costado varias veces en algún momento.

 
  • No os preocupéis por toda esa basurilla que sale antes de la versión del Soft. Parece que es normal.
 

Vamos con nuestro primer comando AT, simplemente pedir atención: AT + [Intro]:

Comando AT

El modulo responde con un sencillo OK, para indicar que tenemos line abierta. En caso negativo probad a cambiar la velocidad de transmisión hasta que recibáis un mensaje legible.

Para resetear el modulo probad AT+RST

No he encontrado una descripción muy clara de los modos de funcionamiento pero se puede cambiar la instrucción AT+CWMODE=n, donde n es 1,2 o 3. Para saber en qué modo estáis:

AT+CWMODE?

I_4

Aparentemente la buena es la 3: Probad

Arduino + WIFI ESP8266

En mi caso responde que “No change” porque ya le había dado esta instrucción antes.

Vamos ahora a ver qué puntos de acceso WIFI tenemos en las inmediaciones: I_6

Al principio del mensaje indica 3 redes disponibles, Charly (la mía) mas MOVISTAR_8E24 y MVSA_8, a la que podríamos conectarnos.

Para conectarme a mi Router, necesito como siempre el nombre SSID que publica el punto de acceso (En mi caso Charly) y la contraseña de uso. La instrucción a usar es:

AT+CWJAP=»charly»,»contrase”

Arduino + WIFI ESP8266

Al cabo de un momento si no hay problemas, responde con un OK. Y para ver que IP nos ha asignado hacemos: AT+CIFSR

Arduino + WIFI ESP8266

Que en mi caso es la 192.168.1.34. Vamos a empezar a jugar con algo un poco más interesante. Prueba con:

AT+CIPMUX=1
AT+CIPSERVER=1,80

El primero habilita múltiples conexiones simultaneas, y el segundo arranca un servicio web (con el número de servicio = 1) en el puerto 80. Si ahora vas a tu navegador y escribes la dirección IP de tu módulo ESP8266, recibirás en la consola los mensajes correspondientes a la conexión:

Respuesta del navegador

Acabamos de montar un pequeño servidor web con unas pocas instrucciones AT, no está mal.

¿Podríamos usarlo para enviar órdenes a nuestro Arduino como hacíamos con el BlueTooth, o con la tarjeta Ethernet? Me imagino que ya sabéis la respuesta.

Hay una forma muy fácil de pasar parámetros a nuestro Arduino, directamente desde el navegador, sin más que pasarle los parámetros después de la dirección IP, como por ejemplo:

Detalle navegador

Y lo que recibe la consola es:

Consola Arduino

Fíjate que en la 4ª línea empezando por abajo, pone:

+IPD,2,331:GET /%20p13=1,%20p12=0,p9=189 HTTP/1.1

Que es poco más que una copia de lo que escribimos arriba, sin más que sustituir los espacios por %20 (Una manía que viene de largo).

Podemos ya usar esto con un parser para activar comandos en nuestro Arduino.

 
  • Un parser es un programa que en la jerga informática, analiza textos buscando instrucciones a realizar.
 

Basta con escribir un programa que revisa las entradas de texto en la consola y gobierne los pines de Arduino, en función de lo que se encuentre. Ya hicimos cosas así en las sesiones previas relativas al shield Ethernet y siguen siendo plenamente aplicables aquí.

 

Cambiando la velocidad de comunicación  

Para saber la velocidad de comunicación a la que tu modulo puede funcionar, tenemos el comando:

Contenido solo disponible para suscriptores. ¡Accede al contenido!

En las próxima sesión veremos cómo presentar valores de lecturas por ejemplo, en el servidor Web que acabamos de montar.

 

Resumen de la sesión

 

 
    • Hemos visto un primer contacto con el módulo WIFI ESP8266.
    • Presentamos un pequeño circuito de prueba para conectarlo a nuestros Arduinos, sin necesidad de programas externos de comunicación.
    • Vimos las primeras instrucciones AT que acepta este módulo.
    • Montamos un mínimo servidor Web con nuestro modula, apto ya para recibir instrucciones a través de un navegador Web, incluyendo el de teléfonos y tabletas.

 

 

 

 

 

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(698) Comments

  • Avatar for Charly
    • Vidal

    Hola admin.

    He probado con todo el rango de velocidades. Al final lo he dejado en 115200. Pero la respuesta es la misma. en la que mas datos parece recibir es en 115200, así que ahí lo he dejado.
    He probado a cambiar los pines; 3,2; 2,3; y lo mismo. He cambiado a los pines 0,1 y tampoco.
    He probado alimentarlo con el arduino y con la F.A de 3.3 y la respuesta es la misma.
    He proba con el IDE de arduino, He probado con putty y la respuesta es la misma siempre.
    No sé que más probar.
    Bueno, si. He comprado otro, a ver si la respuesta es distinta.

  • Avatar for Charly
    • Admin

    Hola Vidal, no se de donde sale lo de que solo 19200 pero arduino acepta velocidades hasta 200.000 baudios (No me se el pico) sin problemas a condicion de que tengas un hardware que lo soporta (Un mega por ejemplo)
    LA velocidad de comunicacion con el esp es una y la del pc otra, pero si vas a andar haciendo pruebas es buena politica usar la misma (Para no andar reprogramando el modulo)

  • Avatar for Charly
    • Admin

    Gina, ¿Que fuente de alimentacion usas? porque parece extraño que cambie el comportamiento del modulo al conectar arduino. Parece mas un problema de falta de potencia y recuerda que este esp8266 traga mucha corriente y ese podria ser parte del problema

  • Avatar for Charly
    • Admin

    Hola Vidal, Si has comprado ercientemente tu modulo vendra a 115200 bauds, asi que pon esa velocidad en tu consola o arduino. Te recomendaria que empieces usando una conexion USB con tu PC y putty o algo similar para asegurar que la comunicacion es buena.
    De hecho que siempre recibas un mensaje al arrancar indica que tu modulo vuelca el mismo mensaje pero no lo interpretas bien por la diferencia de velocidad
    Prueba a ver y me dices

  • Avatar for Charly
    • Vidal

    En alguna parte he leído que con el arduino UNO solo puede funcionar a 19200 baudios. ¿es posible?
    Por otra parte no acabo de entender por que la velocidad del arduino con el ESP tiene que ser la misma que el arduino con el PC. Vale que es comunicación serie pero en realidad son dos puertos y dos conexiones diferentes la que hay entre el pc y la que hay con el ESP ¿O no?

  • Avatar for Charly
    • Gina

    Buenos dias, sigo con los problemas, ahora ya no me sale nada en el monitor serial, he intentado con todas las velocidades pero con ninguna funciona, tambien cambie los pines de RX y TX para el 14 y 15 del arduino pero nada. Hay algo curioso, al conectar solo el modulo a la fuente externa enciende el led azul pero cuando alimento mi arduino se apaga, a que se debe eso? muchas gracias por su tiempo.

  • Avatar for Charly
    • Vidal

    Hola.

    He intentado hacer funciona el ESP 8266 y no hay manera. He probado a cambiar la velocidad una por una desde 4800 hasta 115200 y nada.
    Lo curioso es que con cada cambio de velocidad me envia un conjunto de caracteres, siempre el mismo en cada velocidad, es decir lo pongo en 115200 y cada vez que lo reinicio me da el mismo conjunto de caracteres, ilegibles, pero el mismo. He leído tus comentarios de cambiar la velocidad y de ahí las pruebas, pero nada.
    Uso un arduino UNO y una fuente de 3.3 V (la de tu montaje, de hecho la compré por tu pagina).
    ¿Que puede ocurrir?

  • Avatar for Charly
    • Admin

    Hola Gina, casi conseguridad e sun problema de velocidad de comunicacion. Los nuevos esp8266-01 viene por defecto a 115200 baud, intentalo con esta velocidad. Tambien te recomendaria, que no use con tu mega los pines 0 y 1, que son la puerta comm que tu arduino usa para comunicarse con el USB y descargar programas por ejemplo. Usa mejor la com2 o com2 y no tendras que pinchar y soltar cables cada vez

  • Avatar for Charly
    • Gina

    Hola buenas tardes, estoy intentando conectar el modulo con mi arduino Mega pero nada que consigo el READY, he probado con todas las velocidades pero con ninguna me funciona, con algunas velocidades me muestra simplemente un caracter raro, pero solo uno y solo con algunas velocidades, con otras no me muestra nada. TX lo tengo conctado al pin 0 y RX al 1, CH_PD y VCC a la alimentacion externa de 3.3v. y la masa de la fuente y del arduino juntas. Le agradezco me pueda colaborar.

  • Avatar for Charly
    • Admin

    No se que decirte Diego, en principio lo ideal seri volver a cargar el firmware para estar seguros pero no se como hacerlo sin un adaptador YSB a UART (Porque cuando consegi q m funcionara asi, no segui mirando)

  • Avatar for Charly

    Pff no tengo el adaptador FTDI a USB y he tratado de usar el arduino mega como puente, pero no he podido, usando el Flash Downloader me sale este mensaje:
    connecting ….
    Failed to connect

    Me base en este turorial http://www.instructables.com/id/Cargar-firmware-al-ESP8266-con-Arduino/?ALLSTEPS pero no he podido flashearlo.
    Usando el Putty, me pasa lo mismo que con el monitor serial de arduino, solo que en el putty se queda ciclado el recuadrito verde y en ambos no puedo mandar ningun comando.

    Otra cosa que se me habia pasado comentarte es que al programa le hice una pequeña modificacion.

    if (Serial.available())
    { char c = Serial.read();
    BT1.print(c);
    Serial.print(c); <———– Le agregue esta linea
    }

    Sin esa linea no me aparece nada, ni me responde ni al iniciarlo me manda lo que debe mandar… Cuando conecto el modulo ESP, sin conectar mi arduino a la pc, el led azul lo mantiene encendido, en cambio cuando conecto a la pc el arduino lo apaga, no se si eso sea normal.

    Crees que mi modulo este ya dañado?

  • Avatar for Charly
    • Admin

    Hola DIego, m eha pasado mas de una vez que jugando con estos modulos en algun momento me pierden la configuracion y cuando parece que estan «rotos» suele ser que hay que re flashearlos. Sigue las instrucciones de aqui: https://www.prometec.net/firmware-esp8266/ para reinstalar el firmware y asegurarnos de que todo esta correcto y me cuentas ¿Vale?

  • Avatar for Charly

    Buen dia, he estado practicando por primera vez con el ESP8266, y tengo un par de problemas que no se a que se deban.
    Cuando conecto el Rx y Tx a pines que no sean el 0 y 1 no me responde nada, en el monitor serie no me aparece nada.
    Cuando lo conecto a los pines 0 y 1, me responde pero me sale lo siguiente:

    Ai-Thinker Technology Co. Ltd.

    ready
    ƒrô

    ERROR
    Ai-Thinker Technology Co. Ltd.

    ERROR

    ERROR
    ready

    ERROR
    ƒrô

    ERROR
    ERROR

    y lo dejo y sigue ERROR ERROR, hasta que desconecto la alimentacion del ESP8266…

    Estoy usando el arduino mega.

    Sabe usted que puede ocasionarme esos errores?

  • Avatar for Charly
    • Admin

    Caray me has pillado en un error que tengo que revisar, pero de momento y mientras no se demuestre lo contrario, fiate del esquema de protoboard que lo hemos probado un monton de veces.

    PD: despues de pensar un rato veo que no hay tal error, simplemente TX y RX estan escritos como nombres que corresponden a los pines de Arduino, y para que haya comunicacion el RX de Arduino tiene que ir al TX del WIFI y viceversa ¿Vale?

  • Avatar for Charly

    Hola, antes que nada muy agradecido por el tutorial, esta muy claro.

    Cuando me disponía a realizar las conexiones me ha entrado la duda viendo los esquemas respecto a que pin es el RX y cual el TX en el módulo porque en los dibujos que figuran en el tutorial están invertidos. En el esquema de color rojo y negro el pin TX figura al lado del GND y en el esquema de Fritzing figura el RX al lado del GND. Cual sería el correcto? o estoy haciendo una mala lectura?

    Saludos!

  • Avatar for Charly

    Perfecto, en cuanto tenga un rato libre probare a reinstalarlo. Te comentare los resultados!
    Como siempre, gracias 😉

  • Avatar for Charly
    • Admin

    Hola Iker, mo te cortes que aqui estamos para echar una mano. Respecto a tu problema, a mi me paso y luego mas gente me ha reportado que bajo ciertas circunstancias el ESP8266 tiene tendencia a perder el firm y hay que reprogramarlo con lo que se le pasan todos los males y tu caso se parece mucho al mio, asi que mic onsejo es que reinstales el firmware del esp8266

    Aqui tienes una sesion en la que hablamos de eso: https://www.prometec.net/firmware-esp8266/

  • Avatar for Charly

    Si me permites hacerte una ultima pregunta. Prometo que sera la ultima sobre el modulo wifi ejej.
    El caso es que tengo 4 modulos. Al principio empece a cacharrear con uno de ellos, cuando aun no tenia ni idea de como funcionaba, pero despues lo deje de lado y segui con otro (No soy capaz de recordar porque).
    Hoy lo he vuelto ha coger y no soy capaz de hacerlo funcionar.Cuando lo enchufo se enciende y el led azul parpadea una vez como es normal, pero despues no hace nada, no consigo relacionarme con el mediante el monitor serie. He probado con todas la velocidades de transmision posibles y no consigo nada.
    Se me ocurren 3 explicaciones posibles:
    -Que el modulo este roto (Me parece raro porque se enciende)
    -Que al cacharrear con el cambiase la velocidad de transmision de datos a una que no sea estandar y por consiguiente, al no recordarla no pueda comunicarme con el (No se si te permite cambiarsela a una no estandar, por ejemplo a 4100 baudios. Que opinas?
    -Probe a utilizar el wifi como arduino y le cargue un programilla (No creo que tenga nada que ver, ni siquiera estoy seguro de si fue con este mismo modulo)

    De las 3 la mas probables son la 1 o la 2, y la dos no se si es posible. En caso de serlo hay alguna forma de restaurarlo por completo?
    Muchas gracias y siento tanta pregunta, pero no encuentro informacion en internet 😉

  • Avatar for Charly

    Me parece extraño la verdad, alimentandolos a 4 voltios no tendria que haber ningun problema creo yo… Aparte ayer probe a poner una resistencia y lo alimente a 3,2 voltios y seguia calentandose igual… a lo mejor esta roto.
    Gracias por responder 😉

  • Avatar for Charly
    • Admin

    Hola Iker, no me parece muy normal. Nunca he visto que llegue a calentrase tanto

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login