Saltar a contenido

Consideraciones sobre ESP32

En este apartado vamos a realizar algunas consideraciones sobre los siguientes aspectos de las placas ESP32:

  • Pines
  • Entradas analógicas
  • Entradas y salidas digitales
  • Salidas PWM en ESP32

Pines en ESP32

En general los pines en ESP32 son de tipo GPIO (General Purpose Input/Output, Entrada/Salida de Propósito General).

Algunos pines GPIO pueden tener un comportamiento no esperado durante el arranque del sistema o en el reinicio del mismo. Esto se debe a que durante el arranque de la placa ESP32 se deben realizar procesos internos que ponen en alto ciertos pines o incluso hacen que emitan señales, y esto puede provocar esos efectos no deseados.

El pin GPIO1 del microcontrolador es el pin Tx del puerto UART de depuración y cuando la placa arranca, se reinicia o cuando nosotros hacemos uso del puerto serie, este pin emite datos. Por este motivo es un pin que no conviene usar como entrada o salida.

El GPIO3 tiene un problema similar al GPIO1 ya que se trata del pin Rx del micocontrolador.

Los pines GPIO34, GPIO35, GPIO36 y GPIO39 solamente pueden utilizarse como entradas porque no disponen de resistencia pull-up.

Entradas analógicas

Las señales analógicas son las que pueden tomar diferentes valores de tensión en un determinado periodo de tiempo, siendo su forma mas característica la senoidal. Cuando hablamos de entradas analógicas estamos hablando de pines del microcontrolador que pueden leer esas señales. En el caso de ESP32 todo son pines GPIO y por lo tanto se requiere de un conversor analógico a digital que sea capaz de transformar esas señales analógicas en digitales. El chip ESP32 que monta la placa ESP32 STEAMakers dispone de 2 convertidores Digital-Analógico (DAC) de 8 bits y 16 convertidores Analógico-Digital (ADC) de 12 bits. Estos conversores se asocian a los pines IO1 hasta IO20.

La resolución de los conversores ADC es de 12 bits (2^12 = 4096) por lo que la transformación de los valores digitales va a ser de mucha precisión. Pero cuidado con el uso de estas entradas, porque en realidad su comportamiento es que están leyendo valores digitales y no valores analógicos por lo que lo cambios de valores analógicos muy pequeños pueden no ser detectados.

Los canales ADC se dividen en dos puertos denominados ADC1 y ADC2. Las entradas analógicas del puerto ADC2 solamente las podemos usar como tales si el controlador WiFi no ha sido iniciado, ya que este puerto es el que utiliza el controlador del WiFi que integra la placa.

AVISO IMPORTANTE

Cuando vamos a trabajar con señales analógicas debemos tener muy presente que, aunque todos los pines IOxx son entradas y salidas digitales, algunas incluso con más funciones. Cuando tenemos que utilizar la comunicación WiFi el convertidor ADC2 NO funciona.

Entradas y salidas digitales

Una señal digital solamente puede tomar dos valores o estados lógicos, alto y bajo, High y Low, 0 y 1 siendo su representación característica una onda cuadrada. El estado bajo se asocia a cero voltios y el estado alto a 3.3V o 5V.

Las entradas permiten recibir señales con los valores digitales descritos, como por ejemplo leer el estado de un pulsador.

Debemos saber que ESP32 lleva unas resistencias de pull-up (1) o pull-down (0) que nos permiten establecer el estado que tiene la entrada cuando está en reposo. Estas resistencias están disponibles en todos los pines excepto el 34 y 39. Estas resistencias internas se pueden activar por código.

Las salidas digitales nos van a servir para realizar acciones sobre los elementos conectadas en ellas, como por ejemplo encender un LED o activar un relé.

En principio todos los pines que se pueden utilizar como salida en ESP32 pueden usarse con PWM excepto los pines que no disponen de resistencia de pull-up interna.

Compatibilidad y descripción de pines ESP32 STEAMakers

