ESP32-C3-DevKitC-02 Pinout & GPIO Reference

(Safe pins, ADC, I²C, SPI, UART, LED)

The ESP32-C3-DevKitC-02 is Espressif’s small RISC-V dev board based on the ESP32-C3-WROOM-02 module (4 MB flash, Wi-Fi + BLE). Almost all useful GPIOs are broken out on the two headers J1 and J3.

This guide focuses on which pins you can safely use, and how to wire ADC, I²C, SPI, UART and the onboard RGB LED.


ESP32-C3-DevKitC-02

1. Board overview

Key features (DevKitC-02):

  • MCU: ESP32-C3 (32-bit single-core RISC-V @ up to 160 MHz)
  • Wireless: 2.4 GHz Wi-Fi (b/g/n) + BLE 5
  • Flash: 4 MB (SPI)
  • Power:
    • via Micro-USB
    • or 5 V pin
    • or 3V3 pin
  • Onboard USB-to-UART bridge (CP2102/CH340-type, depends on revision)
  • BOOT button (GPIO9) + RESET button (EN/CHIP_PU)
  • Onboard RGB LED on GPIO8

⚠️ All I/O is 3.3 V only. Pins are not 5 V tolerant – only the 5 V pin is meant to see 5 V (goes to the regulator).

ESP32-C3-DevKitC-02 (with the ESP32-C3-WROOM-02 module) - front

2. Pinout summary (J1 / J3 headers)

Left header (J1)

From bottom (USB side) to top (module side):

J1 PinNameDescription / Functions (main ones)
1GNDGround
23V33.3 V output (from on-board LDO)
33V33.3 V output (same rail)
4RSTEN / CHIP_PU – reset input (active HIGH enable)
5GNDGround
6GPIO4ADC1_CH4, FSPIHD, MTMS – good GPIO/ADC
7GPIO5ADC2_CH0, FSPIWP, MTDI – GPIO/ADC2 (Wi-Fi caveat)
8GPIO6FSPICLK, MTCK – good GPIO/SPI SCLK
9GPIO7FSPID, MTDO – good GPIO/SPI MOSI/CS
10GNDGround
11GPIO8Onboard RGB LED data, also strapping pin
12GPIO9BOOT button, strapping pin
135V5 V from USB (or input if powering externally)
145VSame 5 V rail
15GNDGround

Right header (J3)

From bottom (USB side) to top:

J3 PinNameDescription / Functions (main ones)
1GNDGround
2GPIO0ADC1_CH0, XTAL_32K_P – GPIO/ADC, also RTC 32 kHz
3GPIO1ADC1_CH1, XTAL_32K_N – GPIO/ADC, also RTC 32 kHz
4GPIO2ADC1_CH2, FSPIQ – GPIO/ADC, strapping
5GPIO3ADC1_CH3 – GPIO/ADC
6GNDGround
7GPIO10FSPICS0 – good GPIO / SPI CS
8GNDGround

3. Safe GPIOs (quick reference)

Safest general-purpose digital pins (no special boot quirks, broken out, not tied to buttons/LED):

GPIO0, GPIO1, GPIO3, GPIO4, GPIO6, GPIO7, GPIO10

They are perfect for: buttons, relays, MOSFET gates, SPI/I²C/UART signals, etc.

Pins that are usable but need care

  • GPIO2, GPIO8, GPIO9 – strapping pins
    • Their level at reset controls boot configuration.
    • On this board:
      • GPIO8 also drives the onboard RGB LED.
      • GPIO9 is wired to the BOOT button (pulled up, button to GND).
    • You can use them after boot, but avoid:
      • heavy loads
      • large capacitors
      • strong external pull-downs that might hold the pin low during reset.
  • GPIO5 (ADC2_CH0) – the only ADC2 pin.
    • ADC2 is shared with Wi-Fi; reading it while Wi-Fi is active can fail.
    • Best used for slow sensors or when Wi-Fi traffic is light.

Pins you should not use

  • RST / EN (CHIP_PU) – reset only, don’t use as a GPIO.
  • 5V / 3V3 / GND – power pins only.
  • Internal flash pins (GPIO12–17) and USB D± pins (18,19) are not broken out on this dev board.

4. ADC pins (analog inputs)

ESP32-C3 integrates two 12-bit SAR ADCs with 6 total channels:

  • ADC1 (recommended):
    • GPIO0, GPIO1, GPIO2, GPIO3, GPIO4
  • ADC2:
    • GPIO5

