ESP32-C3 Pinout Guide: GPIO, ADC, PWM, I2C, SPI, UART and USB Pins

ESP32-C3 Pinout Guide: GPIO, ADC, PWM, I2C, SPI, UART and USB Pins

Sep 4th, 2026

ESP32-C3 Pinout Guide with GPIO and peripheral pin functions

Introduction

The ESP32-C3 is a low-cost microcontroller from Espressif that combines 2.4 GHz Wi-Fi, Bluetooth Low Energy 5 and a single-core 32-bit RISC-V processor. It is widely used in compact IoT devices, wireless sensors, smart-home systems and entry-level embedded projects, making a clear understanding of the ESP32-C3 pinout especially useful when planning connections.If you are new to the platform, this ESP32 tutorial provides a broader introduction to ESP32 boards, features and development basics.

Compared with the original ESP32, the ESP32-C3 has fewer GPIOs and uses a single-core RISC-V CPU rather than the Xtensa architecture. It also adds native USB Serial/JTAG, which can simplify programming and debugging.The ESP32-C3 pin functions include support for ADC, PWM, I2C, SPI and UART.

One detail is essential when working with the ESP32-C3 pinout: the ESP32-C3 chip pinout is not the same thing as a development-board pinout. A module or board may reserve GPIOs for flash, LEDs, USB or other onboard hardware.

For consistency, this ESP32-C3 DevKitM-1 pinout guide uses Espressif's ESP32-C3-DevKitM-1 as the reference board. It is based on the ESP32-C3-MINI-1/MINI-1U and exposes most usable I/O pins through two headers.

ESP32-C3 DevKitM-1 pinout diagram showing GPIO, ADC, SPI, UART and JTAG pinsESP32-C3 DevKitM-1 development board layout showing key components and pin headers

Official ESP32-C3-DevKitM-1 documentation

ESP32-C3 Pinout Overview

The ESP32-C3 GPIO pins range from GPIO0 through GPIO21 at chip level, but not every GPIO is equally available for application use. GPIO12 through GPIO17, for example, are associated with the SPI flash interface and are not exposed as normal header pins on the DevKitM-1. Other pins have boot, USB, debugging or serial functions.

The ESP32-C3 GPIO pins operate in the 3.3 V domain. Do not assume that a GPIO can accept a 5 V signal simply because the development board itself can be powered from 5 V.

One reason the ESP32-C3 remains flexible despite its smaller pin count is Espressif's GPIO Matrix. Many ESP32-C3 pin functions can be routed to different GPIOs rather than being permanently attached to one pair of pins. This is especially useful for I2C, UART and SPI.

ESP32-C3 Pinout Diagram

In the ESP32-C3 pinout diagram for the ESP32-C3-DevKitM-1, the header labels correspond to GPIO numbers rather than the physical position of the ESP32-C3 chip pins.

The official ESP32-C3 pinout above shows ADC pins in yellow, SPI-related functions in green and UART functions in yellow on the opposite header. GPIO18 and GPIO19 are the native USB data pins.

This distinction becomes important when following tutorials for another ESP32-C3 board. Always check the board schematic before copying a wiring diagram.

ESP32-C3 GPIO Pins

ESP32-C3 GPIO pins can operate as digital inputs or outputs and can be connected internally to many peripherals through the GPIO Matrix. The GPIO subsystem also provides internal pull-up and pull-down resistors and GPIO interrupt support.

The DevKitM-1 exposes ESP32-C3 GPIO pins GPIO0–10 and GPIO18–21. However, "exposed" does not necessarily mean "free." GPIO8 drives the board's addressable RGB LED, while GPIO18/19 and GPIO20/21 have USB and UART roles respectively.

Which ESP32-C3 Pins Are Safe to Use?

For simple projects on the DevKitM-1, some of the most convenient ESP32-C3 GPIO pins for general-purpose use are GPIO0, GPIO1, GPIO3 and GPIO10 are convenient general-purpose choices when their alternative functions are not required. GPIO4–7 can also be used, although they have JTAG-related functions.

When choosing between different ESP32-C3 pin functions,Pin selection should still be made for the complete project rather than GPIO by GPIO. An analog input, for example, has fewer choices than an ordinary digital output.

ESP32-C3 Pins to Avoid or Use with Caution

When considering ESP32-C3 pins to avoid or use with caution,Several groups deserve additional attention. GPIO2, GPIO8 and GPIO9 are strapping pins, meaning their levels can influence configuration during reset. GPIO18 and GPIO19 are USB D− and D+, while GPIO20 and GPIO21 provide the default UART0 RX and TX functions. GPIO4–7 are associated with JTAG.

GPIO12–17 are a different case. They are associated with SPI0/1 and in-package or external flash, so they should not be treated as ordinary application GPIOs.

