Introducción - pensactius/ESP8266 GitHub Wiki
(Información extraída de Random Nerd Tutorials)
Introducción
Cuando pensamos en una placa basada en microcontrolador para nuestros proyectos lo primero que pensamos es en usar Arduino. Es sencilla de usar, barata y ofrece gran cantidad de E/S digital y analógico.
Pero Arduino tiene sus limitaciones. Una de ellas es la velocidad, las placas Arduino basadas en AVR corren a 16 MHz. Suficiente para un amplio rango de aplicaciones, pero demasiado lento para otras.
Arduino ofrece un número considerable de E/S digital y analógico que satisfacen la mayoría de necesidades. Pero si queremos añadir WiFi necesitamos añadir componentes externos o usar una placa Arduino de la familia MKR que tiene WiFi incorporado.
Aunque la familia MKR de Arduino es una buena opción, en esta serie de artículos nos centraremos en una alternativa más económica: la ESP8266
Introduciendo ESP8266
El ESP8266 es un módulo WiFi de coste muy bajo (unos 2€-4€).La gama ESP8266 es en realidad una serie de microcontroladores producidos por Espressif Systems en Shangai. Hay disponibles varios módulos basados en ESP8266 de coste muy bajo. Se puede controlar diferentes entradas y salidas igual que se haría con un Arduino, pero con WiFi incorporado.
¿Qué se puede hacer con un módulo tan barato?
- Crear un servidor web
- Enviar peticiones HTTP
- Controlar salidas
- Leer entradas e interrupciones
- Enviar e-mails
- Postear tweets
El siguiente tutorial (en inglés) explica cómo crear un servidor web con ESP8266.
Especificaciones del ESP8266
- Voltaje de operación 3.3V
- WiFi 802.11/b/g/n integrado
- MCU Xtensa 1 Core de 32-bits
- Frecuencia de trabajo típica de 80 MHz
- 16 Entrada/Salida digital (en la práctica queda reducido normalmente a unos 11)
- 1 ADC (analógico)
- 1 canal SPI
- 1 interfaz I2C (por software)
- 1 interfaz I2S (para audio digital)
- 1 UART para comunicaciones serie
- 4 MB de Memoria Flash normalmente el placas NodeMCU (En sí el ESP8266 soporta hasta 16 MB)
- PCB Antena
- Hasta 8 canales de LED PWM (pulse width modulation)
El ESP8266 tiene una versión mejorada - el ESP32. El ESP32 combina WiFi y Bluetooth y tiene un MCU de doble núcleo.
Módulos ESP8266
Hay una gran variedad de módulos basados en el chip ESP8266, de la misma forma que hay varios módulos Arduino basados en chip AVR (Arduino UNO, nano, etc.). En la siguiente figura (extraída de Random Nerd Tutorials) podemos ver algunas variantes:
El módulo ESP-12E es muy común, usada en la placa Wemos D1 mini o NodeMCU).
Las diferencias principales entre las diferentes placas basadas en ESP8266 es cuánta flash tiene, como están conectados los pines GPIO (General Purpose Input Output/Entrada Salida de Propósito General) al mundo exterior y si tiene conversor USB-Serie integrado para poder programar directamente desde el USB del ordenador.
En este tutorial nombraremos los pines usando los nombres del chip (i.e. GPIO0) y no el nombre en la placa. No Debería ser difícil encontrar qué pin corresponde a tu placa en particular.
Personalmente, yo uso una versión de NodeMCU algo diferente, pero tiene exactamente las mismas funcionalidades que el resto de placas tipo NodeMCU.
ESP8266 Pinout
Las placas más extendidas a fecha de escribir estas líneas son la WeMos D1 Mini y la NodeMCU. Mostraremos el pinout de ambas placas.
ESP-12E NodeMCU Kit Pinout
A continuación se muestra el pinout de la ESP-12E NodeMCU:
WeMos D1 Mini Pinout
Este es el pinout de la WeMos D1 Mini:
Es recomendable echar un vistazo a esta guía de los pines ESP8266 que muestra en detalle la función de cada GPIO y cómo usarlos:
Programando el ESP8266 con Arduino
El ESP8266 se puede programar desde diferentes entornos de desarrollo. Se puede programar tanto en C++ (como en Arduino) o en MicroPython.
Para obtener el máximo de características del ESP8266 Espressif provee del Espressif ESP8266 RTOS SDK (IDF Style).
Para principiantes, la mejor forma de comenzar es usando el IDE de Arduino. Aunque no es el mejor entorno para el ESP8266, tiene la ventaja de ser una aplicación que conocemos muy bien y fácil de programar.
En esta sección describiremos cómo programar el ESP8266 usando el entorno Arduino. Si prefieres programar en MicroPython puedes consultar nuestra guía
Comenzando con el IDE Arduino
Antes de poder usar el IDE de Arduino con una placa ESP8266 necesitamos añadir las placas ESP8266 al gestor de placas (Arduino IDE Board Manager).
Añadir ESP8266 al Gestor de Placas de Arduino
Para instalar las placas ESP8266 sigue estos pasos:
- Abre el IDE Arduino. Asegúrate de usar la versión 1.8 o superior.
- Haz clic en el menú Archivo en la barra superior del menú.
- Haz clic en Preferencias. Se abrirá el cuadro de diálogo Preferencias.
- Deberías estar en la pestaña Ajustes del cuadro de diálogo Preferencias.
- Busca el apartado “Gestor de URLs Adicionales de Tarjetas”.
- Si ya hay texto en ese cuadro de texto añade una coma al final de este y continúa con el siguiente paso.
- Pega el siguiente enlace en el cuadro de texto
- Haz Clic en el botón OK para guardar los cambios.
Debería quedar algo así:
A continuación deberás usar esta nueva entrada para descargar las placas ESP8266 al IDE de Arduino:
- En el IDE de Arduino haz clic en el menú Herramientas.
- Busca el apartado de Placa: (i.e. Placa: Arduino/Genuino Uno).
- Se abrirá un submenú cuando selecciones la entrada Placa:.
- En la parte superior del submenu aparece Gestor de Tarjetas... Haz clic en éste para abrir el cuadro de diálogo Gestor de Tarjetas.
- En el filtro de búsqueda teclea “ESP8266”.
- Deberías encontrar “ESP8266 by Espressif Community”. Selecciona esta entrada y haz clic en el botón Instalar.
- Esto instalará las placas ESP8266 en el IDE de Arduino.
Ahora en el apartado de Placa: deberás ver las placas basadas en ESP8266. Deberás seleccionar la correspondiente (o una equivalente). Nosotros trabajaremos con una placa tipo NodeMCU, así que seleccionaremos
- NodeMCU 1.0 (ESP-12E Module)
Si utilizas la placa WeMos D1 Mini deberás seleccionar
- LOLIN(WEMOS) D1 R2 & mini
Conexiones
Para los próximos experimentos usaremos el siguiente conexionado (extraído de la página randomnerdnutorials.com). Como se mencionó antes, nos referimos a los pines por su nombre GPIO, no por por los números en la placa, pues puede variar en las diferentes placas ESP8266.
Hola Mundo - Parpadeo ESP8266
Vamos a realizar el típico proyecto "Hola Mundo" para microcontroladores: un LED que parpadea. El clásico programa Blink para ESP8266 sería el siguiente:
int ledPin = 2;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("ENCENDIDO");
digitalWrite(ledPin, HIGH);
delay(1000);
Serial.println("APAGADO");
digitalWrite(ledPin, LOW);
delay(500);
}
Hemos usado el GPIO 2 porque tanto en la NodeMCU como en la WeMos está conectado a un LED interno (como sucede con en placas Arduino con el pin 13). Fíjate que el LED interno y el LED que has conectado a D4 (GPIO2) se encienden y apagan alternativamente. Eso es así porque, tal como está conectado el LED interno en la placa, cuando GPIO2 está a HIGH el led interno se apaga y viceversa.
Además hemos hecho uso del monitor serie para mostrar el estado del LED. Fíjate que hemos usado una velocidad de transferencia mayor. Es común en placas ESP8266 usar velocidades serie de 115200 baudios.
Subir el programa
Después de teclear el programa deberás compilarlo y subirlo a la placa ESP8266. Observarás que tarda algo más en compilar programas para ESP8266 que para Arduino. En el caso de la placa NodeMCU y WeMos ambos procesos son automáticos.
Con otras placas ESP8266, o si tienes problemas subiendo el programa, es posible que requiera de un paso adicional.
Comienzas igual, dándole al botón de Subir y comienza la compilación. Observa el estado en la parte inferior del IDE de Arduino. Cuando finalice el proceso de compilación aparecerá el mensaje "Conectando"
, seguido de unos puntos.
Cuando veas esto, pulsa el botón BOOT/FLASH y mantenlo apretado hasta que aparezca el progreso de subida.
Cuando el programa termine de subirse a la placa puede que necesites pulsar el botón ENABLE o RESET (algunas placas no necesitan este paso).
En el caso de la placa que estamos usando no ha sido necesario ninguno de los pasos anteriores. Al igual que con un Arduino normal, el programa se compila y sube automáticamente en cuanto pulsamos Subir, así que depende de la placa que sea necesario o no.
Si todo ha ido bien, deberías ver el LED parpadear y por el monitor serie deberías ver los mensajes "ENCENDIDO", "APAGADO" alternando, según el estado del LED.