Trastejant

Crea, comparte, aprende y disfruta

Blog: ESP32: ¿Qué pines usar?
ESP32 Pinout

Pinout Reference

El ESP32 es, sin duda, uno de los micocontroladores más interesantes que existen hoy en día. Su potencia, velocidad, capacidad de almacenamiento y sobre todo conectividad (recordemos que tiene WiFi y Bluetooth integrado e forma nativa) hace de este chip un gran aliado a tener en cuentra en nuestros proyectos, sobre todo si tenemos en cuenta que se puede conseguir por un precio irrisorio.

El problema es que, cómo decía el tio de Peter, un gran poder lleva consigo una gran responsabilidad. O en este caso, una gran potencia implica también que vamos a tener que documentarnos y leer mucho para poder sacarle todo el partido al ESP32. En concreto nos puede ocurrir que dependiendo de los pines que usemos para una u otra tarea tengamos distintos resultados. Por eso nos ha parecido muy interesante este articulo de randomnerdtutorials.com en el que nos habla de qué pines usar, y para echar una mano nos hacemos eco y lo traducimos para todos vosotros.

ESP32 Pinout

Antes de hablar de los pines que debemos usar no esta mal repasar que pines tiene el ESP32 en general.

ESP32 Pinout

No todas las placas de desarrollo que podemos encontrar sacan todos los pines para que lo usemos, pero cómo siempre tenemos la opción de comprar el chip e implementarlo en nuestro propio desarrollo vamos a repasar todo lo que trae cuando está «suelto».

  • 18 Pines con entrada analógicos (ADC)
  • 3 Interfaces SPI
  • 3 interfaces UART
  • 2 Interfaces I2C
  • 16 pines capaces de hacer PWM
  • 2 Pines salida analogica (DAC)
  • 2 Interfaces I2S

Los pines analógicos, tanto de entrada cómo de salida son estáticos. Es decir, no podemos decidir nosotros cuales queremos usar para esto. Esto se debe a que para conseguir que sean analógicos tienen un componente intermedio entre los pines y el micro, en el caso de las entradas se trata de un ADC (analog to digital converter, convertidor de analógico a digital) y en el caso de salidas este componente es un DAV (digital to analog converter, convertidor de digital a analógico.) Estos componentes están físicamente conectados a estos pines y, por lo tanto, no podemos modificarlo.

Un pin para cada cosa y cada cosa en su pin

Ahora que hemos repasado todas las posibilidades que nos permite el ESP32 vamos a hablar del tema principal de este post: Que pines debo usar para cada función. Antes de continuar aclarar que, a diferencia de lo que ocurre con Arduino, nosotros podemos decidir por software que pines establecen comunicación UAR, I2C… pero los que os indicamos aquí son los que mejor resultado y menos quebradores de cabeza os van a dar.

Pines de entrada

Los GPIO del 43 al 39 solo deberían usarse como entradas digitales. No tienen resistencias de pull-up ni de pull-down. Y no deben usarse tampoco como salidas.

  • GPIO34
  • GPIO35
  • GPIO36
  • GPIO37
  • GPIO38
  • GPIO39

SPI

Muchas placas de desarrollo sacan los GPIOs del 6 al 11 para que sean usados, el problema es que estos están conectados a la SPI que usa el ESP32 con su Flash, por lo que podemos tener resultados inesperados o directamente negativos. Por lo tanto, si podemos evitarlo, es mejor no usar estos pines:

  • GPIO 6 (SCK/CLK)
  • GPIO 7 (SDO/SD0)
  • GPIO 8 (SDI/SD1)
  • GPIO 9 (SHD/SD2)
  • GPIO 10 (SWP/SD3)
  • GPIO 11 (CSC/CMD)

Pines capacitivos