On the reference DevKitM-1, GPIO8 also drives the RGB LED.

ESP32-C3 ADC Pins

The ESP32-C3 ADC pins provide six analog input channels:

GPIOADC
GPIO0ADC1_CH0
GPIO1ADC1_CH1
GPIO2ADC1_CH2
GPIO3ADC1_CH3
GPIO4ADC1_CH4
GPIO5ADC2_CH0

Readings from the ESP32-C3 ADC pins are 12-bit by default, producing raw values across 4096 levels. Espressif provides several attenuation settings to extend the measurable input range. ADC reference characteristics vary between chips, so ESP32 ADC calibration is worthwhile when voltage accuracy matters.

Among the ESP32-C3 ADC pins, GPIO5 is the only ADC2 pin. For the simplest and most predictable configuration, prefer the ADC1 pins on GPIO0–GPIO4 when Wi-Fi is used.

ESP32-C3 PWM Pins

ESP32-C3 PWM pins are controlled through the LEDC peripheral.The ESP32-C3 provides six LEDC channels, which can generate independent PWM waveforms. The PWM output can be routed to suitable GPIOs, so there is no small, fixed group of "PWM pins."

There is a trade-off between PWM frequency and duty-cycle resolution. Arduino-ESP32 supports LEDC resolutions of up to 14 bits on the ESP32-C3.

Remember that PWM is still a digital waveform. It is not a true analog voltage output.

ESP32-C3 I2C Pins

ESP32-C3 I2C pins are flexible because SDA and SCL can be routed through the GPIO Matrix.Consequently, there is no universal SDA/SCL pair that applies to every ESP32-C3 development board.

A practical arrangement on the DevKitM-1 is, for example:

Wire.begin(4, 5); // SDA = GPIO4, SCL = GPIO5

Other available GPIOs can be selected as ESP32-C3 I2C pins if GPIO4 or GPIO5 is needed elsewhere. I2C lines require pull-up resistors; many breakout modules already include them.

Multiple sensors can share the same SDA and SCL lines as long as their I2C addresses do not conflict.

ESP32-C3 SPI Pins

ESP32-C3 SPI pins can likewise be routed to different GPIOs.On the DevKitM-1 header, GPIO6 and GPIO7 expose the native FSPICLK and FSPID functions, while GPIO10 provides FSPICS0. GPIO2, GPIO4 and GPIO5 also have FSPI functions.

When selecting ESP32-C3 SPI pins, do not confuse this external peripheral interface with the flash interface using GPIO12–17 internally. Those flash-related pins should normally be left alone.

ESP32-C3 UART Pins

The ESP32-C3 contains two UART controllers. On the reference board, the default ESP32-C3 UART pins for UART0 are:
• GPIO21 — U0TXD
• GPIO20 — U0RXD
The ESP32-C3 contains two UART controllers. On the reference board, the default ESP32-C3 UART pins for UART0 are:
UART signals can also be routed through the GPIO Matrix, allowing another pin pair to be selected when the default pins are already occupied.

ESP32-C3 USB Pins

The ESP32-C3 USB pins provide native USB connectivity, one of the useful differences between the ESP32-C3 and older ESP32 designs:
GPIO18 = USB D−
GPIO19 = USB D+

The chip's USB Serial/JTAG controller uses these pins by default. They can be reconfigured as GPIOs, but doing so prevents them from simultaneously serving their normal native USB role.
This matters particularly on boards that rely on native USB rather than a separate USB-to-UART bridge.

ESP32-C3 Boot and Strapping Pins

The ESP32-C3 strapping pins are GPIO2, GPIO8 and GPIO9. Their logic states are sampled during startup and can affect boot configuration.

GPIO9 is particularly relevant to firmware download mode. On development boards it is commonly associated with the BOOT function.

Avoid attaching circuits that force inappropriate levels onto the ESP32-C3 strapping pins during reset.LEDs, sensors or external pull resistors can otherwise cause a board that works normally on a breadboard to suddenly refuse to boot after new hardware is connected.

ESP32-C3 Power and Control Pins

The ESP32-C3 DevKitM-1 pinout includes 3V3, 5V, GND and RST connections. Espressif documents three mutually exclusive ways to power this board: USB, the 5 V/GND headers, or the 3.3 V/GND headers, with USB recommended for normal development.

The RST header connects to CHIP_PU/EN and is used to reset the processor.
The presence of a 5 V power pin does not make the ESP32-C3 GPIO pins 5 V logic.Sensors with 5 V outputs need suitable level shifting or voltage division before being connected to a GPIO.

ESP32-C3 Pin Functions Table

