Icono del sitio Programar fácil con Arduino

ESP32 Wifi y Bluetooth en un solo chip

ESP32 es una familia de microcontroladores de la empresa Espressif Systems. Su analogía más clara es la de un ESP8266 con esteroides, que incluye Wifi, Bluetooth y otras potentes características extra.

Si eres nuevo en el tema, la cantidad de fabricantes que trabajan sobre esta plataforma y la información dispersa puede ser abrumadora. Por ello, en este artículo, podrás conocer todas sus cualidades y elegir la placa de desarrollo que más te convenga.

También entenderás como diferenciar entre las diferentes presentaciones del ESP32, como pueden ser:

ESP32 es muy superior, en capacidades, a un Arduino UNO y a un ESP8266, pero eso no quiere decir que sea ideal para cualquier proyecto, ya que para sacarle todo el jugo a este microcontrolador es necesario un proyecto más complejo del que estamos acostumbrado.

En su diagrama de bloques se puede apreciar un microprocesador de 32-bits (dual core o single core), comunicación inalámbrica Wifi y Bluetooth.

También incluye seguridad criptográfica por hardware, un coprocesador para el modo bajo consumo e interfases periféricas como: I2C, SPI, CAN, PWM, entre otros.

Por ejemplo, con un dispositivo ESP32 en su versión de dos núcleos se podría realizar un proyecto que intercambie información a la nube y en simultáneo administre datos de un sensor de forma precisa.

Todo esto es lo que vamos a ver en este tutorial.

¿Qué es el ESP32?

ESP32 es una serie de SoC (por sus siglas en inglés, System on Chip) y módulos de bajo costo y bajo consumo de energía creado por Espressif Systems.

Esta nueva familia es la sucesora del conocido ESP8266 y su característica más notable es que, además de Wi-Fi, también soporta Bluetooth.

No te estreses con los siguientes nombres, más adelante se analizan cada una de estas variantes en detalle.

La familia incluye los chips:

En esencia, estos se basan en un microprocesador Tensilica Xtensa LX6 (de uno o dos nucleos) con una frecuencia de operación de hasta 240 MHz.

Los ESP32 poseen un alto nivel de integración. En su pequeño encapsulado se incluyen:

Además de todo eso, logra un consumo de energía muy bajo a través de funciones de ahorro de energía que incluyen sincronización de reloj y múltiples modos de operación. Todo esto lo convierte en la herramienta ideal para tus proyectos energizados con baterías o aplicaciones IoT.

ESP32 vs ESP8266

Como te he comentado el ESP32 es el sucesor del ESP8266. En otras palabras, lo puedes ver como un ESP8266 con esteroides, ya que cuenta con:

Además, el ESP32 viene con pines sensibles al tacto que se pueden usar para “despertar” al ESP32 del modo deep sleep (sueño profundo) y un sensor de efecto Hall incorporado.

Las versiones antiguas del ESP32 incluyen un sensor de temperatura, aunque las versiones recientes ya no lo traen.

Aunque ambas familias son extremadamente baratas, el ESP32 es un poco más costoso. Esto no es de extrañar teniendo en cuenta las ventajas que posee sobre su predecesor. 

En la tabla siguiente tienes un resumen de las principales diferencias técnicas entre el ESP8266 y el ESP32.

CaracterísticasESP8266ESP32
MicroprocesadorXtensa Single-core 32-bit L106Xtensa Dual-Core 32-bit LX6 con 600 DMIPS
Wi-Fi (802.11 b / g / n)HT20HT40
BluetoothNo poseeBluetooth 4.2 y BLE
Frecuencia de operación (valor típico)80 MHz160 MHz
SRAMNo posee448 KB
FlashNo posee520 KB
GPIO1734
PWM (hardware)No poseeNo posee
PWM (software)8 canales16 canales
SPI24
I2C12
I2S22
UART22
ADC10-bits de resolución12-bits de resolución
CANNo
Interfaz MAC Ethernet No
Sensor de tactoNo
Sensor de temperaturaNo Sí (solo las versiones antiguas)
Sensor de efecto hallNo
Temperatura de trabajo-40ºC to 125ºC-40ºC to 125ºC

