Pinout y detalles del hardware de ESP8266 y ESP12E


Vamos a seguir profundizando en el SoC ESP8266 del fabricante Espressif. En esta entrada vamos a ver el esquema de patillaje (Pinout) del ESP8266 y del ESP12E y profundizaremos en algunos detalles del hardware, y sus diferencias con el hardware de Arduino.

Una de las primeras dificultades al usar placas de desarrollo basadas en el ESP8266 es conseguir su esquema de patillaje. Más aún porque los fabricantes no mantienen un mismo criterio al asignar los pines de su placa con los del ESP8266. Esto nos puede llevar a más de un quebradero de cabeza.

Por eso es importante dedicar un rato a entender los pines y hardware del ESP8266. Porque, aunque las denominaciones cambien en las placas de desarrollo siempre tendrán en común las características del ESP826, de forma que solo con conocer la equivalencia entre los pines sabremos usar cualquier placa de desarrollo.

Por otro lado, el ESP12E es el módulo con SoC ESP8266 más empleado en placas de desarrollo. Entender su Pinout está muy relacionado con entender el ESP8266, prescindiendo de pines que no nos aportan demasiado (internos).

Anuncio:

Por último, entender el pinout y el hardware del ESP8266 y el ESP12E nos permitirán usarlos de forma independiente, sin una placa de desarrollo. Aunque tendremos que incluir nuestra propia electrónica (resistencias, divisores, reguladores de tensión.

Así que vamos a empezar a profundizar en el hardware del ESP8266 y del módulo ESP12E, viendo su esquema de patillaje y, a continuación, veremos alguno de los detalles de su hardware.

Pinout del ESP8266

Aquí tenemos el esquema de patillaje del ESP8266.

El ESP8266 tiene 32 pines disponibles, de los cuales 17 son GPIO, 1 es un ADC, y el resto esencialmente están relacionados con la alimentación y control del ESP8266.

Pinout del ESP12E

Por su parte, aquí tenemos el esquema de patillaje del ESP12E.

Como vemos, el ESP12E tiene 22 pines. Mantiene los 17 pines GPIO, el pin ADC, pero reduce los pines de alimentación a 2 (Vcc y GND) y los de control a CHIP_EN (encender apagar el ESP12E) y EXT_RSTB (para hacer reset).

Es decir, en el ESP12E tenemos disponibles la mayoría de pines “importantes” del SoC, mientras que el módulo se encarga de conectar eléctricamente la mayoría de pines de alimentación y control. Este es uno de los motivos del éxito y alta implementación del ESP12E, ya que nos ofrece todas las funciones del ESP8266. Otros módulos, por ejemplo como el ESP01 o incluso el ESP12S, que prescinden de algunos GPIO para tener un número menor de pines o menor tamaño.

Detalles del hardware del ESP8266

Vamos a comentar algunos de los detalles del hardware del ESP8266 y del ESP12E (hemos visto que son esencialmente equivalentes), y sus diferencias respecto a una placa Arduino.

Lo primero a destacar es que el ESP8266 carece de muchas funciones por hardware que incluyen los procesadores Atmel. Unidos a la gestión del Wifi, el SoC tiene que dividir sus recursos entre todas estas funciones. Aunque es más rápido que un Arduino, es una sobrecarga de trabajo, lo cuál en algunas aplicaciones puede suponer un problema.

Lo siguiente a destacar es que, como vimos en la entrada de presentación, el ESP8266 carece de memoria Flash interna. La memoria donde almacenamos el programa se incluye en el módulo, pero fuera del SoC, y se comunican entre si por SPI. Eso significa que hay módulos con distinta cantidad de memoria, y que no podremos usar los pines GPIO que comunican con la memoria (lo veremos a continuación).

Alimentación

La alimentación del ESP8266 es a 3.3V, alimentar un voltaje superior a 3.6V destruirá el SoC. Aunque muchas placas de desarrollo incluyen reguladores de voltaje para poder alimentar la placa a 5V, o desde el USB.

Respecto a si el resto de pines del ESP8266 son tolerantes a 5V, ha habido mucho debate. Según el Datasheet (que cambiaba según versiones) no quedaba muy claro, pero se entendía que no lo eran. Sin embargo, en la actualidad, declaraciones de Espressif y experimentos de usuarios nos permiten decir que los pines GPIO del ESP8266 sí son tolerantes a 5V cuando funcionan como entrada digital..

La corriente máxima que pueden proporcionar o absorber los pines digitales es de 12mA. En comparación, la mayoría de modelos de Arduino pueden suministrar 20-40mA.

Respecto al conversor analógico digital (ADC) la tensión máxima que pueden registrar es de 0-1V. Suministrar más de 1V al ADC lo dañará. No obstante, algunas placas tienen de desarrollo incluyen divisores para ampliar el rango de 0-3.3V. Tendréis que comprobar en cada placa el rango de medición del ADC.

El pin CHIP_EN controla el encendido o apagado del SoC, estando encendido cuando está en HIGH. El pin EXT_RSTB controla el Reset del ESP8266, activándose cuando está en LOW.

Arranque (boot)

El ESP8266 tiene 3 modos de arranque:

  • UART Bootloader, para subir un programa por UART a la memoria flash.
  • Boot Sketch, ejecuta el último programa subido en la memoria flash.
  • SDIO, que no se usa con al programar con Arduino.

Para arrancar en un modo u otro se deben configurar adecuadamente los pines GPIO15, GPIO0 y GPIO2 según la siguiente tabla:

ModoGPIO15GPIO0GPIO2
Uart Bootloader0V0V3.3V
Boot normal0V3.3V3.3V
SDIO3.3Vxx

En la mayoría de las placas de desarrollo habrá sistemas que gestionarán el estado de estos pines por nosotros. No obstante, tanto si queremos usar el ESP8266 (o el ESP12E) de forma independiente, como en el caso de una placa de desarrollo, debemos tener en cuenta lo siguiente:

  • El GPIO15 está siempre pulled down, así que no podemos usar su resistencia Pull-Up.
  • El GPIO0 está puesto a HIGH durante el funcionamiento.
  • EL GPIO2 no puede estar puesto a LOW durante el arranque.

Entradas y salidas digitales (GPIO)

El ESP8266 tiene 17 pines I/O (GPIO, General Purpose Input/Output pins). Estos pueden actuar de salida proporcionando tensión de 0V o 3.3V (LOW y HIGH). Actuando como entrada pueden reconocer una tensión de 0V o 3.3V suministrada al GPIO.

Cuando actúan como salida la corriente máxima que puede proporcionar (o absorber) cada GPIO es de 12mA.

Como entrada, como hemos dicho anteriormente en la actualidad podemos decir que son tolerantes a 5V (aunque no me responsabilizo de que reventéis vuestra placa), por lo que emplear una entrada para medir un voltaje de hasta 5.8V no debería dañarla.

De los 17 GPIO (0 a 16) no podemos usarlos todos. De hecho podemos usar bastante pocos, lo cuál es otra limitación importante respecto a Arduino.

  • 6 GPIO (GPIO6 a GPIO11) son usados para conectar por SPI con la memoria flash, por lo que no podemos usarlos.
  • Los GPIO0, GPIO2 y GIPO15 intervienen en el arranque, con las consideraciones que hemos visto en el apartado anterior.
  • Los GPIO1 y GPIO3 son usados para comunicación Serial (UART)

En cuanto a resistencias internas de Pull, igual que Arduino los pines GPIO0 a GPIO15 tienen resistencias de Pull-Up. Mientras que el GPIO16 tiene una resistencia de Pull-Down.

PWM (salidas analógicas)

A diferencia de Arduino el ESP8266 no tiene PWM por hardware, en su lugar tiene que emularlo por software. Esto tiene la ventaja de que podemos usar PWM en todos los GPIO, pero también que supone una carga de cálculo para el ESP8266. La frecuencia por defecto es de 1kH, pero puede ser cambiada.

Entradas analógicas (ADC)

El ESP8266 tiene un ADC de 10bits de resolución. El ADC tiene su propio pin, independiente de los GPIO. El rango de entrada del ADC es de 0-1V, intentar medir una tensión superior a 1V dañará el ADC. No obstante, ya hemos visto que muchas placas tienen divisores que amplían el rango para poder medir de 0-3.3V.

Comunicación

Serial (UART)

El ESP8266 tiene 2 UARTs por hardware:

  • UART0 en pines 1 y 3 (TX0 y RX0).
  • UART1 en pines 2 y 8 (TX1 y RX1).

Sin embargo, el pin 8 es empleado para conectar con la memoria flash por lo que, en la práctica, el puerto UART1 sólo puede emplear el pin TX1 (sólo puede enviar, no recibir). Por otro lado, el UART0 también tiene acceso desde los pines 15 y 13 (RTS0 y CTS0).

I2C

El ESP8266 no tiene hardware para I2C por lo cual tiene que emularlo por software. Eso significa que podemos emplear I2C con casi cualquier pin GPIO, pero nuevamente supone una carga para el procesador. Por defecto, la librería usa el GPIO4 y GPIO5 (SDA y SCL). La velocidad máxima es de 450kHz.

SPI

El ESP8266 tiene un 2 SPI por hardware, pero uno es utilizado para conectar con la memoria flash. Por tanto, queda el ESP8266 tiene 1 SPI disponible (HSPI) que puede actuar tanto como Master como Slave. Los pines usados son el GPIO14 (CLK), GPIO12 (MISO), GPIO13 (MOSI) y GPIO15 (SS).

Resumen de los pines

Aquí tenemos un resumen en una tabla para su consulta:

GPIOFunciónEstadoCondiciones
0Boot3.3VNo entrada
1TX0No usable con UART
2Boot y TX13.3V (solo en boot)No a GND al arrancar
3RX0No usable con UART
4SDA (I²C)
5SCL (I²C)
6 – 11Memoria FlashxNo usables
12MISO (SPI)
13MOSI (SPI)
14SCK (SPI)
15SS (SPI)0VNo Pull-Up
16Wake up desde sleepResistencia Pull-Down
Conectar a RST para Wake-Up

En las próximas entradas iremos viendo distintas placas de placas de desarrollo que integran el ESP8266 y empezaremos su programación.

Anuncio:

Previous Funciones avanzadas del CLI Bash en Raspberry Pi / Linux
Next Librería de Arduino PropertyChange

¡Deja un comentario!...

1000
newest oldest

Excelente serie de tutoriales!