GPIODigital I/OADCPWMTypical/Special FunctionCaution
0YesADC1_CH0YesGeneral I/OGood general choice
1YesADC1_CH1YesGeneral I/OGood general choice
2YesADC1_CH2YesFSPIQStrapping
3YesADC1_CH3YesGeneral I/OGood general choice
4YesADC1_CH4YesFSPIHD/JTAGJTAG conflict
5YesADC2_CH0YesFSPIWP/JTAGADC2/JTAG
6YesYesFSPICLK/JTAGJTAG conflict
7YesYesFSPID/JTAGJTAG conflict
8YesYesRGB LEDStrapping/onboard LED
9YesYesBOOT-relatedStrapping
10YesYesFSPICS0General-purpose option
18YesYesUSB D−USB conflict
19YesYesUSB D+USB conflict
20YesYesUART0 RXSerial conflict
21YesYesUART0 TXSerial conflict

This table summarizes the ESP32-C3 pin functions in the ESP32-C3-DevKitM-1 context; another ESP32-C3 board can reserve these GPIOs differently.

ESP32-C3 Pinout Examples

Read a Potentiometer with an ADC Pin

ESP32-C3 ADC wiring diagram with a potentiometer connected to GPIO0

Connect the potentiometer ends to 3.3 V and GND, with the wiper connected to GPIO0, one of the ESP32-C3 ADC pins.

const int potPin = 0;
void setup() {
  Serial.begin(115200);
}
void loop() {
  int value = analogRead(potPin);
  Serial.println(value);
  delay(250);
}


Among the ESP32-C3 ADC pins, GPIO0 corresponds to ADC1_CH0, making it a convenient choice for a simple analog experiment.

Control an LED with PWM

ESP32-C3 PWM LED wiring diagram using GPIO3

Connect an external LED through an appropriate series resistor to GPIO3, one of the available ESP32-C3 PWM pins:
const int ledPin = 3;
void setup() {
  ledcAttach(ledPin, 5000, 8);
}
void loop() {
  for (int duty = 0; duty <= 255; duty++) {
    ledcWrite(ledPin, duty);
    delay(5);
  }
  for (int duty = 255; duty >= 0; duty--) {
    ledcWrite(ledPin, duty);
    delay(5);
  }

The LED gradually brightens and dims because its duty cycle changes while the PWM frequency remains fixed. This example demonstrates how to control ESP32-C3 PWM pins using the current Arduino-ESP32 LEDC API.

 Connect an I2C OLED Display

ESP32-C3 I2C OLED wiring diagram using GPIO4 SDA and GPIO5 SCL

An ESP32 OLED display is a useful example of how the ESP32-C3 can communicate with peripherals using only two signal wires.Most small OLED modules based on the SSD1306 controller use I2C and require SDA for data and SCL for the clock.

The ESP32-C3 I2C pins are not permanently tied to specific GPIOs. Thanks to the GPIO Matrix, SDA and SCL can be assigned to different available pins. For this example, use GPIO4 for SDA and GPIO5 for SCL.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SDA_PIN 4
#define SCL_PIN 5
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup()
{ Wire.begin(SDA_PIN, SCL_PIN);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    while (true);
  }
display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Hello ESP32-C3!"); display.display();
}
void loop() {
}

ESP32-C3 Pinout FAQs

Does the ESP32-C3 Have Touch Pins?
No. Unlike the original ESP32 and ESP32-S2, capacitive touch sensing is not included among the ESP32-C3 pin functions. Projects requiring touch input must use an external touch sensor, such as a TTP223 module.

Does the ESP32-C3 Have DAC Pins?
No. The ESP32-C3 does not have a built-in true DAC. PWM can approximate an analog output in some applications, but it remains a digital pulse signal. A true analog output requires an external DAC or a suitable PWM filter.

Are ESP32-C3 GPIO Pins 5V Tolerant?
No. ESP32-C3 GPIO pins operate in the 3.3V domain and should not be connected directly to 5V logic signals. Use a voltage divider or level shifter when connecting a device that outputs 5V signals.

Can I Change the Default I2C, SPI and UART Pins?
Yes. Many ESP32-C3 I2C, SPI and UART pins can be routed to alternative GPIOs through the ESP32-C3 GPIO Matrix. However, you must still consider conflicts with Flash, USB, strapping pins and onboard hardware.

Conclusion

The main lesson with the ESP32-C3 is that pin selection is flexible, but it is not arbitrary. Start with the schematic of the exact board, reserve USB, boot and onboard-hardware pins when those functions are needed, and then use the GPIO Matrix to fit I2C, SPI, UART and PWM around the remaining connections.

Official references: ESP32-C3 Datasheet · ESP32-C3-DevKitM-1 User Guide · ESP32-C3 ADC documentation · ESP32-C3 LEDC/PWM documentation

Back to News How to Install CasaOS on Raspberry Pi: Complete Home Server Guide