Características y especificaciones del ESP32

Aunque en la tabla anterior puedes notar algunas características claves del ESP32, la verdad, no está todo lo que necesitas saber. De hecho faltan muchos detalles. 

Para conocer a fondo todas las prestaciones de este magnífico SoC es necesario indagar en su hoja de datos técnicos (datasheet) y en el manual de referencias técnico (technical reference manual), ambos ofrecidos por Expressif.

En la siguiente imagen, tomada de la hoja de datos, se muestran todos los bloques funcionales que conforman un SoC ESP32

Lo explicaré sección por sección, ya que, está lejos de ser un sistema simple.

Conectividad inalámbrica

El chip cuenta con conectividad WiFi, siendo compatible con 802.11 b/g/n en la banda de los 2.4GHz, alcanzando velocidades de hasta 150 Mbits/s. También incluye comunicación Bluetooth compatible con Bluetooth v4.2 y Bluetooth Low Energy (BLE).

El bloque de radio está estrechamente ligado a los módulos de comunicación inalámbricos. De hecho, este es el que realmente transmite y recibe la información.

Es decir, toma los datos digitales provenientes de los módulos Wifi y Bluetooth; y los convierte en señales electromagnéticas que viajan por el aire para comunicarse con tu teléfono móvil o tu router.

Ojo, que también realiza la operación inversa: traducir las ondas electromagnéticas generadas por otros dispositivos en datos digitales que los módulos Wifi y Bluetooth son capaces de interpretar.

Núcleo

Ya te he comentado que el ESP32 cuenta con dos microprocesadores de bajo consumo Tensilica Xtensa de 32 bits LX6.

Pero además, cuenta con un co-procesador de ultra bajo consumo que es utilizado para realizar conversiones analógico-digital y otras operaciones mientras el dispositivo se encuentra funcionando en el modo de bajo consumo deep sleep. De esta forma, se consigue un consumo muy bajo por parte del SoC.

Es importante destacar que estos procesadores ofrecen grandes ventajas típicas de un procesador digital de señales:

Aunque estas características son transparentes cuando se está programando tienen gran repercusión en la eficiencia y tamaño del código que se graba al microcontrolador.

Memorias

En la mayoría de los microcontroladores en que se basan las placas Arduino hay tres tipos de memorias:

En los ESP32 no ocurre así, de hecho en ellos se encuentran más tipos de memorias que se suelen clasificar en internas y externas

Las memorias internas son aquellas que se encuentran ya incluidas en el SoC, y las externas son aquellas que se pueden adicionar para expandir la capacidad del sistema.

Muchas placas de desarrollo basadas en ESP32 añaden memorias externas para lograr un sistema con mejores prestaciones.

En las memorias internas se encuentran:

Para los ESP32 que no poseen memoria empotrada o simplemente cuando la memoria es insuficiente para tu aplicación, es posible adicionar más memoria de forma externa:

Periféricos

El ESP32 cuenta con un gran conjunto de periféricos. Aunque son similares a los que poseen otros microcontroladores presentan sus diferencias.

Pines digitales

El ESP32 cuenta con un total de 34 pines digitales. Estos pines, al igual que en cualquier placa Arduino, permiten agregar LEDs, botones, zumbadores, y un largo etc. a nuestros proyectos.

La mayoría de estos pines admiten el uso de pull-up , pull-down internos y también el estado de alta impedancia. Esto los hace ideales para conectar botones y teclados matriciales, así como para aplicar técnicas de control de LEDs como la conocida Charlieplexin.

Conversor analógico digital

Algunos de los pines también pueden ser utilizados para interactuar con sensores analógicos, es decir, como si fueran los pines analógicos de una placa Arduino.

Para esto el ESP32 cuenta con un conversor analógico digital de 12-bits y 18 canales, es decir, que puedes tomar lecturas de hasta 18 sensores analógicos

Esto te permite desarrollar aplicaciones conectadas muy compactas, incluso cuando se empleen varios sensores analógicos.

Conversor digital analógico

En la mayoría de las placas Arduino se utilizan señales PWM para generar voltajes analógicos. El ESP32 cuenta con dos conversores digital analógico.

