PRIMER CONTACTO CON EL MÓDULO WIFI.
CREADO POR V. GARCÍA. EL 16.04.2016
INTRODUCCIÓN.
Desde hace un tiempo, he estado siguiendo una serie de noticias sobre unos módulos experimentales que están recibiendo elogios por gran parte de los aficionados a la electrónica y que habitualmente se divierten (algunos viven de ellos), con sus proyectos, unas veces basados en la plataforma Arduino y otras veces basados únicamente estos módulos ESP8266, a los que me refiero. Estos módulos como ocurre en muchos de los dispositivos nuevos, tienen sus particular filosofía y los primeros pasos consisten en conocerlos y hacerles un sitio en nuestros proyectos, y eso es lo que vamos a intentar hacer.
El ESP8266-01 es un chip WiFi activado de muy bajo costo. A primera vista, parece con muy limitadas E/S accesibles, quizás por ese motivo hay tantas versiones.
EMPECEMOS.
Pensé en pedir uno de estos módulos y realizar algunos ejercicios con él. Había leído entre otras características que, se alimentan con 3’3 voltios, eso no me frenó, naturalmente no era suficiente o tal vez por pura euforia, ya que quería empezar a probarlo, la cuestión es que adquirí el ESP8266-01, pronto comprendí que era el miembro más sencillo de la familia, ya que sólo dispone de dos puertos GPIO 0 y GPIO 2 accesibles para el usuario.
Según el fabricante, el ESP8266 se encuentra entre los chips WiFi más integrados en la industria con el tamaño de 5 mm x 5 mm; que integra los conmutadores de antena, balum RF, amplificadores de potencia, amplificador recepción de bajo ruido, filtros, módulos de administración de energía, mientras que requiere mínima circuitería externa. La solución completa, incluyendo el módulo front-end, está diseñado para ocupar la mínima área del PCB, como se aprecia en la imagen.
Este módulo ESP8266-01, es el más pequeño, tiene unas dimensiones muy pequeñas 25×14 mm y como he comentado, es el en la familia, el de menos puertos accesibles para el usuario.
Las conexiones de hardware necesarias para conectar el módulo ESP8266-01 son bastante sencillas, pero hay un par de elementos importantes a tener muy en cuenta relacionados con la energía:
- El ESP8266 debe alimentar con 3,3 V de potencia, no se debe alimentar con 5 voltios!
- El ESP8266 tiene que comunicarse a través de puerto Serial a 3,3 V y no tiene entradas que toleren 5V, por lo que necesita conversión de nivel para comunicarse con un microcontrolador de 5V como la mayoría que utiliza Arduino.
Fig. 2 Estos son módulos de mayores prestaciones. ESP8266-12F y ESP8266 ESP-12WIFI
En algún sitio leí, si usted es aventurero y no tiene miedo a lo que pueda salir por lo ignorando, es el segundo requisito. Porque nadie se toma ninguna responsabilidad por lo que ocurre si usted lo hace. Así que, decidí que actualizaría el firmware de la ESP8266 a la última versión y vería si podía hacerlo funcionar.
Después de lo que he leído y probado, veo que cada uno estamos compilando distintas aplicaciones para el chip, simplemente reprogramando el flash serie en el módulo. Pensé, debe ser fácil, sólo tengo que descargar un archivo binario y ya está! La verdad resultó ser un poco más complicado. Sin embargo, todavía tengo el deseo de hacer algo que reaccione e interactúe con el mundo físico, no sólo el digital, debo seguir.
En estos momentos el sofware disponible, es un montón de diferentes herramientas de programación que se utilizan y quizás esto sea parte de la confusión que hay en torno a diferentes herramientas de programación que se utilizan entre ellos. Algunos de estos programas o herramientas requieren específicamente cuatro archivos binarios diferentes, dependiendo del rango de direcciones del chip flash. Mi corta experiencia me dice que, como en todo es cuestión de probar y rectificar. Yo no quería que mi módulo me quedara “como una china en el zapato“, incluso aunque cueste sobre 3€ cada uno.
El ESP8266-01 es el módulo más pequeño y sólo tiene 8 pines. De éstos: VCC, GND, RST (reset) y CH_PD(selección de chip) no son pines E/S, pero son necesarios para el funcionamiento del módulo. Esto nos deja GPIO0,GPIO2, TX y RX disponibles como posibles pines de E/S, incluso éstas tienen funciones pre-asignadas. La GPIO0yGPIO2 determinan el modo de arranque del módulo y los pines TX/RX, se utiliza para programar el módulo y así mismo, de E/S serie, comúnmente utilizado para la depuración. Además GPIO0 y GPIO2 necesitan tener una RPA (resistencias pull-up) conectadas para asegurar que el módulo se pone en marcha correctamente. Como se indica en la tabla 1.
La característica principal de una placa es la cantidad de flash que tiene, cómo los pines GPIO están conectados con el mundo exterior, y si incluye o incorpora un convertidor USB-serie para hacer la UART a disposición de su PC.
El requisito mínimo para el tamaño del flash es de 512kbyte. Un tablero con esta cantidad de memoria flash no tiene espacio para un sistema de archivos, pero por lo demás es completamente funcional. Si su placa tiene 1 Mbyte o más de flash de entonces se soportará un sistema de archivos. Los nombres de los pines se dan en este tutorial utilizando los nombres de chips (por ejemplo GPIO0) y debería ser fácil de encontrar qué pin corresponde a en su placa en particular.
Así que, decidí probar el programa oficial de Espressif esp8266_flasher.exe. También he descargado el archivo defirmware v0.9.2.2 AT. Después de volcar el contenido de ambos archivos en una carpeta, tenía la siguiente imagen:
Fig. 4
Ahora con doble-clic, ejecutamos el archivo esp8266_flasher.exe. Pulsamos el botón BIN, en la ventana abierta seleccionamos el archivo de firmware ai-thinker-0.9.5.2.bin o el archivo esp_8266_bin0.92.bin.
Escribamos el valor del puerto que le corresponda en su casilla. Si no sabe cual es, en Windows vaya al Administrador de dispositivos y busque Puertos (COM & LPT). En mi caso se ha seleccionado el puerto COM5.
Seleccionamos el archivo de firmware de la ai-thinker-0.9.5.2 AT y haciendo clic en Abrir, retornamos a la ventana principal con el archivo de firmware que aparece en el campo Bin. Como se aprecia en esta figura.
Luego seguiremos con esta herramienta. Ahora, veamos como preparar el módulo ESP8266, para poder trabajar con él.
PROBANDO EL ESP8266.
Después de tanto preámbulo ha llegado el momento esperado, a partir de aquí vamos a lo práctico. Sin olvidar que estos módulos necesitan 3V3 para su funcionamiento, por dicho motivo, sería adecuado disponer de un Modulo Conversor Adaptador FT232RL FTDI USB a TTL Serial, de los muchos que hay en el mercado, asegúrese que puede conmutar la salida VCC entre 5V y 3V3 será suficiente. Si usted emplea este módulo ESP8266 con la ayuda de un IDE de Arduino, que trabaja en 5V, en cuyo caso estaría bien que usted disponga de un adaptador de niveles, descrito aquí, o adquirir uno como se indica.
Lo primero es identificar los pines del módulo que usted tenga, ya que existen muchas versiones de ellos, aunque lo que les diferencia es la disponibilidad de los pines. La siguiente imagen muestra la numeración de los pines del módulo ESP8266 -01 ( que es el más sencillo) que vamos a utilizar para nuestras primeras experiencias.
Con esta versión, sólo disponemos de GPIO0 y GPIO2 con los que podremos controlar los objetos que nos interesen.
PREPARAR LA PRACTICA.
Hemos identificado los pines de nuestro ESP8266, ahora debemos verificar si funciona, así que, vamos a conectar nuestro módulo, una vez más, ATENCIÓN!! el voltaje de alimentación ha de ser de 3,3V tengamos cuidado si no queremos dañar nuestro modulo. En algunos sitios dicen que los pines TX y RX son tolerantes a 5 volts, de todos modos, si disponemos de un reductor de 5V a 3,3V sería mejor utilizarlo y no arriesgar. Veamos:
Constatar identificación de pines:
Como mi adaptador FTDI USB dispone de una salida de 3,3V, no será necesario utilizar un regulador para reducir la tensión hasta los 3’3V, como se indica en la imagen siguiente:
Estos son los pines y su correspondencia entre el adapatador y el módulo ESP8266-01:
1 2 3 4 5 |
El VCC 3,3V del ESP8622 al pin VCC 3,3V del FTDI El GND del ESP8622 al GND del FTDI El pin RX del ESP8622 al TX del FTDI El pin TX del ESP8622 al RX del FTDI El pin CH_PD del ESP8622 al 3,3V FTDI |
Conectaremos de la siguiente forma el FTDI al ESP8266. Los colores de los hilos ayudarán a no equivocarnos. Para la programación también es necesario conectar a GND el pin 6 GPIO 0, pero vamos por partes.
Para asegurarnos el buen funcionamiento del gestor de arranque sea normal, los pines GPIO 0 y GPIO 2 del ESP8266 deben ser puestos a VCC. Un par de resistencias de pull-up 3,3 KΩ (por el tipo de lógica utilizada), en los pines de CH_PD y RST para mantener habilitado el ESP8266. Se proporcionan los pulsadores Prog-FLSH y RST para poner momentáneamente los pines GPIO0 y RST a tierra, respectivamente como se describe luego.
Volvemos al descargador esp8266_flasher que tenemos abierto. Una vez conectado correctamente todo, alimentaremos el circuito anterior y pondremos el ESP8266 flasher en su modo de programación flash.
Para la programación, reiniciamos la tarjeta ESP8266 manteniendo el pin GPIO0 a bajo, al pulsar el botón Prog-FLSH y el RST, pulsamos DOWNLOAD y soltando primero el botón RST y poco después el botón Prog-FLSH. Esperamos a que borre la memoria flash y cargue el programa, esto se toma un poco de tiempo y al terminar muestra esta leyenda, aunque indica un fallo, no se preocupe, no se porque motivo esto, pero ya está funcionando.
Ahora, para hablar con el módulo ESP8266 y verificar que hemos programado bien la memoria flash, debemos abrir un monitor Serial como el de Arduino (o Putty) y pulsar el botón RST (del circuito), para colocar el módulo ESP8266 en modo de usuario. Esta imagen muestra el monitor Serial de Arduino.
Se han ejecutado unos comandos AT para verificar que se ha programado el archivo previsto y así ver que funciona con normalidad.
VEAMOS EL USO DE PUTTY.
Las comunicaciones UART (Universal Asynchronous Receiver-Transmitter) nos permiten enviar datos entre diferentes circuitos, es habitual encontrar entornos de trabajo que incluyen estas comunicaciones como el de Arduino, con el que podemos depurar nuestros programas con una aplicación de tipo terminal con el ordenador de forma adecuada. Seguramente su sistema operativo dispone de un programa de comunicaciones serie como PuTTY, entorno que le recomiendo ya que es de código libre.
Si no tiene práctica, para configurar el terminal Putty, siga estos pasos. En la casilla Serial line, escriba un nombre que lo identifique, en Speed pruebe diferentes valores hasta que el resultado sea legible, yo lo encontré en 115200 Baudios.
Cuando tanga sus valores, puede guardar su configuración con un nombre, que puede servirle como referencia para otras veces.
En la pestaña Serial, puede verificar sus valores y adecuarlos para cada ocasión.
Una vez configurado el terminal Putty, pulsamos “OPEN“, se abrirá una ventana MSDOS y en ese momento debemos pulsar el botón RST del circuito, para colocar el tablero ESP8266 en modo de usuario. Nos mostrará una leyenda con un Ready final, acto seguido introducimos los códigos los comandos son, del tipo AT, como se aprecia en las imágenes.
Y ahora, sigamos. He utilizado estos comandos como una demostración, para este caso:
1 2 3 4 5 |
AT+GMR : Muestra el ID del módulo de firmware en uso. AT+CIFSR : Muestra la dirección IP asignada al módulo por el router. AT+CIPSTATUS : Muestra el estado de la conexión. AT+CWMODE? : Muestra el actual acceso modo. AT+RST : Resetea el módulo. |
Puede copiar estos comandos y pegarlos si quiere probar los resultados.
Hemos logrado hablar con el ESP8266-01 que era nuestro objetivo, espero poder continuar con esta ‘serie’.
Exención de responsabilidad:
Este es un software y hardware experimental. Úselo bajo su propio riesgo. El software y hardware presentado en estas páginas aunque ha sido probado por el mantenedor/desarrollador de estas paginas, no se hace responsable bajo ninguna circunstancia por los daños de hardware o software, pérdida de datos o cualquier otro daño directo o indirecto, como resultado del uso de este software o hardware. Ni del mal uso que usted haga con él.
Si usted no está de acuerdo con estas condiciones, no podrá utilizar o distribuir más este software o utilizar cualquiera plantillas para piezas, para la construcción que aquí se presenta.
Hola,
Soy nuevo en esto y toda la documentación que encuentro sobre los pines del ESP8266-01 es con 8 pines. en cambio los venden con 5 pines.
Podria alguien indicarme a que corresponde cada pin.
Muchas gracias
Jules
Un tutorial muy bueno sobre el módulo wifi para Arduino, muchas gracias!
Hola Santi, gracias a ti.
Hola Vicente.
Yo tambíen me armé de valor y compré el ESP8266-07, que permité añadirle una antena externa. Se gana mucha autonomía con ella, y permite tener el módulo y Arduino en otra estancia de la casa, lejos del router WIFI, que conecta sin problemas. Hice una página con dos botones virtuales para poder encender y apagar una lámpara por Internet. Funcionó perfectamente, pero sí es cierto que a veces se quedaba colgado el tinglado, no siempre, después de estar algunas horas en marcha. Estaba montado en protoboard, y quien sabe si esto pudiera afectar. O que simplemente mi router dejó de enviar señal y el ESP se cuelga.
Saludos.
Hola Jesús.
La verdad es que no se bien porque ocurre esto de perder la información que se ha grabado, me da la impresión de que ha pasado algo que me ha deteriorado el ESP8266-01, pues si le quita la alimentación y vuelvo a conectarla, no funciona, parece que no guarda el programa en la eprom. Me tiene un poco desanimado, pero antes de dejarlo, aún pienso probar un centenar de cosas con él, jeje.
Un saludo.
Hola de nuevo.
Quizás me expliqué mal. Mi módulo no pierde el firmware, ni tampoco la contraseña WIFI guardada, solo comprobé que se perdía la comunicación con el router, alguna vez, no siempre, después de algunas horas, con lo que tenía que resetarlo ( mediante un pulsador que agregué ) para volver a entrar en la página.
No recuerdo en dónde lo leí, pero añadían dos condensadores cerca del módulo para estabilizar la tensión y filtrar, pues se podia producir lo que comentas de pérdida de información o que el firmware se corrompa. Yo se los puse en su día y no tuve problemas. Los valores fueron a ojo. Uno de 100nF y otro de 470uF.
Ya me comentas que te parece.
Saludos.
Hola Jesús.
He estado de viaje y por eso el retraso. Ciertamente los condensadores de filtro cerca de los IC es recomendable siempre. Aunque en mi caso, creo que la integridad de mi ESP8266, está comprometida y por ese motivo no fiándome de él, he pedido dos unidades más, para asegurarme de donde viene el problema.
Así que, ya veremos que ocurre cuando lleguen me pongo al lío, pues estoy interesado en estos IOT, por sus posibilidades. Es una lastima que solo sean transmisores o receptores, ya sería una pasada que fueran completo (full).
Un saludo.
Agradecer que personas como vosotros divulgue conocimientos. sobre el 8266 encuentro cientos de tutoriales, lo cierto es que
todos de alguna manera se relacionan en la utilización de Arduino
Mi pregunta a quien pueda y quiera contestarme:
Puede este popular 8266 conectar dos puntos mediante sendas placas controladas por microcontroladores con solo usar
comandos AT, es decir que solo se aproveche su conexiòn Wifi.
Gracias de antemano a quien se tome las molestias de contestarme
Mi mail : manulopezlopez051@gmail.com
Hola Xose.
El ESP8266, es el más pequeño de la familia, encuanto a salidas, sólo dispone de dos GPIOs. Poder poner en contacto dos puntos entre sí, puede y no sólo con comandos AT que es como una forma más engorrosa de menejar. Supongo que uno lo utilizarás como AP (punto de acceso) y el otro como ST (modo estación). Aunque dependiendo del programa puedes realizar el cambio de estado según tus necesidades.
Espero haber dado respuesta a tu consulta.
Saludos.