El ESP8266 es un chip de bajo costo que tiene capacidad de comunicarse vía Wi-Fi, además posee una pila TCP/IP completa, este microcontrolador, es fabricado por Espressif, una empresa con oficinas en Shanghai, China.
Desde que apareció en el mercado alrededor de agosto del año 2014 ha significado una pequeña revolución en el mundo de la Internet de las Cosas, debido a su bajo costo y a la existencia de múltiples placas y módulos que lo utilizan.
En este tutorial vamos a conocer el módulo ESP-01 y aprenderemos a programarlo utilizando un convertidor USB a TTL o programador FTDI.
La Placa ESP-01
Existen varias versiones del módulo ESP-01 pero básicamente todos tienen los mismos componentes.
Pines de conexión: donde se conectan la alimentación, sensores y puertos de transmisión y recepción de datos.
ESP8266: microcontrolador del módulo ESP-01
Antena WiFi: permite que el módulo pueda conectarse a Internet.
LEDs: nos permiten conocer si el modulo esta encendido y si existe transmisión o recepción de datos.
Memoria Flash: donde se instalan los programas o sketchs.
Conexión del módulo ESP-01
El ESP-01 solo tiene 8 pines de conexión, esa es una de sus limitaciones, por lo cual debemos conocerlos bien para usarlos adecuadamente.
- GND: Ground o
tierra . - GPIO2: Salida/Entrada de propósito general (General Purpose Input Output), en los programas es el pin digital 2.
- GPIO0: Entrada/Salida de propósito general, es el pin digital 0.
- RXD: Puerto de recepción de datos seriales, trabaja a 3.3V, se puede configurar como un pin digital, que en este caso seria el número 3.
- TXD: Puerto de transmisión de datos seriales, trabaja a 3.3V y también se puede configurar como un pin digital, en este caso el número 1.
- CH_PD: Este pin se utiliza para apagar y prender el módulo ESP-01. Al estar a 0V (LOW) el módulo se apaga, y a 3.3V (HIGH) se enciende.
- RESET: Este pin sirve para reiniciar el módulo, si se coloca a 0V se reinicia.
- Vcc: Pin para alimentar el módulo, se debe suministrar 3.3V pero puede soportar hasta 3.6V. Para que la conectividad WiFi funcione correctamente, la corriente suministrada debe ser superior a 200mA.
El módulo ESP-01 no posee pins analógicos, por este motivo no podremos conectar sensores de este tipo. Pero por otro lado soporta la comunicación I2C, asi que podremos conectar este tipo de sensores utilizando solo dos pines de la placa.
Alimentación
Para programar el módulo se necesita un circuito que nos permita configurar la placa ESP-01 en modo programación y reiniciarla en caso de ser necesario.
Como vimos anteriormente, el módulo ESP-01 necesita una alimentación de 200mA para que funcione correctamente, esto nos indica inmediatamente que alimentarlo desde la tarjeta FTDI nos puede generar una conexión inestable, por lo que recomiendo alimentarlo con una placa MB102 de YwRobot la cual es muy fácil de usar y se monta sobre el protoboard como lo muestra la siguiente imagen.
Hay que tener mucho cuidado con la configuración del voltaje en cada una de las líneas, recomiendo configurar una línea con 5V y la otra con 3.3V, esto se hace cambiando de posición los jumpers laterales (selector de voltaje).
Circuito
El circuito para programar el ESP-01 esta compuesto por el módulo ESP-01, un programador FTDI, la fuente de alimentación MB102, dos switch: S1 para cambiar el modo de la placa, S2 para reinicial la placa, y finalmente dos resistencias de 10K, todo se debe conectar de acuerdo al esquema siguiente.
Ambiente de Programación
Para programar el módulo ESP-01 utilizaremos el entorno de desarrollo de Arduino también conocido como Arduino IDE, que puedes descargar desde el sitio oficial.
Utilizaremos el mismo lenguaje Arduino, pero para utilizar el IDE necesitamos descargar algunas librerías y controladores.
Añadir URL de Placas Adicionales
Ejecutar el Arduino IDE, luego ir a Archivo -> Preferencias, mi versión del IDE esta en inglés así que en mi caso es File -> Preferences
En la ventana de Preferencias / Peferences ir a la seccion Gestor de URLs Adicionales de Tarjetas / Additional Boards Manager URLs y pegar el siguiente enlace
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Luego presionar OK.
Instalar controladores para el ESP8266
En Herramientas / Tools, ir al Gestor de Tarjetas… / Board Manager…
Y en la sección de búsqueda, colocar «esp», automáticamente se muestran todos los controladores disponibles que coinciden con el patrón de búsqueda, se deben instalar los controladores para las tarjetas esp8266 by ESP8266 Community seleccionando el controlador y presionando «Install».
Finalmente debes seleccionar el tipo de placa que vamos a programar, para esto debes ir a Herramientas -> Placa, y seleccionar Generic ESP8266 Module
Con todos estos pasos ya tenemos lista la placa ESP-01 para comenzar a programarla, pero antes debemos poner la placa en modo programación.
Los Modos del módulo ESP-01
El módulo ESP-01 tiene dos modos, un Modo UART o modo de programación en el cual la placa espera que un programa se cargue en su memoria y un Modo Flash o modo de ejecución donde se ejecuta el programa cargado en la memoria.
El modo se cambia mediante los valores de los puertos GPIO0 y GPIO2 al momento de reiniciar el módulo de acuerdo a la siguiente tabla:
GPIO0 | GPIO2 | |
---|---|---|
Modo UART (carga programa) |
LOW | HIGH (desconectado) |
Modo Flash (ejecuta programa) |
HIGH (desconectado) | HIGH (desconectado) |
La placa ESP-01 tiene un pull-up interno que lleva todos los pines GPIO a modo HIGH cuando están desconectados por lo que no es necesario conectarlos a 3.3V.
Programación
La primera acción que debemos hacer es conectar la tarjeta FTDI a nuestro computador mediante un cable micro-usb, luego encender la fuente de poder MB102 para alimentar el módulo ESP-01.
A continuación debemos seleccionar el puerto COM en el cual el computador está reconociendo la tarjeta FTDI, que en mi caso es el puerto COM11.
El sketch que vamos a cargar es uno de los ejemplos que vienen con los controladores para el procesador ESP8266 llamado HelloServer y que puedes encontrar en el menu File / Examples / ESP8266WebServer / Hello Server.
Una vez cargado, debemos cambiar los parámetros de configuración por los de nuestra red WiFi para que el módulo se conecte existosamente. Para ello debes modificar las constantes STASSID y STAPSK por el SSID y la contraseña de nuestra red WiFi.
Con el programa listo para compilar y grabar en la memoria del módulo, debemos ponerlo en Modo UART, esto se hace presionando el Switch S1 y sin dejar de presionarlo, presionar el switch S2 que reiniciará el módulo. Esperar 5 segundos y soltar el switch S1.
Finalmente , en el IDE de Arduino y dar clic en «upload» o «Cargar» en el caso de que tengas el IDE en español. Cuando la carga del programa finalize verás en la barra de estado el mensaje «Done uploading».
Abre el Monitor Serial y luego reinicia el módulo ESP-01 presionando el switch S2. Deberías ver como el módulo ESP-01 se conecta a tu red WiFi e indica su dirección IP.
Abre tu navegador o browser y en la URL coloca la dirección IP que el módulo ESP-01 indica. El servidor web que acabamos de cargar en ella debería responder con el mensaje «hello from esp8266!»
Y como puedes ver ya tienes un módulo ESP-01 conectado a tu red WiFi y respondiendo requerimientos via web.
Puedes probar los otros sketchs que vienen de ejemplo como BasicHTTPClient para enviar valores a un servidor web.
Las posibilidades del módulo ESP-01 son infinitas y el costo es extremadamente bajo, ¡ahora solo te limita tu creatividad!
Buen post, solo a modo de comentario es que se puede usar programadores que van directo sobre los 8 pines de la placa, sin mas conexión, acá en chile lo venden https://www.mcielectronics.cl/shop/product/tarjeta-adaptadora-usb-para-programacion-de-modulos-esp8266-25749. El único problema que he tenido es que hay algunas versiones no compatibles entre el programador y la tarjeta, y hay que hacer alguna conexión extra por ahí. Pero las prestaciones por el precio son muy buenas.
Hola Erick, lo que mostramos en este tutorial es precisamente el circuito del programador que mencionas.
Saludos
JZ
Bien explicado, estoy montando el ejercicio «HeloServer» tal como Vd dice.
Tengo tan solo una duda. ¿Hay que respetar TX con RX y RX con TX?.
Gracias
Hola Joaquin
Si, hay que respetar TX con RX y RX con TX, si no lo haces no funciona.
Saludos
JZ