Esto permite generar dos señales de voltaje analógicas puras. Dichos conversores, pueden ser utilizados para:

Sensor táctil

En caso de que quieras desarrollar aplicaciones con una interfaz libre de botones mecánicos. Puedes utilizar los pines sensibles al tacto presentes en los ESP32.

Estos pines son capaces de detectar las pequeñas variaciones producidas al acercar un dedo al pin. De esta forma, es posible crear todo tipo de controles como botones o barras de deslizamiento sin necesidad de utilizar componentes mecánicos.

Controlador SD/SDIO/MMC

Este periférico permite al ESP32 interactuar con tarjetas SD y MMC directamente. De hecho, combinando este controlador con el conversor digital analógico es posible mejorar nuestro pequeño reproductor de audio.

UART

Muchos microcontroladores cuentan con módulos UART, que en Arduino son conocidos como puertos Serial. Estos permiten establecer comunicaciones asíncronas entre dos dispositivos utilizando solamente dos pines.

El ESP32 cuenta con tres puertos UART:

Todos estos son compatibles con los protocolos RS-232, RS-485 e IrDA.

Pines I2C ESP32

Los ESP32 cuentan con dos interfaces I2C o TWI que admiten los modos de operación maestro y esclavo. Entre sus características destacan:

Pin ESP32Pin I2C
GPIO21SDA
GPIO22SCL
Pines I2C ESP32

Controlador remoto infrarrojo

El ESP32 también permite la transmisión y recepción de señales utilizando varios protocolos infrarrojos (iguales a los que utiliza el mando de la televisión).

Por lo tanto, también puedes utilizar tu ESP32 para crear tu propio control remoto que te permita interactuar con tu TV o tu equipo de música.

PWM

Al igual que el ESP8266, el ESP32 también soporta el uso de salidas analógicas utilizando PWM. La gran diferencia es que en un ESP32 es posible utilizar hasta 16 pines como salidas PWM, una gran diferencia ante un ESP8266 que solo admite 8 o una placa Arduino UNO que solo soporta 6.

SPI

El ESP32 también cuenta con comunicación SPI. Cuenta con tres buses totalmente funcionales:

Aceleradores de hardware para criptografía 

Uno de los factores más importantes en cualquier sistema es la seguridad. Es por eso, que el ESP32 cuenta con aceleradores de algoritmos orientados a la encriptación:

Estos aceleradores permiten incrementar la velocidad de operación y reducir la complejidad del software permitiendo encriptado y des-encriptado dinámico. De esta forma, se protege al sistema de posibles ataques de hackeo que pretendan obtener el código almacenado.

¿Con qué formato y funcionalidad puedes encontrar al chip ESP32?

Al igual que ocurre con la familia ESP8266, encuentras una gran variedad de modelos de ESP32 en el mercado. De modo general, lo puedes encontrar en cuatro formatos:

Un Soc reúne todos los componentes de un ordenador en un chip. Mientras, que un SIP se compone de varios circuitos integrados en el mismo paquete. Por ejemplo, ST53G es un SIP que combina un microcontrolador y un amplificador RF.

Si bien es cierto que lo normal es comprar una placa de desarrollo y no un chip o módulo aislado, es necesario conocer los chips y sus características. Esto se debe a que las prestaciones de las placas de desarrollo dependen, en gran medida, del chip que utilizan.

Chips y módulos con empaquetados QFN

Todos los SoCs y SiPs ESP32 utilizan el empaquetado QFN. Este es un encapsulado de circuito integrado para montaje superficial en el que los conectores se ubican por los cuatro lados, pero sin extenderse fuera del chip.

En la siguiente figura se puede ver un ejemplo.

Este permite obtener diseños muy compactos. Es por eso que muchos microcontroladores y microprocesadores se suelen fabricar con este empaquetado. Su desventaja radica en que es muy complicado, por no decir casi imposible, de utilizar de forma casera.

ESP32-D0WDQ6

El chip ESP32-D0WDQ6 fue el primer chip de la familia ESP32. Este tiene un encapsulado de 6 x 6 mm tipo QFN-48, es decir, que cuenta con un total de 48 pines. En la siguiente figura obtenida de la hoja de datos se muestra su distribución de pines.