No todo el mundo sabe que el ESP32 cuenta con 10 pines capacitivos. Estos pines, al igual que algunas pantallas táctiles, son capaces de detectar las variaciones eléctricas que produce, por ejemplo, la piel humana cuando toca algo. De esta forma podemos usar estos pines para sustituir los botones mecánicos por una superficie que, al ser tocada, actúe cómo botón. Seguro que habéis visto este tipo de interruptores en muchos espacios públicos donde ya no es necesario accionar mecánicamente el interruptor para dar la luz, basta con acercar la mano a una pequeña placa gris para que se encienda. Si queremos hacer algo similar podemos usar los siguientes pines:

  • T0 (GPIO 4)
  • T1 (GPIO 0)
  • T2 (GPIO 2)
  • T3 (GPIO 15)
  • T4 (GPIO 13)
  • T5 (GPIO 12)
  • T6 (GPIO 14)
  • T7 (GPIO 27)
  • T8 (GPIO 33)
  • T9 (GPIO 32)

Estos pines pueden ser usados también para despertar al ESP32 de su modo de sueño profundo.

Entradas analógicas

Cómo ya hemos comentado el ESP32 integra un conversor de analógico a digital, lo que nos permite tomar lecturas analógicas. Concretamente tenemos a nuestra disposición 18 pines con capacidad para tomar este tipo de lecturas. Todas ellas con una resolución de 12bits (por lo tanto tendremos una precisión mejor que la que trae Arduino, o incluso el ESP8266).

Cómo ya comentamos estos pines son fijos y son los siguientes:

  • ADC1_CH0 (GPIO 36)
  • ADC1_CH1 (GPIO 37)
  • ADC1_CH2 (GPIO 38)
  • ADC1_CH3 (GPIO 39)
  • ADC1_CH4 (GPIO 32)
  • ADC1_CH5 (GPIO 33)
  • ADC1_CH6 (GPIO 34)
  • ADC1_CH7 (GPIO 35)
  • ADC2_CH0 (GPIO 4)
  • ADC2_CH1 (GPIO 0)
  • ADC2_CH2 (GPIO 2)
  • ADC2_CH3 (GPIO 15)
  • ADC2_CH4 (GPIO 13)
  • ADC2_CH5 (GPIO 12)
  • ADC2_CH6 (GPIO 14)
  • ADC2_CH7 (GPIO 27)
  • ADC2_CH8 (GPIO 25)
  • ADC2_CH9 (GPIO 26)

Recordar que el ESP32 funciona a 3.3V, no a 5V. Por lo tanto con los 12 bits de resolución tendremos valores desde el 0 hasta el 4095, siendo 0 un valor -cercano- a 0V y 4095 un valor -cercano- a 3.3V. Si necesitan leer tensiones mayores tendrás que usar un divisor o un conversor de tensión para asegurarte de no superar nunca este umbral.

Salidas analógicas

Continuando en el mundo de la analógica recordemos que en este caso contamos con un conversor de digital a analógico, esto nos va a permitir tener salidas analógicas, algo que no es muy común en microcontrolares de bajo coste y que nos permitirá, por ejemplo, experimentar con el sonido.

Estos pines son:

  • DAC1 (GPIO25)
  • DAC2 (GPIO26)

RTC

Uno de los aspectos que más se ha cuidado en el ESP32 es su modo de bajo consumo que consigue gastos realmente ridículos cuando se pone en modo de sueño profundo. Como parte de este sistema se han integrado pines que soportan RTC (real time clock, reloj de tiempo real) para las tareas de despertar el micro. Este RTC también está conectado a algunos pines y podemos usarlos para producir una señal en ellos cuando pase un determinado intervalo de tiempo.

