ESP32-C Pinout Diagram & Core Reference Table
The following table maps the physical pins for the two most common ESP32-C3 form factors: the VCC-GND/YD-RP2040 style "SuperMini" (typically $3.50–$5.00) and the official Espressif DevKitC-1 ($8.00+). This data is sourced directly from the ESP32-C3 Technical Reference Manual.
| GPIO Pin | SuperMini Label | DevKitC Label | Primary Function | Constraints & Notes |
|---|---|---|---|---|
| GPIO0 | 0 | IO0 | ADC1_CH0 / PWM | Strapping pin on some variants; avoid pulling low at boot. |
| GPIO2 | 2 | IO2 | ADC1_CH2 / I2C SDA | Commonly used for I2C data. Strictly 3.3V logic. |
| GPIO3 | 3 | IO3 | ADC1_CH3 / I2C SCL | Commonly used for I2C clock. Strictly 3.3V logic. |
| GPIO8 | 8 | IO8 | Default Boot Log / SPI | Strapping Pin. Determines boot log output. Do not attach external pull-downs. |
| GPIO9 | 9 | IO9 | Boot Mode Select | Strapping Pin. Must be HIGH at boot for normal flash execution. LOW forces ROM bootloader. |
| GPIO10 | 10 | IO10 | SPI CS0 / PWM | Safe for general output. Often used for WS2812B LED data. |
| GPIO18 | 18 / D- | USB_D- | Native USB D- | Hardwired to USB-C connector on SuperMini. Do not use for general GPIO. |
| GPIO19 | 19 / D+ | USB_D+ | Native USB D+ | Hardwired to USB-C connector on SuperMini. Do not use for general GPIO. |
| GPIO20 | 20 / RX | U0RXD | UART0 RX | Default serial console RX. Shared with internal USB-Serial/JTAG on C3. |
| GPIO21 | 21 / TX | U0TXD | UART0 TX | Default serial console TX. Shared with internal USB-Serial/JTAG on C3. |
Note: The ESP32-C6 shares a nearly identical RISC-V core but adds 802.15.4 (Thread/Zigbee) support. Its strapping pins differ slightly (GPIO8, GPIO9, and GPIO15). Always verify the silicon revision if migrating code from C3 to C6.
Board Variants, DC Wiring Standards, & Faded Markings
When integrating the ESP32-C into a larger system, you are inevitably wiring it to external sensors, optocouplers, or relay coils. While the ESP32 itself operates at 3.3V, the peripheral harnesses often carry 5V, 12V, or 24V DC. Confusion arises because DC control wiring color codes vary by regional standard, and cheap clone boards suffer from rapidly fading silkscreen.
DC Control Wiring Color Standards
Unlike AC mains wiring (which is strictly governed by NEC/IEC for safety), low-voltage DC control wiring inside an enclosure follows different regional conventions. If you are building a control panel in the US, you should follow NFPA 79. If you are building for the EU or global markets, IEC 60446 applies. Mixing these up leads to dangerous troubleshooting scenarios later.
| DC Function | IEC 60446 (EU / Global) | NFPA 79 (US Industrial) | Old UK / Legacy Hobbyist |
|---|---|---|---|
| DC Positive (+) | Brown | Red (or Blue for ungrounded) | Red |
| DC Negative / Return (-) | Blue | Black (or White for grounded) | Black |
| Protective Earth (PE) | Green/Yellow Stripe | Green/Yellow Stripe | Green |
| Switched / Signal Wire | Black or Grey | Orange or Yellow | Yellow |
Which standard applies to you? If you are wiring a 24V relay coil that the ESP32-C triggers via a MOSFET, use Brown/Blue (IEC) if the project is destined for Europe, or Red/Black (NFPA 79) if it will be inspected in a US industrial setting. For simple hobbyist breadboarding, standard Dupont jumper wires (Red=VCC, Black=GND, Yellow=Signal) remain the de-facto universal language, but never use these colors in a permanent, enclosed installation.
Recovering Faded Silkscreen on Clone Boards
The $3.50 ESP32-C3 SuperMini boards frequently use low-quality silkscreen ink that rubs off after a few weeks of handling. If your pin markings are faded or missing, never guess. Apply this bench recovery sequence:
- Identify GND: Set your multimeter to continuity mode. Place the black probe on the metal shield of the USB-C connector. Probe the header pins with the red probe. Any pin that beeps (reads < 1 ohm) is Ground.
- Identify 5V (VBUS): Power the board via USB. Set the meter to DC Voltage. Black probe on the USB-C shield, red probe on the headers. The pin reading ~4.8V to 5.1V is your raw VBUS.
- Identify 3.3V: The SuperMini uses a tiny SOT-23-5 LDO (usually an ME6211C33). Find the LDO on the board; the output pin will read exactly 3.3V relative to the USB-C shield.
- Map the GPIOs: Flash a simple "blink all pins" sketch via the Arduino IDE. Use an oscilloscope or a logic analyzer to identify the remaining pins by their sequential toggling.
Rows People Get Wrong: Strapping Pins & Logic Levels
Even experienced makers trip over specific rows in the ESP32-C pinout diagram. The Espressif GPIO API documentation explicitly warns about these hardware-level quirks, yet they remain the most common cause of "dead on arrival" project builds.
Unlike the STM32F103 (Blue Pill) or the older 5V Arduino Uno, the ESP32-C3 and C6 are built on a 40nm process with a strict 3.3V VDD limit. Connecting a 5V I2C sensor (like an older BME280 breakout) directly to GPIO2 and GPIO3 will cause latch-up and thermal destruction of the GPIO pad. Always use a bidirectional logic level shifter (e.g., Texas Instruments TXS0102) or power the sensor strictly at 3.3V.
The Strapping Pin Trap (GPIO8 & GPIO9)
Rows 4 and 5 in our reference table (GPIO8 and GPIO9) are "strapping pins." During the silicon reset phase, the ESP32-C3 samples the voltage on these pins to determine its boot behavior.
- GPIO9 (Boot Mode): If GPIO9 is pulled LOW during reset, the chip enters the ROM serial bootloader. If you wire a push-button or a sensor with a strong pull-down resistor to GPIO9, your ESP32-C will refuse to run your flashed code and will instead wait indefinitely for a serial upload. Fix: Ensure any external circuit on GPIO9 has a pull-up resistor (10kΩ to 3.3V) or is disconnected during the boot sequence.
- GPIO8 (Log Level): This pin dictates the boot log output level. Pulling it low disables certain boot logs. While less fatal than GPIO9, attaching a capacitive load (like a long wire or an LED with a large parasitic capacitance) can cause the boot sampler to misread the pin state, leading to erratic serial console output.
UART0 vs. Native USB Confusion
Rows 9 and 10 (GPIO20 and GPIO21) map to UART0 RX and TX. On the official DevKitC-1, these are routed through an onboard USB-to-UART bridge (like the CP2102). However, on the SuperMini, the USB-C connector is wired directly to the chip's native USB D- (GPIO18) and D+ (GPIO19) pins.
This means if you are trying to use hardware UART0 to communicate with a GPS module, you must wire the GPS TX to GPIO20 and GPS RX to GPIO21. The USB-C port will not bridge this data automatically unless you explicitly configure the ESP32's internal USB-Serial/JTAG peripheral in your firmware to route UART0 traffic to the native USB endpoint. Failing to understand this distinction is the #1 reason hobbyists report "my serial monitor is blank" when using the SuperMini board.
By keeping this pinout diagram, the DC wiring color standards, and the strapping pin rules at your bench, you will eliminate the vast majority of hardware-level debugging headaches inherent to the ESP32-C ecosystem.