Esta primera versión, cuenta con dos procesadores y no trae memoria adicional, es decir, que solo cuenta con las memorias internas.

ESP32-D0WD

El ESP32-D0WD cuenta con un encapsulado QFN-48 de 5mm x 5mm, un tanto menor que el ESP32-D0WDQ6. El hecho de utilizar un encapsulado diferente provoca que la posición de los pines cambien, aunque funcionalmente posee la misma cantidad y funcionalidad que su predecesor.

En la figura anterior puedes ver como la distribución de pines difiere del chip ESP32-D0WDQ6.

ESP32-D2WD

El ESP32-D2WD es una variación del ESP32-D0WD que cuenta con 2 MiB de memoria flash adicional. Si bien esto es una ventaja cabe destacar que los pines GPIO16, GPIO17, SD_CMD, SD_CLK, SD_DATA_0 y SD_DATA_1 son utilizados internamente para conectar dicha memoria. Eso implica que no deben ser utilizados para otras tareas.

ESP32-S0WD

El ESP32-S0WD es una variación en la que solo se ha incluido un procesador, a diferencia de los otros chips que cuentan con dos. Exceptuando esta diferencia, es funcionalmente similar a un ESP32-D0WD.

ESP32-PICO-D4

El ESP32-PICO-D4 es un módulo SiP con encapsulado de 7mm x 7mm de tipo QFN-48. La gran ventaja de este chip frente a los anteriores es que requiere muy pocos componentes externos, ya que en su interior cuenta con:

Este módulo es empleado en una gran variedad de placas de desarrollo, entre las que destacan:

En la página 19 de la hoja de datos del ESP32-PICO-D4 se muestra el esquema eléctrico presente en el interior de este módulo. En dicha página es posible observar todos los componentes integrados en este SiP, así como su mapa de pines.

En la hoja de datos también se encuentra la distribución de pines. Es interesante notar que esta varía bastante de la distribución de otros chip a pesar de contar con la misma cantidad de pines.

En la siguiente tabla, se muestra un pequeño resumen de los chips ESP32 analizados.

Cabe destacar que estos no son los únicos, pero sí los más comunes para la fabricación de módulos y placas de desarrollo.

IDCPUFlashEncapsuladoDetalles
ESP32-D0WDQ620 MiBPrimer chip de la familia ESP32
ESP32-D0WD20 MiBSimilar al ESP32-D0WDQ6 pero de menor tamaño.
ESP32-D2WD*22 MiBESP32-D2WD *
ESP32-S0WD10 MiBVariación de ESP32 con un solo procesador
ESP32-PICO-D4*24 MiBMódulo SiP con mayor nivel de integración (requiere menos componentes externos)

* En estos chips los pines GPIO16, GPIO17, SD_CMD, SD_CLK, SD_DATA_0 y SD_DATA1 son empleados para conectar la memoria adicional. Es por eso que se recomienda no utilizar estos pines.

Módulos PCB compactos de montaje superficial

El inconveniente de utilizar los chips anteriores es que es necesario agregar toda la electrónica externa. Además, teniendo en cuenta que se trata de chips de montaje superficial esa tarea más que complicada puede resultar imposible si no se cuenta con las herramientas adecuadas.

Teniendo en cuenta esto, varias compañías se han dado a la tarea de fabricar módulos PCB basados en esos chips

Cada módulo es una pequeña placa de circuito impreso sobre la que se sueldan chips y otros componentes y se tratan como un conjunto inseparable para integrarse en otra PCB. 

Todos los módulos contienen un chip ESP32, un cristal oscilador de 40 MHz y un chip de memoria flash, pero varían en características como: 

En la sección de módulos del sitio web de Espressif puedes ver toda la gama de módulos PCB fabricados por esta compañía. A continuación, solo se comentan los módulos más conocidos y empleados en las placas de desarrollo.

Estos módulos están diseñados para ser incorporados a productos finales, por lo tanto, carecen de los componentes típicos de las placas de desarrollo como conversores USB-Serie o reguladores de voltaje.

ESP-WROOM-32

