(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.

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).

2. Pinout summary (J1 / J3 headers)
Left header (J1)
From bottom (USB side) to top (module side):
| J1 Pin | Name | Description / Functions (main ones) |
|---|---|---|
| 1 | GND | Ground |
| 2 | 3V3 | 3.3 V output (from on-board LDO) |
| 3 | 3V3 | 3.3 V output (same rail) |
| 4 | RST | EN / CHIP_PU โ reset input (active HIGH enable) |
| 5 | GND | Ground |
| 6 | GPIO4 | ADC1_CH4, FSPIHD, MTMS โ good GPIO/ADC |
| 7 | GPIO5 | ADC2_CH0, FSPIWP, MTDI โ GPIO/ADC2 (Wi-Fi caveat) |
| 8 | GPIO6 | FSPICLK, MTCK โ good GPIO/SPI SCLK |
| 9 | GPIO7 | FSPID, MTDO โ good GPIO/SPI MOSI/CS |
| 10 | GND | Ground |
| 11 | GPIO8 | Onboard RGB LED data, also strapping pin |
| 12 | GPIO9 | BOOT button, strapping pin |
| 13 | 5V | 5 V from USB (or input if powering externally) |
| 14 | 5V | Same 5 V rail |
| 15 | GND | Ground |
Right header (J3)
From bottom (USB side) to top:
| J3 Pin | Name | Description / Functions (main ones) |
|---|---|---|
| 1 | GND | Ground |
| 2 | GPIO0 | ADC1_CH0, XTAL_32K_P โ GPIO/ADC, also RTC 32 kHz |
| 3 | GPIO1 | ADC1_CH1, XTAL_32K_N โ GPIO/ADC, also RTC 32 kHz |
| 4 | GPIO2 | ADC1_CH2, FSPIQ โ GPIO/ADC, strapping |
| 5 | GPIO3 | ADC1_CH3 โ GPIO/ADC |
| 6 | GND | Ground |
| 7 | GPIO10 | FSPICS0 โ good GPIO / SPI CS |
| 8 | GND | Ground |
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)");
}

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.
Serial1in 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