Tips:

  • Use GPIO0–4 wherever possible, especially in Wi-Fi projects.
  • ADC is 12-bit (0–4095). Max voltage depends on attenuation (up to ~2.5 V at 11 dB).
  • Add a small capacitor (e.g. 100 nF) from the ADC pin to GND for more stable readings.

Example – read a potentiometer on GPIO3 (ADC1_CH3):

const int ADC_PIN = 3; // GPIO3

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);       // 0–4095
}

void loop() {
  int raw = analogRead(ADC_PIN);
  float volts = raw * 3.3 / 4095.0;  // approx, depends on attenuation
  Serial.printf("ADC raw=%d  V=%.2f\n", raw, volts);
  delay(500);
}

5. Onboard RGB LED (GPIO8)

The DevKitC-02 includes a single addressable RGB LED (WS2812-style) on GPIO8.

  • Powered from 3.3 V.
  • Use a NeoPixel / FastLED library and set data pin = 8.
  • Remember: GPIO8 is also a strapping pin, but the onboard circuitry is designed not to break boot.

Example – blink the onboard LED (as plain digital, not RGB):

Some Arduino cores let you treat it as a normal output:

const int LED_PIN = 8;

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
  delay(500);
}

For full RGB control, use Adafruit_NeoPixel or FastLED with 1 pixel on pin 8.


6. I²C pins (SDA / SCL)

The ESP32-C3’s I²C peripheral is fully remappable using the GPIO matrix – you can use almost any free GPIO.

On this board, a safe and convenient I²C pair is:

  • SDA = GPIO4 (J1-6)
  • SCL = GPIO5 or GPIO6 (J1-7 or J1-8)

Avoid using GPIO9 as SCL (strapping + BOOT button) unless you really know what you’re doing.

Example Arduino I²C setup:

#include <Wire.h>

#define SDA_PIN 4
#define SCL_PIN 6

void setup() {
  Wire.begin(SDA_PIN, SCL_PIN);
  Serial.begin(115200);
  Serial.println("I2C started on GPIO4 (SDA) / GPIO6 (SCL)");
}

ESP32-C3-DevKitC-02 (with the ESP32-C3-WROOM-02 module, click to enlarge)

7. SPI pins

ESP32-C3 has one general-purpose SPI controller (SPI2) in addition to the flash SPI. Pins can be remapped, but the FSPI-labelled pins are convenient defaults.

Recommended SPI mapping on DevKitC-02:

  • SCLK = GPIO6 (J1-8)
  • MOSI = GPIO7 (J1-9)
  • MISO = GPIO4 (J1-6)
  • CS = GPIO10 (J3-7)

This keeps all SPI signals on the left/right mid-section and avoids strapping pins.


8. UART (serial) pins

  • The main USB-serial connection uses the ESP32-C3’s UART0 internally (TX/RX pins aren’t broken out – they go straight to the USB-UART bridge).
  • For an extra UART (e.g. Serial1 in Arduino) you can map TX/RX to any free GPIO.

Typical mapping for a second UART:

  • TX = GPIO7
  • RX = GPIO6

9. Deep-sleep & wake-up notes

  • Any GPIO can generate interrupts while the chip is running.
  • For deep-sleep, ESP32-C3 uses specific RTC-capable pins (several of GPIO0–5 can be used depending on mode). Details are in the ESP32-C3 datasheet, but a practical rule:
    • GPIO0–5 are the best candidates for wake-up sources.

10. “Cheat sheet” – what to use for what

  • Digital outputs / inputs (safe):
    • GPIO0, 1, 3, 4, 6, 7, 10
  • ADC inputs:
    • Best: GPIO0–4
    • Extra (Wi-Fi-sensitive): GPIO5 (ADC2)
  • Onboard LED:
    • GPIO8 (WS2812 RGB)
  • I²C (suggested):
    • SDA: GPIO4
    • SCL: GPIO6 (or 5)
  • SPI (suggested):
    • SCLK: GPIO6, MOSI: GPIO7, MISO: GPIO4, CS: GPIO10
  • Boot-sensitive (be gentle):
    • GPIO2, GPIO8, GPIO9

Newsletter Updates

Enter your email address below and subscribe to our newsletter

Leave a Reply

Your email address will not be published. Required fields are marked *