El ESP-WROOM-32 fue el primer módulo PCB creado por Espressif. Este cuenta con unas dimensiones de 25,5 mm × 18 mm × 3,1 mm, se basa en el chip ESP32-D0WDQ6 y cuenta con 4 MiB de memoria flash adicional.

Además de integrar toda la electrónica necesaria para funcionar, cuenta con un blindaje que recubre todos los componentes del circuito y una antena impresa tipo MIFA para la interfaz de radio.

Tomando este módulo como patrón se desarrollaron otros con ciertas variaciones:

ESP32-WROVER-B

El módulo ESP32-WROVER-B está basado en el chip ESP32-D0WD y sus dimensiones son de solo 18 mm x 31,4 mm x 3,3 mm. Cuenta con blindaje y antena integrada, así como 4 MiB de memoria flash adicional y 8 MiB de memoria SRAM externa.

Estas características lo hacen ideal para un amplio rango de aplicaciones que van desde redes de sensores de bajo consumo hasta tareas complejas como la codificación de voz o el streaming de audio.

Comparativa entre placas de desarrollo ESP32 

El principal inconveniente de todos los chips y módulos ESP32 vistos hasta ahora, es que no permiten una forma amigable de ser programados. Es decir, no poseen una interfaz USB al igual que las placas Arduino para ser programados.

Además, tampoco cuentan con cabezales de pines que permitan realizar prototipos de forma fácil sin necesidad de crear un circuito impreso propio.

Para tales propósitos existen las placas de desarrollo. Cuentan con conectores y otros componentes que te permitirán crear tus proyectos IoT aprovechando al máximo las características del ESP32.

En la siguiente tabla se muestra un resumen de las placas de desarrollo basadas en ESP32 más conocidas.

FiguraNombreComprarGPIOsPulsadores+ info
ESP32 DEV KIT DOITAmazon.com30/36EN y BOOT– 
Adafruit HUZZAH32Amazon.com28RESETCargador LiPo
ESP32 ThingAmazon.com40Y y BARCOCargador LiPo
LOLIN32 con soporte de bateríaAmazon.com40EN y BOOTBatería 18650 con sistema de carga 
ESP32 LOLIN OLEDAmazon.com26EN y BOOTPantalla OLED de 0.96’’
SX1278 ESP32 (LoRa)Amazon.com26EN and BOOTChip para comunicación LoRa (SX1278) y pantalla OLED de 0.96’’

¿Cómo seleccionar una placa de desarrollo ESP32? 

Antes de seleccionar una placa de desarrollo ESP32 es necesario que tengas en cuenta ciertos aspectos:

A continuación, se muestra una breve reseña sobre cada una de las placas enumeradas en la tabla. La idea no es ofrecerte un análisis exhaustivo, sino más bien destacar las características claves de cada una.

ESP32 DEV KIT DOIT

Existen dos versiones de esta placa: una con 30 y otra con 36 GPIOs. Ambas se basan en el módulo PCB ESP32-WROOM-32 y son similares, siendo la distribución de pines su única diferencia.

La versión de 36 GPIOs permite acceder a los 6 pines utilizados para la memoria externa. Teniendo en cuenta que Espressif recomienda no utilizar estos pines, lo mejor es utilizar la versión de 30 GPIOs.

Los pines están etiquetados en la parte superior de la placa, lo que facilita la conexión con otros dispositivos. También cuenta con una interfaz USB-Serie y regulador de voltaje que permiten programar fácilmente la placa utilizando Arduino IDE o cualquier otra plataforma de desarrollo compatible. La placa puede ser alimentada utilizando el conector micro-USB, el pin VIN o el pin 3.3V.

Adafruit ESP32 Feather

Al igual que la placa anterior esta también posee interfaz USB-Serie, regulador de voltaje y la nomenclatura de los pines en la parte superior.

Una de las grandes ventajas de esta placa es que cuenta con un conector para baterías LiPo. Eso lo hace perfecto para aplicaciones portables alimentadas con baterías.

Otra ventaja de esta placa es la extensa documentación que Adafruit ofrece, incluyendo tutoriales y hojas de datos.

Sparkfun ESP32 Thing

