Skip to content
Guide
14 min read
October 17, 2026

ESP32-C3 Pinout Guide: GPIO, ADC, PWM, and Single-Core RISC-V Explained

A complete ESP32-C3 pinout reference — verified strapping pins, GPIO, ADC, PWM, and the WiFi 4 + BLE 5.0 radio set that makes this chip the budget pick of the ESP32 family.

The ESP32-C3 is the chip Espressif built to answer a simple question: what if an ESP8266-class board also had Bluetooth, ran a real RISC-V core instead of an aging Xtensa design, and still cost about the same? It's become the default pick for straightforward WiFi-plus-BLE sensor nodes -- not as capable as an S3 or as wireless-loaded as a C6, but cheaper than both and more than enough for a huge share of hobbyist projects. Walk through any recent "cheapest ESP32 for WiFi projects" recommendation thread and the C3 is almost always the answer.

Unlike the classic ESP32's dual-core Xtensa architecture, the C3 runs a single RISC-V core at 160MHz. That's a genuine trade-off -- no second core to offload work onto -- but for a temperature sensor, a smart switch, or anything that spends most of its life in deep sleep waiting for a WiFi wake-up, a second core was rarely doing much anyway.

This guide covers the pinout on a typical ESP32-C3 devkit (Espressif's own DevKitM-1 and the many similar third-party boards that follow its layout closely) -- GPIO, ADC, PWM, the radio set, and the exact strapping pins worth knowing before a project depends on this chip booting reliably every time.

Full ESP32-C3 DevKit pinout — GPIO, ADC, power, and strapping pins

GPIO Pins and Numbering

Like the rest of the ESP32 family, pins are addressed by GPIO number, not a flat Arduino-style count, and which ones reach a header depends on the specific board. The C3 has 22 physical GPIOs on the chip (GPIO0-21), though a typical devkit breaks out somewhere around 16-19 of them once flash-connected pins are set aside.

pinMode(2, OUTPUT);
digitalWrite(2, HIGH);

Strapping Pins -- The Exact List

According to Espressif's own datasheet, the ESP32-C3 has three strapping pins: GPIO2, GPIO8, and GPIO9. Boot mode itself is controlled specifically by GPIO8 and GPIO9, following the same table structure as the C6 and H2:

GPIO8GPIO9Result
Any valueHIGH (default)Normal SPI flash boot -- runs your program
HIGHLOWDownload Boot (USB or UART flashing mode)
LOWLOWInvalid combination

GPIO9 has an internal pull-up, so it boots normally by default if left unconnected -- this is why the BOOT button on most C3 devkits pulls GPIO9 low only while pressed. GPIO2 also has a strapping role and carries an internal pull-down by default -- best left unloaded during the power-on window on any board expected to boot unattended.

Flash-Connected Pins

GPIO12 through GPIO17 are wired internally to the onboard SPI flash on modules with integrated flash and never appear on the header at all -- this accounts for most of the gap between the chip's full 22-pin GPIO count and what actually reaches a devkit's header.

ADC Pins

The C3 has a single 12-bit ADC (ADC1) spread across GPIO0 through GPIO4 -- five ADC-capable pins in total.

int reading = analogRead(0); // GPIO0, ADC1_CH0

That's a notably smaller analog budget than the classic ESP32's ten-ish ADC-capable pins -- a project needing more than a few simultaneous analog readings is better served by an ESP32-S3 or an external ADC breakout over I2C. Worth noting: GPIO2, one of the three strapping pins, sits right in the middle of the ADC range -- if a project needs all five analog channels, keep GPIO2 unloaded during power-up and only start using it for analog reads after the boot sequence has completed.

PWM

PWM is software-mapped through the LEDC peripheral to essentially any GPIO, not hardwired to a fixed set of pins.

ledcAttach(2, 5000, 8); // pin, frequency, resolution
ledcWrite(2, 128);      // ~50% duty cycle

This flexibility is standard across the whole modern ESP32 lineup -- unlike an Arduino Uno's fixed PWM pins, the C3 lets you dim an LED or drive a servo from nearly any free GPIO, with up to six independent channels available at once through the LEDC peripheral.

Single-Core Considerations

The C3's single RISC-V core is the chip's defining trade-off against its dual-core siblings. For most sensor-and-WiFi projects this is a non-issue -- the radio stack runs largely in the background regardless of core count, handled by dedicated hardware and interrupt-driven firmware rather than constantly occupying the application core -- but anything doing genuinely CPU-heavy work alongside active WiFi (real-time audio processing, for instance) will feel the difference compared to a classic ESP32 or an S3, where a second core can absorb that load without stalling the network stack.

I2C, SPI, and UART

I2C: Any two free GPIOs can serve as SDA/SCL via Wire.begin(sda, scl). Most board definitions default to GPIO8/GPIO9 or GPIO4/GPIO5 depending on the specific devkit -- but since GPIO8/9 are also strapping pins, many designs deliberately avoid defaulting I2C there and use a different pair instead.

Wire.begin(4, 5); // SDA, SCL — adjust to your board's free pins

SPI: Same software-mapped flexibility via SPI.begin(sck, miso, mosi, cs).

UART: One hardware UART is typically tied to the onboard USB-serial chip for flashing and the Serial Monitor. A second is free to assign to any pair of GPIOs for talking to an external module independently of the USB connection.

Serial1.begin(9600, SERIAL_8N1, 20, 21); // RX, TX — example pins

Wireless: WiFi 4 and BLE 5.0

The C3 covers the fundamentals -- 2.4GHz WiFi (802.11 b/g/n, not WiFi 6) and Bluetooth Low Energy 5.0. No Zigbee, no Thread, no 802.15.4 radio at all -- for that, the C6 is the chip to reach for instead. For a project that just needs a device to join a home WiFi network and optionally pair over BLE, the C3's radio set is complete and doesn't leave anything on the table.

#include <WiFi.h>
WiFi.begin("ssid", "password");

Power draw during active transmission is notably lower than the classic dual-core ESP32's, one of the reasons the C3 has become such a common choice for coin-cell and small-LiPo battery projects reporting sensor data over WiFi a few times an hour rather than staying connected continuously.

Power Pins

PinFunctionNotes
5V / VINPower inputVia USB or an external 5V supply, depending on the board
3V3Regulated 3.3V outputPowers the chip and any 3.3V peripherals
GNDGroundMultiple ground pins on most devkits

3.3V logic throughout, same as every ESP32 variant. Level-shift anything 5V before it touches a GPIO.

Which Projects the C3 Actually Fits

A strong fit: basic WiFi sensor nodes, smart switches, BLE-paired wearables or trackers, and anything where cost per unit genuinely matters at scale -- a batch of twenty C3-based sensors costs meaningfully less than the same count of S3 or C6 boards, with no practical downside if the project never needed those chips' extra capability in the first place.

A weaker fit: anything needing Zigbee or Thread (no 802.15.4 radio at all), heavy simultaneous analog sensing (only five ADC channels), camera or display-driving projects that benefit from the S3's extra RAM and native USB, or workloads that genuinely need two application cores running in parallel.

Common Mistakes and How to Avoid Them

Buying a C3 expecting Zigbee or Thread support. It has neither -- just WiFi and BLE. Reach for a C6 or H2 if a project needs 802.15.4.

Wiring something to GPIO2, 8, or 9 without checking the strapping role first. These are the confirmed strapping pins on this chip -- an external circuit holding one in an unexpected state at power-up is the single most common cause of a C3 board that won't boot reliably.

Assuming ten-plus ADC channels like a classic ESP32. The C3's analog budget is much smaller, at five pins total -- plan pin usage accordingly on anything with multiple analog sensors.

Expecting dual-core parallelism. Code ported from a classic ESP32 that leans on running separate tasks on two cores needs restructuring for the C3's single core.

Practical Pin Usage Tips

Reserve the ADC pins for analog sensors specifically, and keep everything else digital. With only five ADC-capable GPIOs on this chip, it's easy to accidentally burn one on a digital button or relay when a plain digital pin would have done the same job.

Check your board's specific silkscreen before trusting a generic ESP32-C3 pinout diagram found online. Different manufacturers (DevKitM-1 official boards, SuperMini clones, WeMos-style boards) break out different subsets of the chip's pins, and the physical pin-to-GPIO mapping isn't standardized across them the way it is on, say, an Arduino Uno.

Keep the flashing UART free during development. It's tempting to repurpose the pins tied to the onboard USB-serial chip once a project is close to finished, but doing so removes your ability to easily re-flash or debug without physically pulling GPIO9 low to force download mode.

Don't over-provision for future features on a C3-based design. If there's a real chance a project will need Zigbee, Thread, or heavier compute later, it's cheaper in the long run to prototype on a C6 or S3 from the start than to redesign a PCB around a different chip's pinout down the line.

Watch total current draw during active WiFi transmission. Like every ESP32 variant, the radio draws current in short, sharp bursts during transmission -- a marginal power supply can cause brownouts that look like random resets or WiFi connection failures, especially on battery power.

Summary: ESP32-C3 Pin Reference at a Glance

ESP32-C3 · Single-core RISC-V @ 160MHz · 400KB SRAM · WiFi 4 (802.11 b/g/n) · BLE 5.0 · GPIO0-21 on the chip, ~16-19 usable on a typical devkit · Strapping pins: GPIO2, 8, 9 · Single 12-bit ADC on GPIO0-4

How the C3 Compares to Its Siblings

ChipCoresWiFiBluetooth802.15.4ADC pinsBest for
ESP32 (classic)Dual XtensaWiFi 4BLE 4.2No~10 (2 ADCs)Legacy projects, dual-core-heavy code
ESP32-C3Single RISC-VWiFi 4BLE 5.0No5Cheapest general WiFi/BLE sensor node
ESP32-S3Dual XtensaWiFi 4BLE 5.0No~20 (2 ADCs)Camera, display, native USB, AI-adjacent work
ESP32-C6RISC-V + LP coreWiFi 6BLE 5.3Yes7Matter, Thread, Zigbee alongside WiFi

For most straightforward "connect a sensor to WiFi" projects with no Matter/Thread/Zigbee requirement and no need for a camera or display, the C3 is simply the cheapest chip that does the job completely -- the extra capability the C6 and S3 offer goes unused, and the C3's smaller analog budget rarely matters for a project reading one or two sensors.

Popular ESP32-C3 Boards and Where This Guide Applies

The pinout described here matches Espressif's own DevKitM-1 layout, which most mainstream third-party C3 boards follow closely -- including common breakout-style boards from AI-Thinker, LuatOS, and the various "ESP32-C3 SuperMini" clones that have become popular for their tiny footprint. That said, "closely" isn't "identically": SuperMini-style boards in particular often expose a smaller subset of pins than the full DevKitM-1, trading GPIO count for an even smaller form factor -- similar in spirit to how Seeed's XIAO line trades pins for size. Always cross-check a specific board's own silkscreen or vendor pinout diagram against this guide's GPIO numbers rather than assuming every C3 board wires identically, particularly around which of the five ADC-capable pins and which UART default pins actually reach the header on a smaller board.

Quick Answers to Common ESP32-C3 Pin Questions

Is the C3 good enough for a basic IoT sensor project? Yes -- for WiFi-connected sensors, smart switches, or BLE-paired devices with no Zigbee/Thread requirement, it's genuinely enough chip, and it's usually the cheapest board that covers the job properly.

How many pins can I actually use? Expect roughly 16-19 usable GPIOs on a typical devkit, out of 22 total on the chip -- check your specific board's silkscreen rather than assuming the full pin count is accessible.

Which exact pins are the strapping pins? GPIO2, GPIO8, and GPIO9, per Espressif's own datasheet -- with GPIO8 and GPIO9 specifically controlling boot mode.

Can I run two things at once, like a classic ESP32's dual core? Not in the same way -- there's one application core here. FreeRTOS tasks still time-slice on that single core, which is fine for most sensor workloads but not true parallelism.

Does it support 5GHz WiFi? No -- 2.4GHz only, and WiFi 4 rather than WiFi 6.

Can I use 5V sensors directly? No -- 3.3V logic throughout, same as the rest of the ESP32 family. Level-shift anything 5V.


Where to Go From Here

Once the single-ADC budget and the strapping pins feel familiar, the compact XIAO ESP32C3 is worth a look for anything space-constrained, since it carries the same chip in a thumbnail-sized board with battery-charging circuitry built in. From there, if a project grows to need Zigbee, Thread, or WiFi 6, the ESP32-C6 carries a very similar programming model with those radios added on top, and shares the same GPIO8/GPIO9 boot-mode strapping behavior, which makes the jump between the two chips feel more familiar than it might otherwise.

Signal In

Built from what makers search for

The lookups piling up in SolderHub's search bar every day shape what we publish next — new component pages, board guides, and firmware notes, sent out as they go live.

By subscribing you agree to our Privacy Policy. Unsubscribe anytime.