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.

 

 

 

 

 

 

(678) Comments

    • Felo

    Gracias, no entendia bien la pagina de arduino que me recomendaba la libreria esp8266wifi pero esa parece para programar el nodemcu con el arduino ide. Estan disponibles todos los comandos AT para los que le interese en la pagina de espresif

    • Juan Manuel Bascuñan

    Buenos dias, tengo una duda con respecto a la IP que me tira el modulo. He probado la misma IP en cada navegador que tengo instalado y en ninguno parece funcionar. Tendras alguna ayudilla que me puedas dar. Por ejemplo si hay que especificar algo para entrar en ese modo de funcionamiento, porque yo he seguido el tutorial dos veces y me sigue tirando el mismo problema. Gracias

    • Hola JuanMa,

      EL mejor consejo que te puedo dar es que tires el esp8266 y compres un nodemcu: https://www.prometec.net/producto/nodemcu-lua-v2-amica/

      El esp01 esta obsoleto porque es muy molesto de trabajar y siempre hay algun cable suelto. Hazme caso pillate un nodemcu y te ahorraras muchos disgustos

      • admin, No estoy muy de acuerdo con esta opinión, entiendo que usted quiera vender pero creo que no es justo hacerlo acosta de la desinformación, según usted “El esp01 está obsoleto porque es muy molesto de trabajar” esto es falso puesto que usar un esp01 o un nomemcu no es más que la diferencia de usar un adaptador USB-TTL y las librerías que interpretan los comandos AT por nosotros, cuando una persona elige usar Arduino lo hace porque le gusta probar y experimentar pero la industria nos tiene acostumbrado a que compremos sin mas y ellos a crear cajas negras, solo para sus propios beneficio y cerrar las puertas al arte de aprender e investigar, a los jóvenes cada vez se les aleja más de la creatividad propia

    • Alvar_g

    Buenas Tardes, os pedí un ESP8266, lo he conectado como indicáis y fuente externa de 3,3V, y no hay manera de que funcione, no responde a nada.

    Un saludo

    • Hola alvar, Los esp01 son un autentico dolor de cabeza porque requieren muchos cablecitos y ademaqs dan problemas de alimentacion frecuentes
      Te aseguro que todos los ejemplos publicados estan, comprobados, pero el mejor consejo que te puedo dar es que te olvides de esp01 (Esta obsoleto) y pases a usar un nodemcu y veras como la cosa mejora mucho ¿Vale?

    • Andres

    Cuando te refieres a que es preferible conectarle a una fuente externa, podrias dar mas detalles ? Yo en vez de la entrada USB utiliza la entrada jack, con una pila “PowerFullCell Extra Heavy Battery 1694D 6F22 9V”. Lo unico que deduzco de ahi es que alimentará al arduino con 9 V, mi idea era enchufar luego el ESP al pin de 3,3 Voltios de la placa arduino……. ya que segun tu post, si la enchufo a la de 5 Voltios la quemaré (y entiendo que si la enchufo al PIN “vin” de la arduino todavia peor, porque le sumistraria directamente los 9 voltios….

  • Hola, este modulo se puede utilizar par acomunicarse via wifi con maquinas CNC(utilizan rs 232), creo q hay otros modulos q si pero este es mas barato, gracias

    • Supongo que deberías, pero yo tiraría siempre al NodeMCU

    • Carlos

    A mi me ha funcionado
    AT+UART_DEF=9600,8,1,0,0
    para cambiar la velocidad, lo ví en el sitio
    http://www.naylampmechatronics.com/blog/54_arduino-y-esp8266-como-cliente-web.html

    • Carlos

    Hola, tengo el problema al ingresar la ip en el navegador, no carga y no aparece nada en el monitor, sospecho que hay un problema de los puertos o de mi internet, ya que la dirección IP que me da es 192.168.4.1.
    A partir de ahí nada en funciona como debería.

    • Hola Carlos, no me das muchas pistas para diagnosticar el problema. ¿Cual es yu ip?

    • Pablo

    HOLA

    Tengo problemas de basura en el monitor serial de Arduino IDE, Es legible pero me muestra mucha basura

    AT+RST

    OK
    WIFI DISCONNECT

    etq@Jan 8 2013,rst cause:3, boot modd:(3,0)

    l+⸮⸮⸮⸮т⸮⸮⸮⸮⸮⸮bb⸮⸮⸮Š⸮b⸮⸮⸮⸮⸮⸮⸮j
    tXM⸮j
    chksum 0x8d
    l8 tXm⸮⸮j
    chk0 3ot
    m S j⸮⸮⸮j
    u⸮⸮⸮l⸮⸮⸮

    tengo configurado en el código y en el monitor serial ambos con 115200 de baud rate, he probado con varios baudrates y no he conseguido mejorar, así como trabajar con una fuente externa el modulo ESP (tierras en común de la placa) y fuente, así como con la mima de la placa Arduino.

    Alguna opcion

    • La verdad es que a mmi tambien me ha pasado y te recomendaria actualizar el firm o mejor aun olvidate del esp01 y pasate al nodemcu

    • Eusebio

    Hola

    A ver si me puedes iluminar porque llevo unos días dándome contra un muro y Google no me ayuda.

    Tengo el ESP-01 y probándolo desde un conector USB-TTL funciona correctamente, los comandos AT responden como se espera.
    Cuando lo conecto al Arduino Uno como indicas (con alimentación externa para los 3,3V.) y con el programa para interactuar con comandos AT (al igual que hago con putty) el módulo ESP-01 no devuelve nada (función BT1.read())
    Tengo dos ESP-01 y con los dos pasa lo mismo.

    Muchas gracias.

    • Hola Eusebio, puede ser un problema de velocidad de comunicacion de o de un error en el programa. De cualquier modo el esp-01 esta obsoleto y te recomiendo mucho que te pases al nodemcu que es similar pero con un manejo infinitamente mas comodo

    • JLopez

    Hola
    Tengo un modulo ESP-01 y un Arduino UNO. Aparte tengo una placa que da alimentacion de 3.3 y 5 V. El Arduino será alimentado por USB y el ESP01 por la alimentación externa.
    Lo primero que hago (despues de subir el programa al Arduino) es alimentar la placa y los leds rojo y azul del ESP01 se iluminan. Después alimento el Arduino con el USB desde el PC y el led azul se apaga. ¿Esto está bien? Por el monitor serie no se ve respuesta alguna del módulo ESP01.

    • Hoal Jlopez
      Asegurate de que la comunicacion va a 115200 y despues insisto en que el esp01 esta obsoleto y te interesa usar el nodemcu que es mucho mas comodo de manejar

  • Muy buenas.
    He conseguido seguir el tutorial hasta el final con éxito: resolver el problema de las velocidades de comunicación con un arduino UNO, concectarme a mi red Wifi, crear el servidor y que cuando introduzco la dirección IP que me asigna en el navegador aparezcan en la salida serial un mensaje de conexión. El motivo de mi consulta es sobre esto último: que responda a las llamadas desde el navegador. A pesar de que parce que todo está bien ( conexión a Wifi) solo lo he conseguido las dos primeras veces (cuando seguía el tutorial) y lo he intentado muchas mas, sin éxito. ¿Por que?
    Gracias por compartir estos tutoriales que son una joya.

    • Alvaro

    Buenas, una consulta. Al conectar los pines virtuales 2 y 3 TX, RX del Arduino a los TX, RX del ESP8266 para la comunicación serie, no debería conectarse estos pines mediante un level shifter bidireccional, como el arduino funciona a 5V y el ESP8266 a 3.3V. No habría un problema ahi?. Muchas gracias de antemano.

    • Hola alvaro, A primera vista tienes toda la razon, pero el esp-01 es tolerante a 5V por lo que no es necesario el level shifter

    • Carlos Espinoza

    Hola tendras un ejemplo de sockets con este modulo????

    • Hola Carlos, No tengo ningun ejemplo hecho pero me apunto el tema porque me parece muy interesante

Give a Reply

WordPress Anti-Spam by WP-SpamShield