La placa ESP32 Thing es la apuesta de Sparkfun por la plataforma ESP32. Este cuenta con todas las funcionalidades necesarias para comunicar y programar el ESP32 desde el ordenador. Su nombre se debe a que está especialmente orientado al IoT (Internet of Things)

Cuenta con un conector para baterías LiPo y un cargador LiPo integrado en la placa. Esto implica que las baterías recargables pueden cargarse conectando 5 voltios mediante el conector USB. Al igual que Adafruit, Sparkfun también ofrece una amplia documentación de muy buena calidad.

ESP32 con soporte de batería

Esta placa de desarrollo basada en ESP32 cuenta con características similares a las anteriores, pero incluye un soporte para batería que permite alimentar el sistema utilizando una batería 18650.

También incluye el sistema de carga para la batería y dos LEDs para indicar el estado de la batería. Adicionalmente, la placa permite cargar la batería al mismo tiempo que trabaja. Esto lo convierte en una excelente opción si se necesita un diseño compacto energizado por baterías.

ESP32 con OLED

Esta placa de desarrollo es similar a la anterior, incluso se basa en el mismo módulo (ESP-WROOM-32). La diferencia radica en que posee una pantalla OLED de 0.96 pulgadas en lugar de soporte para baterías.

Contar con una pantalla integrada es una gran ventaja, ya que puede ser utilizada para depuración o incluso como interfaz visual en tu proyecto.

ESP32 SX1278 (LoRa)

Esta placa ESP32 viene con el chip SX1278, que es un chip transceptor LoRa.

LoRa es una tecnología de comunicación de datos inalámbrica que permite la comunicación de largo alcance de pequeñas cantidades de datos, y con un consumo de energía mínimo. Viene con una pantalla OLED, que es realmente útil para mostrar mensajes LoRa

Si tienes la intención de hacer un proyecto con LoRa usando el ESP32, esta puede ser la mejor opción, ya que cuentas con el hardware necesario.

Otras placas de desarrollo ESP32 y proyectos especializados

Existen otras placas de desarrollo con características particulares que pueden ser útiles en proyectos más específicos:

Vulnerabilidades en el ESP32

Por último, es importante mencionar novedades sobre la seguridad de nuestros ESP32 y ESP8266.

Ya han solucionado la mayoría de las vulnerabilidades, pero si estás ejecutando software ESP32 y te encuentras en un entorno crítico, será mejor que actualices el firmware lo antes posible.

La primera y segunda vulnerabilidad aprovecha errores en la forma en que las bibliotecas ESP manejan el protocolo de autenticación extensible (EAP).

Para una mejor comprensión, te comento que EAP es un framework de autenticación. Un estándar que sigue ciertos pasos para realizar el proceso de autorización de un dispositivo en una red LAN. Se basa en mecanismos de negociación, llamados métodos EAP, los cuales pueden ser flexibles según la aplicación.

El truco hace que el ESP32 o ESP8266 en la red habilitada para EAP se bloquee, pero existe otro hackeo que permite un secuestro completo de la sesión cifrada (acceso no autorizado a información o servicios en un sistema).

Estos hacks de EAP son preocupantes, aunque, cabe aclarar que la base de código ESP32 ya ha sido parcheada contra ellos, pero el SDK ESP8266 más antiguo aún no lo ha hecho.

Conclusión sobre el chip ESP32

Este es el primer artículo que se escribe en el blog sobre el ESP32 aunque en varios podcast ya hemos hablado de este SoC. Se confirma que es el sucesor de nuestro querido ESP8266.

Se trata de una nueva generación de placas y microcontroladores destinadas al mundo del IoT, la domótica y los objetos conectados.

Y aunque como has podido ver en este artículo su potencia lo hace un microcontrolador robusto y asequible, el ESP8266 todavía seguirá unos años más con todos nosotros.

Sobre todo por la cantidad de productos comerciales que actualmente están desarrollados con este SoC.

Dicho esto, se abre una nueva línea editorial en el blog donde iremos compartiendo contenido relacionado con el ESP32.

Como siempre, muchas gracias por estar al otro lado y cualquier duda o sugerencia, en los comentarios de aquí abajo.

Gracias a Shutterstock por la cesión de las imágenes.

Salir de la versión móvil