Un microcontrolador es un circuito integrado con capacidad de ser programado varias veces, en función del código que tenga grabado en su memoria, para ejecutar las distintas órdenes que le indiquemos. Se componen principalmente de tres bloques: la unidad central de procesamiento (CPU en inglés), la memoria y los periféricos de entrada o salida.
Características del ESP8266
Este microcontrolador fabricado por la compañía Espressif incorpora además de los tres módulos básicos de un controlador, un módulo Wi-Fi para comunicación. En las placas en las que se coloca este chip, vienen impresas unas antenas de manera compacta para poder utilizar dicha comunicación. Esto convierte a las versioens del ESP8266 en un dispositivo pequeño, pero batante potente.
Su CPU está basado en procesador de 32 bits y su chip Wi-Fi integra gestión de pila TCP/IP, lo cual convierte al ESP8266 en un microcontrolador con conectividad Wi-Fi completa.
La memoria de este microcontrolador es una memoria Flash cuyo tamaño varía desde 1MiB (1MiB = 1,04858 MB) hasta 8MiB, aunque en el mercado se pueden encontrar ESPs de hasta 16MiB de memoria Flash. Dicha memoria nos servirá para almacenar tanto el programa que escribamos como para almacenar de forma local cierta información como contraseñas de Wi-Fi o algunos datos que consideremos privados.
Sobre los periféricos, el ESP8266 consta de 16 pines GPIO (General Pins Input Output) que podremos utilizar para, como su nombre indica, propósito general. Posee además varios protocolos de comunicación como son UART, SPI, I2C, I2S y posibilidad de salidas PWM de 10 bits en todos sus pines GPIO.
Un resumen de sus características podría ser el siguiente:
- CPU RISC de 32-bit, con un reloj de 80 MHz (máximo de 160MHz)
- 32 KiB RAM instrucciones, 32 KiB RAM cache
- 80 KiB RAM para datos de usuario
- Memoria Flash externa entre 1 y 8 MB (máximo 16MiB)
- Wifi 802.11 b/g/n 2.4GHz (soporta WPA/WPA2)
- Certificado por FCC, CE, TELEC, WiFi Alliance y SRRC
- 16 pins GPIO
- PWM en todos los pines (10 bits), UART, SPI, I2C e I2S
- Conversor analógico digital de 10 bits (Hasta 1V)
- Voltaje de operación 3.0 a 3.6V
- Consumo medio 80mA
- Modo consumo stand-by (1mW) y deep sleep (1uA)
Versiones disponibles
Existen varios modelos de placas que incorporan este microcontrolador. Veremos las que hay disponibles actualmente, desde las más sencillas y compactas hasta las más completas.
ESP-01
La primera versión que salió al mercado fue la ESP-01, pensada para ser utilizada como interfaz Wi-Fi para las placas Arduino. Sin embargo, su gran aceptación en la comunidad maker hizo que pronto saliesen las siguientes versiones hasta llegar a la ESP-12, la más extendida.
ESP-12
Esta versión se ha convertido en el buque insignia de la marca. Permite crear proyectos más completos que sus versiones anteriores, a un precio bastante reducido. Se puede programar para utilizar su módulo Wi-Fi, para que entre en un modo de bajo consumo (sin Wi-Fi) y para que se quede “dormido” (modo Deep-Sleep) con un consumo de corriente mínimo.
Sin embargo, para conectarlo a una protoboard, incluirlo en tus proyectos o directamente programarlo, necesitarás herramientas adicionales. Los pines tienen una separación de 2.00mm frente a los 2.54mm estándar que encontramos en la mayoría de componentes y placas de prototipado. Existe una placa de adaptación a esta separación de pines que además cuenta con las tres resistencias mínimas que se necesitan para su uso: 3 resistencias de 10Kohm conectadas tal y como indica la siguiente imagen.
Para programar esta versión del ESP, se necesitará o bien crear el circuito necesario para su comunicación UART, además de un convertidor de USB a TTL; o bien directamente una placa preparada con un puerto microUSB a través del cual podrás conectar a tu PC y programar este microcontrolador.
Esta placa de programación cuenta también con pines macho estilo Dupont conectados directamente a cada pin del microcontrolador, de manera que podrás conectar periféricos u otros componentes al mismo tiempo que testeas el código que acabas de instalar.
WeMos D1 Mini
Esta versión del ESP8266 se basa en el modelo ESP-12 soldado sobre una placa con todo lo necesario para alimentar, programar y testear el código de tu WeMos.
Cuenta con un puerto microUSB por donde se podrá alimentar y cargar el programa, además de los chips integrados necesarios para la conversión a TTL, las resistencias mínimas necesarias y un pequeño botón de reset para cuando el código no sale como lo esperado y necesitas reiniciarlo.
Esta versión cuenta también con un acceso a casi todos los pines del microcontrolador con un paso de 2.54mm, ideal para utilizar en cualquier escenario de prototipado. Suele venir con tres pares de pines diferentes: macho, hembra y una mezcla de hembra por un lado y macho por la parte opuesta, de forma que para el mismo pin, puedas conectar dos periféricos.
Node MCU
Un poco más completo que la versión WeMos D1 Mini es la versión Node MCU. Al igual que su versión reducida, cuenta con un puerto microUSB para comuicación serie con un PC o para alimentación a través de un cargador o batería. Cuenta con un acceso a todos los pines del ESP-12, a diferencia del WeMos, en el que no se podía acceder a los pines de la parte opuesta a la antena.
Esta versión sería la más completa que existe a día de hoy utilizando el modelo ESP-12 como microcontrolador.
ESP32
El ESP32 es una versión mejorada del ESP8266 que incluye además de la conectividad Wi-Fi del modelo anterior, conectividad Bluetooth, un núcleo adicional y mayor número de pines GPIO. Además, para el ESP32 se ha mejorado la conectividad Wi-Fi permitiendo velocidades mayores que en su versión anterior.
Al igual que el ESP-12, esta versión por sí sola necesita de una circuitería externa para poder funcionar y para cargarle el programa.
Sus características más importante son:
- CPU Xtensa Dual-Core de 32 bits LX6
- Cuenta con Bluetooth 4.2 y Bluetooth Low Energy (Bajo consumo)
- Reloj de 160MHz (Máximo 240MHz)
- Integra 520 KB de SRAM
- Memoria Flash de 4MB
- Cuenta con un sensor de efecto Hall.
- Comunicaciones UART, SPI, I2C, I2S, PWM en sus pines GPIO y Radio
- Contiene un ADC de 12 bits de resolución
- Incorpora sensores de tacto e interfaz MAC Ethernet.
ESP32 DevKitC
Del mismo modo que el Node MCU, el ESP32 posee su versión más completa llamada ESP32 DevKitC.
Incorpora, además del microcontrolador, todos los componentes necesarios para su comunicación serie, alimentación y utilización en cualquier entorno de prototipado.
Programación
La programación de todos estos modelos anteriores puede hacerse a través del IDE de Arduino. Para descargar este entorno de programación, deberemos buscarlo en las apps de Microsoft Store para SO Windows o descargárnoslo directamente desde su web para Linux (https://docs.arduino.cc/software/ide-v1/tutorials/Linux).
Una vez descargado e instalado, abriremos el programa y añadiremos nuestra placa basada en ESP8266 o ESP32. Para ello haz click en Archivo > Preferencias. Se nos abrirá una ventana como la de la imagen inferior. Deberemos introducir la siguiente URL en el campo “Gestor de URLS Adicionales de Tarjetas”: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Clickamos en “Ok” y ahora abriremos el menú Herramientas > Placa: “Arduino/Genuino UNO” > Gestor de tarjetas…
Aquí, se nos abrirá una ventana en la que podemos buscar todas las placas con las que queramos trabajar. Para añadir placas ESP8266 basta con escribir “ESP” para que aparezca la tarjeta “esp8266 by ESP8266 Community”.
Una vez instalado todo, debemos elegir qué placa vamos a utilizar. Para ello hacemos de nuevo click en Herramientas > Placa: y escogemos la nuestra.
Deep sleep
Una de las ventajas del controlador ESP8266 es que se puede programar para que entre en un modo de muy bajo consumo denominado Deep Sleep. En este modo de reposo el controlador permanecerá sin realizar ninguna tarea, pero cuando pase el tiempo que se programó para que el dispositivo “duerma”, será como si se hubiese reiniciado y comenzará ejecutando su código grabado desde el inicio.
Para que el microcontrolador entre en este estado, es tan sencillo como escribir el comando ESP.deepSleep(time); donde time es el tiempo que permanecerá durmiendo, en microsegundos (1E-6 Segundos).
Para que el ESP salga de este estado, es necesario que el pin GPIO16 esté conectado al propio pin de Reset de la placa. Este pin 16 es el pin programado para mandar una señal de valor alto cuando transcurre el tiempo indicado con la función ESP.deepSleep(). Al estar conectado al pin de Reset, el microcontrolador se reiniciará y comenzará de nuevo a ejecutar el código cargado.
Es importante conocer que, si se quiere cargar un código nuevo al microcontrolador, deberemos deshacer esta conexión GPIO16-Reset ya que si no la IDE de Arduino no será capaz de encontrar nuestro microcontrolador.
Ejemplos
A continuación, veremos una serie de ejemplos sencillos para ver cómo funciona este microncontrolador.
Blink
Este ejemplo lo podemos encontrar en los propios ejemplos que incorpora la librería de tarjetas ESP8266.
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is active low on the ESP-01)
delay(1000); // Wait for a second
digitalWrite(LED_BUILTIN, HIGH); // Turn the LED off by making the voltage HIGH
delay(2000); // Wait for two seconds (to demonstrate the active low LED)
}
Lectura de sensor AHT20
Para tomar datos de este sensor, debemos añadir las librerías correspondientes. Para ello, haz click en Herramientas > A dministrar Librerías y en la barra de búsqueda escribiremos “AHT20”. Buscaremos la librería de Adafruit llamada “Adafruit AHTX0”.
Una vez instalada esta librería, el ejemplo más sencillo es el siguiente:
#include <Adafruit_AHTX0.h>
Adafruit_AHTX0 aht;
void setup() {
Serial.begin(115200);
Serial.println("Adafruit AHT10/AHT20 demo!");
if (! aht.begin()) {
Serial.println("Could not find AHT? Check wiring");
while (1) delay(10);
}
Serial.println("AHT10 or AHT20 found");
}
void loop() {
sensors_event_t humidity, temp;
aht.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
delay(500);
}
Deep Sleep
/*
Ejemplo de funcionamiento básico del modo ESP8266 deep sleep
*/
void setup() {
Serial.begin(115200);
// Esperara a que se inicie el monitor serie
while (!Serial) { }
/*
Aquí iría el código para obtener los valores de un sensor y
enviar la información alguna plataforma en la nube por ejemplo.
Lo que viene a continuación es una simulación.
*/
Serial.println(" ");
Serial.println("Temperatura: 25,5ºC");
delay(1000);
Serial.println("Conectando red WiFi...");
delay(1000);
Serial.println("Enviando información a ThingSpeak");
delay(1000);
Serial.println("Modo ESP8266 deep sleep durante 10 segundos");
ESP.deepSleep(20e6); // 10e6 es 10.000.000 microsegundos
Serial.println("Esto nunca se mostrará por el monitor serie");
}
void loop() {
}
¿Dónde comprarlo?
En base a la experiencia de compra que tenemos, nuestros dos principales proveedores son Tiendatec y Bricogeek. Podrás encontrar una gran variedad de microncotroladores basados en ESP8266 en sus respectivas páginas web o en estos enlaces:
Referencias
https://programarfacil.com/esp8266/esp32
https://vasanza.blogspot.com/2021/07/especificaciones-del-modulo-esp32.html
https://www.luisllamas.es/esp8266
https://es.wikipedia.org/wiki/ESP8266
https://programarfacil.com/podcast/esp8266-wifi-coste-arduino
https://programarfacil.com/podcast/como-configurar-esp01-wifi-esp8266
https://programarfacil.com/esp8266/esp8266-deep-sleep-nodemcu-wemos-d1-mini
No hay comentarios