Seeed Studio's XIAO ESP32C3 packs a full WiFi-and-Bluetooth microcontroller into a board barely bigger than a fingernail -- 21 x 17.5mm, thumb-sized next to a full ESP32 devkit. That form factor is the entire point of the XIAO line: the same ESP32-C3 chip covered elsewhere on this site, wearing a much smaller footprint, with a LiPo charging circuit already built in for battery projects. It's become one of the most recommended boards for wearables and space-constrained sensor builds precisely because it asks so little of a project's enclosure.
The trade-off for that size is pin count. A full-size ESP32-C3 devkit breaks out somewhere around 16-19 GPIOs; the XIAO breaks out just 11. That's not a limitation of the chip -- it's a deliberate design choice to keep the board this small, and for the wearables, sensor nodes, and space-constrained builds this board is aimed at, 11 pins is usually plenty.
This guide covers every pin on the XIAO ESP32C3's header, the boot-time restrictions worth knowing on a board with this few exposed pins, and the onboard battery-charging circuit that sets it apart from a generic ESP32-C3 devkit.
GPIO Pins and Numbering
Fourteen pins total on the header, at a standard 2.54mm pitch: 11 usable GPIOs plus 5V, GND, and 3V3. Seeed labels them D0 through D10 on the silkscreen, which maps to specific ESP32-C3 GPIO numbers underneath -- the exact same chip covered in this site's full-size ESP32-C3 pinout guide, just with fewer of its pins physically accessible.
pinMode(D0, OUTPUT);
digitalWrite(D0, HIGH);
Boot-Sensitive Pins
The underlying ESP32-C3 has three confirmed strapping pins -- GPIO2, GPIO8, and GPIO9 -- and on the XIAO's compact header, D0 through D3 in particular carry some boot-time or system role, a significantly higher fraction of the total pin count than on a full-size devkit, simply because there are fewer total pins to spread the chip's fixed strapping requirements across. Check the board's official pin-multiplexing table before wiring anything to D0-D3 specifically, and default to the higher-numbered D pins for general-purpose I/O when a project has a choice.
USB
The onboard USB-C connector runs off the ESP32-C3's native USB peripheral -- it doesn't use any GPIO pin, so it never competes with the 11 header pins for a project's I/O budget.
ADC Pins
Four ADC-capable pins are available on the header for analog sensors or battery-voltage monitoring.
int reading = analogRead(A0);
With only four analog channels on a board this small, it's worth planning which sensors actually need true analog input versus which could work over I2C instead -- a project with more than a couple of analog sensors will run out of ADC pins well before it runs out of digital ones.
PWM and I2C
Every GPIO on the board supports PWM output through the standard analogWrite()/LEDC approach shared across the whole ESP32 family.
analogWrite(D1, 128); // ~50% duty cycle
I2C defaults to D4 (SDA) and D5 (SCL) on the silkscreen labeling -- reassignable in software like any ESP32 board, but these are the pins most XIAO-specific libraries and examples assume by default.
Wire.begin(D4, D5);
SPI and UART
SPI is broken out across the header for connecting displays, SD cards, or other SPI peripherals, using the standard MOSI/MISO/SCK/CS assignment shared with the rest of the ESP32-C3 line.
UART TX and RX default to D6 and D7 for serial logging or flashing-adjacent communication, separate from the native USB connection used for the Arduino IDE's Serial Monitor.
Serial1.begin(9600, SERIAL_8N1, D7, D6); // RX, TX
Wireless and Battery Charging
The board carries the same WiFi 4 and BLE 5.0 radio set as any other ESP32-C3 board -- 2.4GHz only, no Zigbee or Thread. What's specific to the XIAO here is the onboard LiPo charging circuit (an ETA4054 IC) and a U.FL connector for an external antenna, both aimed squarely at battery-powered wearable and remote-sensor projects where the tiny footprint matters as much as the wireless capability.
#include <WiFi.h>
WiFi.begin("ssid", "password");
A JST connector on the underside accepts a LiPo battery directly, with the onboard charging circuit managing it automatically whenever USB power is present -- no external charge-management circuitry needed for a basic single-cell battery project. This single detail is often the deciding factor between choosing a XIAO board over a bare ESP32-C3 module for anything meant to run untethered -- the charging circuit alone would otherwise be a separate component to source and wire.
How the XIAO ESP32C3 Compares
| Board | Usable GPIO | ADC | Radios | Battery charging | Size |
|---|---|---|---|---|---|
| Full-size ESP32-C3 devkit | ~16-19 | 5 | WiFi 4, BLE 5.0 | No | Standard devkit footprint |
| XIAO ESP32C3 | 11 | 4 | WiFi 4, BLE 5.0 | Yes, onboard | 21 x 17.5mm |
| XIAO ESP32C6 | 11 | 3 | WiFi 6, BLE 5.3, 802.15.4 | Yes, onboard | 21 x 17.5mm |
Choosing between the XIAO ESP32C3 and the XIAO ESP32C6 comes down to the same WiFi-6/Thread/Zigbee question as the full-size chips -- the C3 variant is the cheaper, simpler pick whenever a project has no need for the C6's extra radios.
Power Pins
| Pin | Function | Notes |
|---|---|---|
| 5V | Power input | Via USB-C, or as a 5V input via the 3V3 pin with an external supply |
| 3V3 | Regulated 3.3V output/input | Can also power the board directly from a regulated 3.3V source |
| GND | Ground |
Practical Pin Usage Tips
Sketch out the pin budget before wiring anything. With just 11 GPIOs and most of them carrying some boot-time role, a project mixing I2C, a couple of digital sensors, and an analog input can fill the board faster than its full-size ESP32-C3 sibling.
Use D4/D5 for I2C unless there's a specific reason not to. Sticking to the community-standard default keeps a project compatible with existing XIAO-specific library examples and wiring diagrams.
Confirm the antenna connection before assuming full WiFi range. Boards with a U.FL connector but no antenna attached will have noticeably reduced range compared to a board with the onboard chip antenna variant.
Don't rely on the 3V3 pin for anything power-hungry. It's meant for small peripherals, not for backfeeding meaningful current into the board from an external source without checking the regulator's actual current rating first.
Match a supported enclosure or grove-style expansion board if the project will be handled often. Seeed sells a small ecosystem of expansion boards specifically sized for the XIAO footprint, which is often less work than designing a custom carrier PCB for a one-off wearable project.
Summary: XIAO ESP32C3 Pin Reference at a Glance
Seeed XIAO ESP32C3 · 21 x 17.5mm · ESP32-C3, single-core RISC-V @ 160MHz · WiFi 4 · BLE 5.0 · 11 usable GPIO · 4 ADC · USB-C · Onboard LiPo charging
Which Projects the XIAO ESP32C3 Actually Fits
A strong fit: wearables, small remote sensors hidden inside an enclosure with no room to spare, or any battery-powered device where physical size genuinely constrains the design -- a plant-moisture sensor tucked into a pot, a compact air-quality monitor, or a clip-on tracker are all classic XIAO ESP32C3 territory.
A weaker fit: anything needing more than a handful of GPIOs at once, multiple simultaneous analog sensors, or Zigbee/Thread connectivity -- a full-size ESP32-C3 devkit or the XIAO ESP32C6 respectively cover those needs better.
Deep Sleep and Battery Life
Since so many XIAO ESP32C3 projects end up battery-powered, it's worth being specific about how deep sleep actually behaves here. The underlying ESP32-C3's deep sleep current draw is low enough that a typical LiPo cell can sustain a device waking briefly every few minutes to take a reading and transmit it for weeks to months, depending on transmission frequency and cell capacity. The practical levers that matter most: minimizing time spent with the radio active (WiFi association takes meaningfully longer, and draws more power, than a quick BLE advertisement), keeping the wake interval as long as the application can tolerate, and confirming any external peripherals (sensors, displays) are properly put into their own low-power or off states before the chip sleeps -- a sensor left powered through the 3V3 rail during sleep quietly undoes much of the chip's own power savings.
Quick Answers to Common XIAO ESP32C3 Pin Questions
How many usable GPIOs does this board actually have? 11, out of the ESP32-C3 chip's larger total -- the small form factor is the trade-off.
Can I charge a LiPo battery directly? Yes -- there's a JST connector and onboard charging circuit built in, no external charger module needed for a simple single-cell setup.
Does it support Zigbee or Thread? No -- same radio set as any ESP32-C3, WiFi 4 and BLE 5.0 only.
Which pins should a beginner avoid? D0 through D3 in particular carry boot-time roles inherited from the chip's GPIO2/8/9 strapping pins -- start with the higher-numbered D pins for general-purpose wiring.
Is this the same chip as a full-size ESP32-C3 devkit? Yes, identical silicon -- the difference is entirely in how many of the chip's pins reach the header and the board's physical size.
Does it come with an antenna? Depends on the specific variant -- some XIAO ESP32C3 boards use an onboard chip antenna, others expose a U.FL connector for an external one. Check before assuming maximum range out of the box.
Where to Go From Here
Once the 11-pin budget and the boot-sensitive D0-D3 pins feel familiar, the onboard LiPo charging circuit is worth building around next for anything meant to run untethered -- a wearable, a remote sensor, or a small battery-powered gadget. From there, if a project later needs more GPIO than this board can offer, a full-size ESP32-C3 devkit runs identical code with more pins to spare.