Importante: Todos los pines IOxx son entradas y salidas digitales, algunas con más funciones. Utilizando la comunicación WiFi no funciona el ADC2.

En las tablas siguientes tenemos relacionados todos los pines entre los tipos de placas UNO y ESP32 STEAMakers.

UNO Función ESP32 Ampliación UNO Función ESP32 Ampliación
D0 Rx IO03 UART 0 RX D1 Rx IO01 UART 0 TX
D2 ADC2 CH9 IO26 DAC2 D3 ADC2 CH8 IO25 DAC1
D4 IO17 UART 2 TX D5 IO16 UART 2 RX
D6 ADC2 CH7 IO27 TOUCH7 / HSPI CS D7 ADC2 CH6 IO14 TOUCH6 / HSPI SCK
D8 ADC2 CH5 IO12 TOUCH5 / HSPI MISO D9 ADC2 CH4 IO13 TOUCH4 / HSPI MOSI
D10 IO05 VSPI CSO D11 IO23 VSPI MOSI
D12 IO19 VSPI MISO D13 IO18 VSPI CLK
GND GND 5V +5V
SDA I2C IO21 SDA / VSPI HD SCL I2C IO22 SCL / VSPI WP
A0 ADC2 CH2 IO02 TOUCH 2 / HSPI WP / E/S de RTC 12 procesador ultra baja potencia A1 ADC2 CH0 IO04 TOUCH 0 / HSPI CD / E/S de RTC 10 procesador ultra baja potencia
A2 ADC1 CH7 IO35 E/S de RTC 5 procesador ultra baja potencia A3 ADC1 CH6 IO34 E/S de RTC 4 procesador ultra baja potencia
A4 SDA IO21 A5 SCL IO22

En la tabla siguiente tenemos relacionados el resto de los pines entre los tipos de placas UNO y ESP32 STEAMakers.

UNO Función ESP32 Ampliación UNO Función ESP32 Ampliación
VIN VIN GND GND
GND GND 5V +5V
3.3V +3.3V RST Reset
5V 5V ADC2 CH1 IO00 TOUCH 1 / E/S de RTC 11 procesador ultra baja potencia
D0 - uSD IO32 CLK - uSD IO15
CMD - uSD IO33 IOUT IO35 Medidor de corriente
VOUT IO37 Medidor de tensión

En la figura siguiente podemos ver y descargar un gráfico con el pinout de la ESP32 STEAMakers en formato original svg.

Comparativa de la placa ESP32 STEAMakers
Comparativa de la placa ESP32 STEAMakers

Verificación de la alimentación de la STEAMakers

La ESP32 STEAMakers, como cualquier otra placa basada en ESP32, debe tener unos valores de alimentación mínimos. Gracias a que la STEAMakers lleva incorporado un medidor de tensión e intensidad, podemos saber la tensión de alimentación en todo momento.

Si la tensión de alimentación cae por debajo de 4,8 V (aproximadamente), la placa no funcionará correctamente, sobre todo en la comunicación WiFi.

Es recomendable realizar una verificación de la tensión que está entregando el puerto USB del ordenador. Si la tensión no está cerca de 5 V deberemos cambiar el cable USB, alimentar el puerto USB de forma externa o alimentar la placa con una fuente de alimentación.

Podemos realizar un pequeño programa para verificar la alimentación de la placa como el que vemos en la imagen siguiente:

Valor de tensión en la placa
Valor de tensión en la placa

Debería ser un buen hábito colocar estos bloques al inicio de cualquier programa para asegurarnos de una buena alimentación, sobre todo si trabajamos directamente con la placa conectada al puerto USB del ordenador y empezamos a conectar elementos externos en la placa (pantallas, LED, servos, etc.).

También hay que tener en cuenta que, cuando utilicemos la comunicación mediante WiFi, deja de funcionar el ADC2, por lo que no podremos leer los valores de sensores conectados a los pines A0 y A1. En este caso, la alternativa es conectarlos a los pinos A2 y/o A3.