ESP32 Introduccion - pensactius/Tutoriales GitHub Wiki

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 o Bluetooth necesitamos añadir componentes externos.

Es por esto que necesitamos considerar otras placas alternativas a Arduino.

Conociendo el chip ESP32

La gama ESP32 es en realidad una serie de microcontroladores producidos por Espressif Systems en Shangai. Hay disponibles varios módulos basados en ESP32 de coste muy bajo.

En la figura podemos encontrar el pinout del chip ESP-WROOM-32. Este pinout se refiere al chip en "bruto" y es útil si vas a montarte una placa propia o como referencia general para cualquier placa basada en el chip ESP-WROOM-32.

ESP-WROOM-32 chip pinout

NOTA: No todos los pines están accesibles en todas las placas de desarrollo, pero la funcionalidad concreta de cada pin sí que es la misma en todas las placas.

El ESP32 es una actualización del chip ESP8266 (usado en placas como la Wemos D1 mini). El ESP32 introduce una serie de mejoras respecto al ESP8266. Ofrece tanto Bluetooth BLE (Bluetooth Low Energy) como WiFi (el 8266 sólo tiene WiFi). Es más rápido y de doble núcleo. Es capaz de operar en modo potencia-ultra-baja, lo que le permite consumir muy poca batería.

Otras características del módulo ESP32:

  • Hasta 18 ADC (entradas analógicas) con 12-bit de resolución
  • Dos DAC (Digital Analog Converter)
  • 10 sensores capacitativos (sensor de contacto)
  • Cuatro canales SPI
  • Dos interfaces I2C
  • Dos interfaces I2S (para audio digital)
  • Tres UARTs para comunicaciones serie
  • Hasta 8 canales IR de control remoto
  • Hasta 16 canales de LED PWM (pulse width modulation)
  • Sensor integrado efecto HAL (sensor de campo magnético)
  • Pre-amplificador analógico de potencia-ultra-baja

El ADC (conversor analógico-digital) y el DAC (conversor digital-analógico) están asignados a pines específicos del chip. Pero, si se desea, se puede cambiar qué pines están asociados a las funcionalidades de UART, I2C, SPI, PWM, etc – lo único que hay que hacer es asignarlas en el código del programa. Esto es posible gracias a una característica que tiene el chip ESP32 llamada multiplexación.

Aunque se pueden asignar las funcionalidades de los pines por software, hay pines asignados por defecto, como se muestra en la siguiente figura (esta es un ejemplo de la placa esp32 devkitC v4 con 38 pines - la nomenclatura exacta y su lugar puede variar dependiendo del vendedor y modelo de placa). ESP32-DEVKITC-V4

Módulos ESP32

Hay una gran variedad de módulos basados en el chip ESP32, de la misma forma que hay varios módulos Arduino basados en chip AVR (Arduino UNO, nano, etc.).

La mayoría de estas placas están basadas en el chip ESP32-WROOM.

Las placas ESP32 DEV KIT y ESP32 NODEMCU son bastante populares y disponibles en Amazon y Aliexpress.

Adafruit tiene la placa HUZZAH32.

Sparkfun tiene la placa ESP32-Thing.

Y luego está la placa ESP32-Cam que integra una pequeña cámara de vídeo y microSD junto con el chip ESP32. Esta placa requiere un adaptador FTDI para poder programarla ya que no dispone de USB integrado.

Es importante entender que aunque estas placas comparten características no todas tienen el mismo "pinout". En nuestros experimentos, me referiré a la función del pin (i.e. GPIO 4) en lugar del número de pin. Esto permitirá usar otras placas a las que uso yo.

Programando el ESP32

El ESP32 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 ESP32 Espressif provee del Espressif IoT Development Framework, o ESP-IDF.

Para principiantes, la mejor forma de comenzar es usando el IDE de Arduino. Aunque no es el mejor entorno para el ESP32, tiene la ventaja de ser una aplicación que conocemos muy bien y fácil de programar.

Usaremos el entorno Arduino para nuestros experimentos.

Comenzando con el IDE Arduino

Antes de poder usar el IDE de Arduino con una placa ESP32 necesitamos añadir las placas ESP32 al gestor de placas (Arduino IDE Board Manager).

Añadir ESP32 al Gestor de Placas de Arduino

Para instalar las placas ESP32 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 – https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  • 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 ESP32 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 “esp32”.
  • Deberías encontrar “esp32 by Espressif Systems”. Selecciona esta entrada y haz clic en el botón Instalar.
  • Esto instalará las placas ESP32 en el IDE de Arduino.

Ahora en el apartado de Placa: deberás ver las placas basadas en ESP32. Deberás seleccionar la correspondiente (o una equivalente). Nosotros trabajaremos con la placa ESP_WROOM-32D, así que seleccionaremos "ESP32 DEV Module".

Conexiones para los Experimentos

Para los próximos experimentos usaremos el siguiente conexionado (extraído de la página dronebotworkshop.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 ESP32.

Conexiones experimentos

La resistencia para proteger el LED será la típica de 220 o 330 ohms. El cuadradito de color naranja es un sensor de tacto. Cualquier objeto metálico conectado con un cable bastará. Aunque si quieres, por ahora, lo puedes ignorar. Por ahora, únicamente necesitaremos el LED, así que si quieres puedes ignorar las conexiones GPIO 0 y GPIO 4.

Hola Mundo - Parpadeo ESP32

Vamos a realizar el típico proyecto "Hola Mundo" para microcontroladores: un LED que parpadea. El clásico programa Blink para ESP32 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 en algunas placas ESP32 está conectada a un LED interno (como sucede con en placas Arduino con el pin 13). Aunque no siempre es el caso, en nuestra placa, por ejemplo no hay LED interno y hemos tenido que conectar un LED externo al GPIO 2 mediante su correspondiente resistencia. 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 ESP32 usar velocidades serie de 115200 baudios.

Subir el programa

Después de teclear el programa deberás compilarlo y subirlo a la placa ESP32. Con las placas basadas en Arduino es tan simple como pulsar el botón Subir y ambos se ejecutan automáticamente. Con placas basadas en ESP, no obstante, es posible que requieran de un paso adicional.

Comienzas igual, dándole al botón de Subir y comienza la compilación. Observarás que tarda algo más en compilar programas para ESP32 que para Arduino. 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 (a veces pone IO0) y mantenlo apretado hasta que aparezca el progreso de subida.

BOOT, EN

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.

Bibliografía

DroneBot Workshop. Getting started with ESP32

Espressif. ESP32-DevKitC V4 Getting Started Guide

Random Nerd Tutorials. ESP32 Pinout Reference: Which GPIO pins should you use?