El ESP32-C3 tiene solo 22 GPIO (GPIO0 a GPIO21) y varios de ellos están ocupados por la memoria flash, el USB o el arranque. En una placa pequeña como la Super Mini salen a los bordes unos 13, así que elegir bien cada pin importa más que en un ESP32 clásico. Un pin mal elegido da síntomas confusos: la placa no arranca al encenderla sola, el LED parpadea sin que lo pidas o una lectura analógica falla cuando conectas el Wi-Fi.
Esta guía usa como referencia la ESP32-C3 Super Mini (la placa más barata y común) y menciona la ESP32-C3-DevKitM-1 cuando difiere. El chip es el mismo, pero el orden y los rótulos cambian entre fabricantes: compáralo con el esquema de tu placa. Para ver todas las especificaciones, está la ficha del ESP32-C3.

Resumen rápido
| Grupo | GPIO | Qué hacer |
|---|---|---|
| Seguros para uso general | 0, 1, 3, 4, 5, 6, 7, 10 | Úsalos con calma; revisa los matices de abajo |
| Arranque (strapping) | 2, 8, 9 | Cuida su nivel al encender |
| USB integrado | 18 (D−), 19 (D+) | No los uses si cargas programas por USB |
| Consola serie (UART0) | 21 (TX), 20 (RX) | Déjalos libres para depurar |
| Memoria flash | 12 a 17 | No salen a la placa: son de la flash |
Los pines de arranque: 2, 8 y 9
Al encender, el chip lee el nivel de estos tres pines y decide cómo iniciar:
- GPIO9: a nivel bajo entra en modo de descarga. Es el botón BOOT de la Super Mini.
- GPIO8 y GPIO2: junto con GPIO9 definen el modo de arranque y si se muestra el registro de arranque por el puerto serie.
Puedes usarlos como GPIO normales después del arranque. El problema aparece si algo externo los fuerza a un nivel equivocado en el momento del encendido: un módulo que mantenga GPIO9 a nivel bajo hace que la placa entre en modo de descarga y "no haga nada". Es la causa típica de "funciona con el USB conectado al ordenador, pero no con la fuente".
Regla práctica: si te sobran pines, deja libres GPIO2, GPIO8 y GPIO9. Si necesitas I2C con los pines por defecto (8 y 9), que sus resistencias pull-up vayan a 3,3 V: así ambos arrancan en alto, que es el estado normal.
El LED de la Super Mini está en GPIO8
El LED azul de la placa suele estar en GPIO8 y se enciende con nivel bajo (LOW enciende, HIGH apaga). Tiene dos consecuencias:
- Si usas GPIO8 como SDA de I2C, el LED parpadeará con la comunicación. No es un fallo, pero conviene saberlo.
- Si conectas algo a GPIO8, el LED se comporta de forma extraña. Cuenta ese pin como ocupado.
const int LED = 8; // Super Mini: nivel bajo = encendido
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, LOW); // enciende
delay(500);
digitalWrite(LED, HIGH); // apaga
delay(500);
}
Ese comportamiento de nivel invertido es el que se usa en el sensor PIR con ESP32-C3 y en el bombillo inteligente con interruptor.
USB integrado: GPIO18 y GPIO19
El ESP32-C3 trae un controlador USB Serial/JTAG dentro del chip. Sus señales usan GPIO18 (D−) y GPIO19 (D+). En la Super Mini van al conector USB-C y no salen a los bordes, así que no tendrás que decidir nada. En la DevKitM-1 sí salen a los conectores: si los usas como entrada o salida, pierdes la carga de programas y el puerto serie por USB hasta reiniciar con otro código.
Si ves que el ESP32 no aparece en el puerto USB justo después de usar GPIO18 o GPIO19, esa es la causa más probable.
En el Arduino IDE, para ver el Monitor Serie por el USB integrado activa USB CDC On Boot: Enabled en el menú de la placa. Sin esa opción, Serial.println() no se ve en muchas Super Mini.
Los pines de la memoria flash: 12 a 17
Los GPIO12 a GPIO17 conectan la memoria flash y no están disponibles. En la Super Mini ni siquiera salen a la placa. Por eso, de los 22 GPIO del chip, a los bordes llegan unos 13: GPIO0 a GPIO10, más GPIO20 y GPIO21.
ADC1 frente a ADC2
El ESP32-C3 tiene dos convertidores analógicos con 6 canales en total:
- ADC1: GPIO0 a GPIO4.
- ADC2: solo GPIO5.
El Wi-Fi comparte hardware con ADC2. Con el Wi-Fi activo, una lectura en GPIO5 puede fallar o devolver un error. Si tu proyecto usa Wi-Fi y lee un sensor analógico, conéctalo a un pin de ADC1: GPIO0, GPIO1, GPIO3 o GPIO4 (GPIO2 es de arranque).
const int PIN_SENSOR = 3; // ADC1_3: seguro con Wi-Fi activo
void setup() {
Serial.begin(115200);
analogReadResolution(12); // 0 a 4095
}
void loop() {
int mv = analogReadMilliVolts(PIN_SENSOR); // aplica la calibración de fábrica
Serial.println(mv);
delay(500);
}
Las lecturas del ADC no son perfectamente lineales. Si necesitas precisión, usa analogReadMilliVolts() en lugar de analogRead().
Pines por defecto de I2C, SPI y UART
Casi cualquier periférico puede asignarse a cualquier GPIO libre gracias a la matriz de pines del chip, así que los "pines por defecto" son solo una convención del núcleo de Arduino. En la variante habitual de ESP32-C3 son:
| Bus | Señal | GPIO |
|---|---|---|
| I2C | SDA / SCL | 8 / 9 |
| SPI | SS / MOSI / MISO / SCK | 7 / 6 / 5 / 4 |
| UART0 | TX / RX | 21 / 20 |
Estos valores vienen del archivo pins_arduino.h de la variante y pueden cambiar entre versiones del núcleo o entre placas. Para no depender de ellos, fíjalos tú:
#include <Wire.h>
void setup() {
Wire.begin(8, 9); // SDA, SCL explícitos
}
Si prefieres no tocar los pines de arranque, mueve el I2C a otros dos GPIO libres, por ejemplo Wire.begin(0, 1).
Despertar del sueño profundo
Si el proyecto va con batería, solo GPIO0 a GPIO5 pueden despertar al chip del sueño profundo. Reserva uno de ellos para el botón o el sensor de movimiento que debe despertar la placa. El resto del ahorro de energía está en ESP32 con batería: deep sleep.
Límites eléctricos
- Los GPIO trabajan a 3,3 V. No conectes señales de 5 V directamente: usa un divisor de tensión o un conversor de nivel.
- Por cada pin no pidas más de unos 20 mA. Para relés, motores o tiras LED, usa un transistor, un MOSFET o un módulo con optoacoplador, y alimenta la carga aparte. Más detalle en cómo alimentar un ESP32.
- Une siempre las tierras (GND) de todos los dispositivos que se comunican.
Lista de pines seguros
Para un proyecto con Wi-Fi en una Super Mini:
- Entradas analógicas: GPIO0, GPIO1, GPIO3 y GPIO4 (ADC1).
- Salidas digitales y relés: GPIO0, GPIO1, GPIO3, GPIO4, GPIO6, GPIO7 y GPIO10.
- I2C: GPIO8 y GPIO9 si usas pull-up a 3,3 V, o cualquier pareja de pines libres.
- SPI: GPIO4 a GPIO7.
- Despertar de sueño profundo: GPIO0 a GPIO5.
Y cuando algo falle sin razón aparente, revisa en este orden: pines de arranque, GPIO18 y GPIO19 (USB), ADC2 con Wi-Fi, y la opción USB CDC On Boot del Arduino IDE.
Preguntas frecuentes
¿Cuántos pines puedo usar realmente en una Super Mini?
A los bordes llegan unos 13 GPIO. Si reservas los de arranque (2, 8 y 9) y la consola serie (20 y 21), quedan unos 8 para uso cómodo: GPIO0, 1, 3, 4, 5, 6, 7 y 10.
¿Puedo usar GPIO18 y GPIO19 como pines normales?
Sí, pero pierdes el USB integrado. En la Super Mini ni siquiera salen a la placa. En la DevKitM-1 mantén a mano un convertidor USB-serie en GPIO20 y GPIO21 por si necesitas volver a cargar un programa.
¿Por qué mi sensor analógico deja de funcionar al conectarme al Wi-Fi?
Probablemente está en GPIO5, el único pin de ADC2. Muévelo a GPIO0, 1, 3 o 4.
¿En qué se diferencian los pines del ESP32-C3 y del ESP32-S3?
El S3 tiene 45 GPIO, 20 canales analógicos y USB nativo en GPIO19 y GPIO20; el C3 tiene 22 GPIO y 6 canales analógicos. Los pines del S3 están en esta otra guía, y para elegir entre ambos, en ESP32-S3 vs ESP32-C3. Si dudas entre el C3 y el C6, mira ESP32-C6 vs ESP32-C3. Y si tu placa es un ESP32 clásico, la guía es pinout del ESP32 DevKit.
ESP32-C3 Super Mini
Compara el orden de pines con el diagrama antes de conectar nada: cambia entre fabricantes.
Enlace de afiliado: si compras, el sitio recibe una comisión sin costo extra para ti.



