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.

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:

AT+CIOBAUD=?

CIOBAUD

Que nos informa, de que acepta velocidades de comunicación entre 9600 y 921600, casi nada.

Para conocer la velocidad actual, tenemos otro comando:

Comandos AT en ESP8266

Y para modificar la velocidad de comunicación por la puerta serie:

AT+CIOBAUD=xxxx

Pero según el manual del ESP8266, solo podemos elegir entre, 9600, 19200, 38400, 74880, 115200, 230400, 460800  y 921600 . El problema es que solo coincidimos con la consola Arduino en las velocidades de 9600 (El valor por defecto), 19200 y 115200.

Ya hemos dicho que la opinión en Internet es que a 115200, la comunicación no es fiable y por tanto elegiremos 19200 como velocidad estándar, lo que no es mucho si vamos a usar la WIFI para algo más que mandar mensajes de texto.

Asi que por ahora elegiremos 19200 como velocidad estándar, con el comando

AT+CIOBAUD=19200

Comandos AT para ESP8266

Recordad ahora reprogramar vuestro Arduino con la nueva velocidad modificando el primer programa que usamos en esta sesión.

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.

 

 

 

 

 

 

(650) Comments

    • Dani

    Hola,

    Cuidado! el dibujo del ESP8266 en frizing está al revés (boca abajo). El que hay justo encima es correcto.

    Un saludo.

    • Boris

    Hola, necesito realizar un sistema que trasmita 20 datos por segundo por cada sensor y que se almacenen en un smartphone, podría utilizar el módulo ESP8266 para la transmisión sin perdida de datos? Muchas gracias.

    • Parece muy facil enviar esos datos (Y tienes algun ejemplo de como hacerlo en los tutos) Lo de almacenarlo en el smartphone es algo diferente y necesitaras programarlo en el phone

    • Osmar

    hola buenas tardes quería saber si había alguna manera de que se configurara el modulo para pueda mandar y recibir ordenes via wifi al mismo tiempo. Que reciba información pero en determinado momento pueda enviarla también.

    • Hola Osmar, si. es muy sencillo. Basta con que abras un socket entre ambos puntos y lo uses para enviar informacion entre ellos en cualquuiere direccion

  • hola buenas tardes

    tenia una duda, lo que pasa es que quería ver si el modulo lo se podría configurar como esclavo y maestro al mismo tiempo. porque lo que quiero es mandar información de un modulo a otro modulo (todo a través de arduino ), pero el modulo que fue esclavo también me gustaría que enviara información como maestro.

    que podría hacer en este caso?

    • Hola Osmar, No estoy seguro de a que te refieres como maestro y esclavo, pero en principio si uss la programacion arduino con el esp8266 puedes abrir un socket entre ambos nodos y comunicarlos directamente

    • Simon

    Es posible enviarle instrucciones a arduino mediante el navegador y que a partir de ellas arduino envie la informacion de un contador mediante conexion wifi?

    • Claro, basta con que montes un servidor web en tu arduino y que si quieres enviarle instrucciones des la orden desde el navegador.

      Creo recordar que hay algun tuto asi

    • Simon

    La configuracion del modulo mediante los comandos AT que se envian por puerto serial debe realizarse una sola vez o la misma debe realizarse cada vez que inicia el modulo?

    • Hola Simon, Muchos de los comandos AT se mantiene cunado vuelves a rrancar despues de apagar como por ejemplo los de la velocidad del puerto serie, pero tambien hay algunos que debes repetirlos al reiniciar

  • Hola, como estan? Soy nuevo en el foro y mundo arduino…mis saludos a uds. Estoy probando el ESP8266, conecte y cargue el codigo para probar los comandos AT. Cuando alimento el modulo aparece la basura y vendedor: thinker…etc y luego la palabra INVALID. No me responde a los comandos AT, que estoy haciendo mal? Uso arduino uno y me pasa con dos modulos nuevos. Saludos!

    • SI llegas a leer los mensajes que comentas, es que has conectado bien y con la velocidad adecuada. No sabria decirte cual es el problema pero simepre puedes flashear el firm que posteamos en los tutos del esp8266 y asi seguro que se comporta igual

    • Andreu

    Hola,
    He realizado el tutorial como se indica al principio, las conexiones y tal. Utilizo un MEGA y no conseguí ver nada por consola.
    Cambié poniendo resistencia y como se indica en los comentarios utilizando SERIAL y SERIAL2.
    He probado a cambiar los baudios entre 9600 y 115200.
    Ni veo ‘Basurilla’ ni el OK (claro).
    Cuando conecto el modulo, se enciende una lucecita azul varias veces, se apaga y se enciende de forma fija una ROJA.
    No se que puedo estar haciendo incorrectamente.
    ¿Pueden ayudarme?

    • Andreu, cuando no consigues ver nada por la consola es una indicacion clara de problema de cables, ya que aunque la velocidad no este correcta, verias al menos algo de basura en la consola. Revisa los cables o bien puerta comm que estas usando

  • Buenas, si no he entendido mal, con este modulo no podemos realizar una pequeña WEb como en el tutorial del shield de ethernet donde, mediante una box, activábamos o desactivábamos un pin digital no?
    gracias

  • Hola,. buenas tardes.
    He seguido el tutorial paso por paso con un arduino uno y tengo problemas con la detección de las redes wifi. Para mi proyecto estoy usando un router(a parte del de la casa con conexión a wifi) especificamente para la comunicacion entre el arfuino y un servidor montado en una raspberry y lo que no entiendo es por qué no detecta dicho router que esta a escasos dos metros y si detecta, y mal, el que está en la otra punta de la casa.
    He intentado usarlo tambien con la misma conexión en un arduino mega 2560 de SaintSmart y ni siquiera contesta a los comandos iniciales ni da basura.
    En ambos casos el ESP8266 está alimentado, a parte del arduino, por una pila convertida a 3.3V
    ¿alguna idea de por qué puede ser u otra forma de enfrentarlo? llevo atascado un tiempo con esto y se me acerca la fecha límite del proyecto.
    Gracias y un saludo

    • Me acabo de dar cuenta que he repetido el mensaje, el anterior me pareció que no se había enviado.
      ¿puede ser que el problema de conexión a los router que tengo específicos para el proyecto se deba a que solo son redes locales y no tienen conexión al Internet?
      Gracias por las rápidas respuestas y siento haber repetido el mensaje inutilmente.
      un saludo

      • Hola de nuevo, a traves de la red local la conexion de tu equipo al otro sera instantanea porque no hay impedimento, pero si quieres hacerlo a traver de routers necesitas hacer el port forwarding del que hemos hablado varias veces y que parece que es un concepto que cuesta un poco de entender

    • Hola Fernando, Me parece extraño que no te detecte el router proximo, ¿Podria ser que lo tiene en un modo diferente asl otro router?

    • Fernando

    Estoy usando el wife que used usa pero nada mas manda basura y no e podido hacer lo trabajar Como ud. Dice ya le estube quitando la alimentacion y no responde.F

    • Hola Fernando, casi con seguridad es un problema de velocidad de comunicacion, insiste con ello

    • Luis

    Realizo todas las conexiones correspondientes, las velocidades se las cambio, utilizo arduino mega y no alcanzo a ver la basura, mucho menos el READY, que puedo hacer en mi caso?

    • Hola Luis, casi con seguridad es un problema de conexiones, un error en los pines o algo asi, si lo conectas bien deberias ver basura enseguida

      • Angel

      Si utilizas arduino mega no ocupes SoftwareSerial, mejor utiliza Serial1, Serial2 o Serial3 y ocupa una resistencia de 1kohm y 2kohm de tx arduino a rx esp8266….
      //#include
      //SoftwareSerial ESP(17, 16); // RX | TX

      void setup()
      { Serial.begin(9600);
      Serial2.begin(9600);
      }

      void loop()
      {
      // Repetir lo recibido por el ESP8266 hacia el monitor serial
      if (Serial2.available())
      { char c = Serial2.read() ;
      Serial.print(c);
      }

      // Repetir lo recibido por el monitor serial hacia el ESP8266
      if (Serial.available())
      { char c = Serial.read();
      Serial2.print(c);
      }
      }

    • Fernando

    Hola, estoy probando el módulo con los comandos AT y me responde nada más que hasta el comando AT+CWLAP. Y en este solo me recoge una wifi y mal, le cambia el nombre y no me deja conectarme con AT+CWJAP=…, y no entiendo por qué no me recibe una linea Wifi que tengo específicamente para que se conecte el ESP8266 y cuyo router está a escasos 50 cm del módulo.
    ¿Alguna idea de a que se puede deber?
    Muchas Gracias¡¡

    • Hola Fernando, no se me ocurre que decirte, he tenido varios problemas con estos modulos pero he podido irlos resolviendo sin demasiados problemas

    • Angel

    para programar el modulo wifi tengo que quitar el micro de la placa arduino..?

    • Hola Angel, Si quieres usar el esp8266 controlado por comandos AT como modulo wifi neesitas que tu arduino funcione con su micro. SI por el contrario quieres que el propio esp emule a un arduino, entonces no necesitas ni el micro ni la placa arduino adicional

    • Ricardo

    Una consulta. Para dar conexión a 3,3 V conectas CH PD y 3,3 V uniendo dos cables?

    • Hola Ricardo, si no rcuerdo mal el pin CH_PD debe estar activo (Conectado a 3,3V) para usar el modulo esp8266

  • Buenas tengo un problema el modulo nunca arranca ni muestra el ready solo lanza basura ya probe con todas las velocidades modificando el sketch y nada.

    • Víctor, asegúrate de cambiar la velocidad en el programa y en el monitor serie. A mí al menos se me suele olvidar cambiar la velocidad del monitor serie para ponerlo igual que en el programa. Por otra parte, estos módulos suelen venir a 1152000. Y ya para finalizar, te recomendaría que probases el NodeMCU, que es mucho más sencillo y funciona estupendamente. Un saludo.

      • Carlos

      Si estas usando una fuente que no tiene suficiente corriente, se te cae el modulo.
      Si estas usando el modulo serie y el de el ESP-8266 con fuentes separadas, deben conectarse los negativos

  • Hola, tengo dicho módulo y al probar absolutamente todos los baud rates coincidiendo los del serial monitor y del esp (incluso haciendo que no coincidan el serial monitor y el esp, por probar) no se obtiene el ready, de ninguna forma.
    El módulo se alimenta inclusive con una fuente de alimentación externa de 3,3V, todo está conectado de la forma que aquí se indica y se utiliza dicho sketch y al final sólo lanza basura por el Serial monitor.
    También he probado con distintos módulos que tengo por si alguno estaba roto y todos sueltan lo mismo con todos los baud rates.
    La placa es una Arduino UNO (también he probado con una Arduino Mega).
    La verdad es que ando ya un poco desesperado y no se que hacer, ni con varios módulos ni distintas placas hace algo, ¿qué podría ser?

    • Si has comprado tu esp recientemente vendra programado a 115200 baud y te conviene probar con esta velocidad y asegurarte que tanto arduino en tu sketch como la consola estan a esta velocidad vale?

      • He probado ambos a la misma velocidad en todas las velocidades y sólo saca basura por el output, ¿hay que dejarlo un tiempo largo y tendido hasta que inicie o debería iniciar a los pocos segundos?

    • Edu

    Buenas tardes, e conseguido realizar todo el tutorial menos cambiar el baudrade, y no me explico el porque… me devuelve siempre esto:
    AT+CIOBAUD=?
    ERROR

    AT+CIOBAUD=19200
    ERROR
    Alguna causa para que pase esto? es un modelo de:
    AT+GMR
    AT version:1.3.0.0(Jul 14 2016 18:54:01)
    SDK version:2.0.0(656edbf)
    compile time:Jul 19 2016 18:44:44
    OK

    Muchas gracias!

    • Hola Edu, para estar seguro de que usas el mismo firm que usamos en los ejemplos puedes volcarle el que usamos nosotros tal y como te comentamos en uno de los tutos y asi podriamos saber si hay algun problema hard o no

      • Buenos dias, el modulo wifi lo compre en esta tienda, asi que supongo que sera el mismo. Voy a buscar el firmware a ver si lo encuentro, y sino os pongo un post

  • Hola, un par de preguntas, tengo el 8266 ESP 12F, primero que no tienen el CH-PD, pero se corresponde a la pata EN supongo, porque es lo unico que queda sin nombre. Segundo, en TX y RX los puedo conectar a lo spines tambien? se dice que tienen que ser de 3,3? Saludos.

  • Hola buena noche. Disculpen la molestia… He conectado el modulo tal y cual se esta explicando.. Y he puesto el puerto en 115200 baudios, lo único que manda este es un símbolo que parece 8, es lo único que me muestra. Si lo pongo en otro puerto no muestra nada…

    • Puede ser que venga configurado a otra velocidad. Prueba por si acaso las ddemás velocidades de comunicación.

Give a Reply

WordPress Anti-Spam by WP-SpamShield

¡Ofertón!

Robot Rover 4×4

Ahora por sólo

50€ + IVA

¡Lo quiero!