Primer contacto con el módulo ESP8266WIFI.
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 GPIO0y GPIO2 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.
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 de firmware v0.9.2.2 AT. Después de volcar el contenido de ambos archivos en una carpeta, tenía la siguiente imagen:
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.
Fig. 5
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 adaptador 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.
Para evitar confundir al principiante, he modificado las imágenes, 9 y 11.
Para asegurarnos del buen funcionamiento del gestor en el momento de su programación, el pin6 GPIO 0 debe ser puesto a bajo GND mediante un puente (color verde en la imagen), que se eliminará para el normal funcionamiento. Además, por el tipo de lógica utilizada (son drenadores) necesitan resistencias de pull-up 3,3 KΩ a VCC, en los pines CH_PD y RST para poner dichos pines en alto. El pulsador momentáneo, nos permite el reinicio por reset en cualquier momento.
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.
El monitor PUTTY me esta dando problemas y no se el motivo. He decidido seguir con el monitor de Arduino y he realizado alguna incursión en los comandos AT que me han dado la siguientes respuestas.
Y ahora, sigamos. He utilizado estos comandos como una demostración, para este caso:
1 2 3 4 5 6 7 8 9 |
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+CWMODE=3 : Pruebe 3. AT+CIPMUX=1 : Habilita múltiples conexiones simultaneas. AT+CIPSERVER=1,80 : Inicia un servicio web (con el número de servicio=1) en el puerto 80 AT+CWLAP : Muestra las redes WIFI de alrededor. AT+RST : Resetea el módulo. |
Puede copiar los comandos AT de la lista anterior y pegarlos uno a uno, 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.