Componente · Controlador
ESP32
Doble núcleo a 240 MHz, Wi-Fi, Bluetooth y mucha memoria por el precio de un café. Uso en robótica y precauciones con su lógica de 3.3 V.
Qué es
El ESP32 es un microcontrolador que parece un Arduino al que le han atornillado una radio y le han quitado los frenos. Tiene un procesador de 32 bits y doble núcleo que funciona muchas veces más rápido que un Uno, mucha más memoria y —la característica estrella— Wi-Fi y Bluetooth integrados. Esa combinación es la que domina la robótica de afición y el IoT: un robot puede alojar una página web para controlarse a sí mismo, enviar los datos de los sensores al teléfono o recibir órdenes por Bluetooth, todo desde un único chip barato.
Y lo crucial: lo programas con el mismo IDE y el mismo lenguaje Arduino que quizá ya conoces. Lo que aprendiste en un Uno se traslada directamente; simplemente ganas conectividad y margen.
Cómo funciona
En su corazón hay dos núcleos CPU Xtensa de hasta 240 MHz. Tener dos núcleos importa en robótica: un núcleo puede ejecutar tu lazo de control con tiempos estables mientras el otro se ocupa del Wi-Fi, así que la red nunca detiene las ruedas. Alrededor de la CPU están los periféricos habituales de un microcontrolador —GPIO, canales PWM, varios ADC, I²C, SPI, UART—, más la radio.
El hecho práctico más importante es la tensión: el ESP32 trabaja con lógica de 3,3 V, no con los 5 V del Uno. Sus pines no toleran 5 V. Una salida de sensor de 5 V —como el pin Echo de un HC-SR04— debe bajarse a 3,3 V antes de tocar un pin del ESP32, o corres riesgo de dañarlo. Esta única diferencia tropieza a casi todo el mundo que viene de un Uno.
Cuándo usarlo
Recurre a un ESP32 cuando tu robot necesite ser inalámbrico —control remoto, telemetría, un panel de control en el navegador— o cuando necesite cómputo que una placa de 8 bits no puede dar, como procesar más sensores o ejecutar lógica ligera en el propio dispositivo. La variante ESP32-CAM añade una cámara y abre la puerta a proyectos de visión sencillos.
Quédate con un Arduino Uno cuando estés aprendiendo los fundamentos, cuando la tolerancia de 5 V haga el cableado más seguro, o cuando el proyecto sea simple y sin conexión: llevar un par de motores por una línea no necesita Wi-Fi.
Cableado y errores comunes
- Es de 3,3 V y no tolera 5 V. Convierte el nivel de cualquier señal de 5 V antes de que llegue a un GPIO. Esta es, con diferencia, la forma más habitual de que un principiante dañe un ESP32.
- Wi-Fi más motores pueden provocar un brownout. La radio absorbe picos de corriente bruscos; compartir una alimentación floja con los motores provoca reinicios. Alimenta los motores aparte a través de un controlador de motores y dale al ESP32 un riel de 3,3 V estable.
- No todos los pines están libres. Varios GPIO son solo de entrada, están atados al comportamiento de arranque, o van conectados a la flash interna. Consulta el patillaje antes de asignar pines, o la placa no arrancará.
- Rarezas del ADC. Uno de los dos ADC no está disponible mientras el Wi-Fi está activo, y las lecturas son menos lineales que las de un Uno: calibra si necesitas precisión.
Los pines que no debes usar
Un ESP32 tiene unos 34 GPIO, y eso induce a error, porque un número significativo de ellos es inusable, usable solo bajo condiciones, o hará que la placa no arranque. Esta tabla es lo único que merece la pena leer antes de cablear nada.
| Pines | Estado | Por qué |
|---|---|---|
| GPIO 6–11 | No usar nunca | Conectados a la flash SPI interna. Usarlos deja la placa sin arranque |
| GPIO 0 | Modo de arranque | Debe estar en HIGH al reset, o la placa entra en modo de grabación |
| GPIO 2 | Modo de arranque | Debe estar flotante o en LOW al reset |
| GPIO 12 | Modo de arranque | Debe estar en LOW al reset: un pull-up aquí impide arrancar la placa |
| GPIO 15 | Modo de arranque | En HIGH al reset silencia el log de arranque |
| GPIO 34–39 | Solo entrada | Sin driver de salida, y sin pull-ups internos tampoco |
| GPIO 1, 3 | Serie (TX0/RX0) | Los usa el programador USB |
Los pines de uso general más seguros en una placa de desarrollo estándar de 30 pines son GPIO 4, 5, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33. Empieza por ahí y evitarás todas las trampas de arriba.
Los pines de modo de arranque son el fallo más confuso, porque la placa funciona perfectamente hasta que conectas algo. Una resistencia de pull-up en GPIO 12 — totalmente razonable para un botón — significa que la placa simplemente no arrancará, sin error y sin salida por serie.
Los pines de solo entrada pillan a la gente de otra manera: los GPIO 34–39 no tienen pull-up ni pull-down internos, así que un botón conectado a uno de ellos flota y lee al azar. Necesitan una resistencia externa.
3,3 V, y lo que eso te cuesta
Los pines del ESP32 no toleran 5 V, y esta es la forma más común de que la gente dañe uno. Cualquier señal de 5 V necesita un tratamiento:
| Situación | Solución |
|---|---|
| Salida de sensor de 5 V → entrada del ESP32 | Divisor resistivo (1 kΩ / 2 kΩ) o un shifter de nivel |
| Salida del ESP32 → entrada de dispositivo de 5 V | Normalmente bien: casi toda lógica de 5 V lee 3,3 V como HIGH |
| I²C bidireccional entre 5 V y 3,3 V | Un shifter de nivel bidireccional decente (basado en BSS138) |
| Dispositivo I²C de 5 V con sus propios pull-ups a 3,3 V | Suele funcionar directamente: comprueba dónde van los pull-ups |
Vale la pena internalizar la asimetría: las salidas suelen ser seguras, las entradas no. El pin Echo de un HC-SR04 es el caso clásico: empuja 5 V completos hacia un pin cuya tensión máxima absoluta es de 3,6 V.
El problema del ADC
El ADC del ESP32 es la parte más débil del chip, y fingir lo contrario te cuesta horas.
El ADC2 no funciona mientras el Wi-Fi está activo. Lo usa la radio. Cualquier analogRead
en un pin del ADC2 devuelve basura o se bloquea en cuanto se conecta el Wi-Fi, y como un robot
inalámbrico es justo la razón para usar un ESP32, esto deja el ADC2 casi descartado.
Usa solo ADC1: GPIO 32–39.
La respuesta no es lineal. El ADC de 12 bits es visiblemente no lineal en ambos extremos, y
las lecturas por debajo de unos 0,1 V y por encima de unos 3,1 V están comprimidas. El chip
trae datos de calibración de fábrica que las funciones esp_adc_cal del ESP-IDF te aplican; el
analogRead de Arduino no los usa por defecto.
| Atenuación | Rango de entrada utilizable |
|---|---|
ADC_0db |
0–1.1 V |
ADC_2_5db |
0–1.5 V |
ADC_6db |
0–2.2 V |
ADC_11db (por defecto) |
0–3.3 V, la menos lineal |
Si necesitas precisión real de un sensor analógico, la respuesta pragmática es un ADC I²C externo como un ADS1115. Cuesta unos pocos dólares y elimina el problema entero.
Alimentarlo sin brownouts
Aquí es donde más a menudo fallan los proyectos de robot con ESP32, y la causa no es obvia.
La radio no absorbe una corriente constante: la absorbe a ráfagas. Una ráfaga de
transmisión puede ser de 500 mA durante unos cientos de microsegundos frente a una media de
40–80 mA. Una alimentación que da buena lectura en un multímetro puede desplomarse igualmente
en esos picos, y el ESP32 responde reiniciándose con un mensaje Brownout detector was triggered.
| Regla | Por qué |
|---|---|
| Alimenta con al menos 500 mA, idealmente 1 A | Lo que importa es el pico, no la media |
| Pon 100 µF o más cerca del pin de 3,3 V de la placa | Carga local para cubrir la ráfaga |
| Nunca compartas riel con los motores | Corriente de arranque más ráfaga de radio es un reinicio garantizado |
| Usa un buen cable USB | La resistencia de un cable fino convierte una ráfaga en un brownout |
| Prefiere el pin de 5 V al de 3,3 V | El regulador de a bordo maneja las transitorios |
Ese último punto merece enunciarse sin rodeos: alimenta con 5 V por el pin VIN/5V y deja
que el regulador de la placa haga los 3,3 V. Inyectar 3,3 V directamente omite el regulador y
su filtrado, que es justo para lo que existe.
Dos núcleos, y cómo usarlos de verdad
El doble núcleo es la ventaja real del ESP32 para robótica, y el framework de Arduino la
esconde: tu loop() corre en el núcleo 1, y la pila de Wi-Fi corre en el núcleo 0.
Puedes fijar una tarea a un núcleo explícitamente:
void controlLoop(void *param) {
const TickType_t period = pdMS_TO_TICKS(10); // exactly 100 Hz
TickType_t last = xTaskGetTickCount();
for (;;) {
readSensors();
updatePid();
driveMotors();
vTaskDelayUntil(&last, period); // no drift, unlike delay()
}
}
void setup() {
xTaskCreatePinnedToCore(
controlLoop, "control", 4096, nullptr,
2, // priority above the default
nullptr,
1); // core 1 — leave core 0 for Wi-Fi
}
Este es el patrón que hace que un ESP32 sea realmente bueno para robótica y no solo conectado:
un lazo de control con tiempos estrictos en un núcleo, y un servidor web en el otro que no
puede detenerlo. vTaskDelayUntil es el detalle importante: a diferencia de delay(), compensa
lo que haya tardado el cuerpo del bucle, así que el periodo se mantiene exactamente en 10 ms.
Resolución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
Brownout detector was triggered |
La alimentación se desploma con las ráfagas de radio | Alimentación más rígida, 100 µF locales, alimenta con 5 V y no con 3,3 V |
| La placa no arranca de ninguna manera | Algo tirando de GPIO 0, 2 o 12 | Libera los pines de modo de arranque |
analogRead devuelve basura con el Wi-Fi |
Estás usando un pin del ADC2 | Pasa al ADC1: GPIO 32–39 |
| Un pin nunca llega a alto | Los GPIO 34–39 son solo de entrada | Usa otro pin |
| Un botón en el GPIO 35 lee al azar | No hay pull-ups internos en 34–39 | Añade una resistencia externa |
| La carga falla y hay que pulsar el botón BOOT | Falta el circuito de autoreset en el clon | Mantén BOOT mientras empieza la carga, o añade un condensador de 10 µF en EN |
| Reinicios aleatorios con carga de motores | Riel de alimentación compartido | Fuentes separadas, masa común |
| Sensor dañado después de cablearlo | 5 V hacia un pin de 3,3 V | Convierte el nivel y comprueba que el pin sigue funcionando |
| El Wi-Fi se cae cuando giran los motores | Interferencia de radio o caída de alimentación | Aleja la antena de los cables de motor; desacopla |
¿ESP32 o Arduino Uno?
| Uno | ESP32 | |
|---|---|---|
| Velocidad | 16 MHz, 8 bits | Hasta 240 MHz, 32 bits de doble núcleo |
| SRAM | 2 KB | 520 KB |
| Lógica | 5 V, indulgente | 3.3 V, sin indulgencia |
| Inalámbrico | Ninguno | Wi-Fi y Bluetooth |
| Trampas de pines | Casi ninguna | Varias que impiden arrancar la placa |
| Curva de aprendizaje | Todo funciona a la primera | Lee el patillaje antes de cablear nada |
Ambos usan el mismo lenguaje y el mismo IDE, que es el punto: la transición te cuesta casi nada en código y bastante en disciplina de cableado.
La recomendación honesta: aprende en un Uno, construye en un ESP32. La tolerancia de 5 V del Uno y la ausencia total de trampas de pines hacen que tus errores iniciales sean recuperables. Cuando sepas qué es un lazo de control y por qué las masas deben ser comunes, el ESP32 te da quince veces la velocidad de reloj, 260 veces la memoria y una radio, por aproximadamente el mismo dinero.
La variante ESP32-CAM merece conocerse por separado: añade una cámara y una ranura SD por unos pocos dólares, y es con diferencia la vía más barata de entrada a la visión robótica, al precio de quedarte sin casi ningún GPIO libre.
Explora el grafo
Se usa en estos montajes
Proyectos, rutas de aprendizaje y simuladores que incluyen ESP32.
Comparar
Alternativas
Preguntas
Preguntas frecuentes sobre ESP32
¿Qué es el ESP32?
El ESP32 es un microcontrolador de bajo coste con un procesador de doble núcleo y Wi-Fi y Bluetooth integrados. Piensa en él como un Arduino mucho más rápido que puede comunicarse sin cables con redes y teléfonos, y por eso está detrás de la mayoría de los proyectos conectados de robótica e IoT.
¿Para qué se usa un ESP32?
Se usa siempre que un proyecto necesita conectividad inalámbrica o más capacidad de proceso de la que puede ofrecer una placa de 8 bits: robots controlados por Wi-Fi, paneles web, control remoto por Bluetooth, nodos de sensores que envían datos a la nube y proyectos con cámara basados en la variante ESP32-CAM.
¿Es mejor el ESP32 que el Arduino Uno?
En especificaciones puras, sí: es mucho más rápido, tiene más memoria e incluye la conexión inalámbrica que le falta al Uno. Pero el Uno funciona a 5 V y perdona más los errores de cableado, mientras que el ESP32 funciona a 3.3 V y es menos tolerante. Para aprender lo básico, el Uno es más amable; para robots conectados o con mucho cálculo, gana el ESP32.
¿Qué diferencia hay entre Arduino y ESP32?
Arduino suele referirse a una placa de 8 bits, 5 V y un solo núcleo, sin radio. El ESP32 es una placa de 32 bits, 3.3 V y doble núcleo, con Wi-Fi y Bluetooth integrados. Para liar más las cosas, ambos se programan con el IDE de Arduino, así que «Arduino» puede referirse tanto al lenguaje y las herramientas como a las placas clásicas.
¿El ESP32 usa C o C++?
El ESP32 se programa en C++ (con bastante C) usando el framework de Arduino o el propio ESP-IDF de Espressif. Si has escrito sketches de Arduino, el lenguaje y la estructura se trasladan tal cual: básicamente ganas Wi-Fi, Bluetooth y más pines con los que trabajar.
¿Se puede programar el ESP32 con el IDE de Arduino?
Sí. Después de añadir el paquete de placas ESP32 al gestor de placas del IDE de Arduino, escribes y subes sketches exactamente igual que para un Uno, y la mayoría de las bibliotecas existentes funcionan. Es la forma más fácil de empezar, antes de pasar a ESP-IDF para funciones avanzadas.
Lecturas adicionales