Estos pines son:

  • RTC_GPIO0 (GPIO36)
  • RTC_GPIO3 (GPIO39)
  • RTC_GPIO4 (GPIO34)
  • RTC_GPIO5 (GPIO35)
  • RTC_GPIO6 (GPIO25)
  • RTC_GPIO7 (GPIO26)
  • RTC_GPIO8 (GPIO33)
  • RTC_GPIO9 (GPIO32)
  • RTC_GPIO10 (GPIO4)
  • RTC_GPIO11 (GPIO0)
  • RTC_GPIO12 (GPIO2)
  • RTC_GPIO13 (GPIO15)
  • RTC_GPIO14 (GPIO13)
  • RTC_GPIO15 (GPIO12)
  • RTC_GPIO16 (GPIO14)
  • RTC_GPIO17 (GPIO27)

PWM

Creo que cuando empezamos en el mundo de la electrónica todos nos quedamos enamorados de las posibilidades que ofrece el PWM. Luego, vamos creciendo estás lindes, aprendemos otras tecnológicas, otros modos de hacer las cosas… y nuestro amor crece aún más. Y es que la posibilidad de crear pulsos de el ancho que queramos abre un universo de posibilidades. A mi en muchas ocasiones me ha pasado que los primeros pines sin los que me quedaba era precisamente estos y en muchas ocasiones he tenido que recurrir a procesadores secundarios o placas hechas específicamente para este fin, que me ampliasen el número de señales PWM que podía hacer (vease el caso de Andy… )

En este caso el ESP32 puede hacer PWM con todos sus salidas a excepción de los que los pines que van del 34 al 39.

Podemos configurar desde el código la frecuencia, el ciclo, el canal de PWM y el pin que queremos usar.

I2C

Quizá en otra ocasión hagamos un tutorial sobre el protocolo I2C, que es mi protocolo de comunicación favorito (si, hasta en esto se pueden tener favoritos)

Por software podemos definir cualquier pin para ser usado como con I2C, pero los que vienen para tal fin por defecto, son compatibles con la librería Wire de Arduino y por lo tanto os van a calentar menos la cabeza son:

  • GPIO 21 (SDA)
  • GPIO 22 (SCL)

SPI

Con SPI pasa algo similar a lo que acabamos de ver con I2C, podemos configurar por software los pines que queremos usar para el SPI, pero por defecto vienen mapeados de la siguiente forma:

SPIMOSIMISOCLKCS
VSPIGPIO23GPIO19GPIO18GPIO5
VSPIGPIO13GPIO12GPIO14GPIO15

Pines de interrupción

Maravillosa noticia ¡todos los pines del ESP32 pueden ser usados cómo pines de interrupción!

Pines que es mejor dejar tranquilos…

Algunos pines son usados por el ESP32 para entrar en modo de programación o de bootloader. Muchas placas de desarrollo no se molestan en sacar estos pines, otras si lo hacen y si estás integrando el chip en tu diseño es una opción que tienes a tu disposición y que recomendamos encarecidamente no hacer. Estamos hablando de los pines:

  • GPIO 0
  • GPIO 2
  • GPIO 4
  • GPIO 5
  • GPIO 12
  • GPIO 15

La mayor parte del tiempo estos pines se comportan cómo pines normales, pero en el arranque o la programación pasan a ser gestionados directamente por el ESP que los coloca en el estado que necesita para llevar a cabo sus tareas. Si decides usarlos lo más probable es que tengas problemas, incluso podrías no ser capaz de programar el ESP32 mientras tengas algo conectado a ellos. Por eso te recomendamos dejar estos pines tranquilos.

Pin de ENABLE

El pin de ENABLE (EN) está conectado al pin de enable del regulador de tension. Por defecto tiene una pull-up que lo mantiene en alto, si nosotros tiramos este pin abajo (conectandolo a tierra) desactivamos el regulador de 3.3V y por lo tanto el micro deja de estar alimentado y se desconecta.

Esto puede ser interesante para producir un reset, por ejemplo, solo tenemos que conectar este pin a tierra mediante un pulsador. Cuando no pulsemos la pull-up que incorpora lo mantendrá en alto y, por lo tanto, activo. Cuando accionemos el pulsador este pin estará en bajo, la corriente dejará de llegar al ESP32 y habremos producido un reseteo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.