The Seeed Studio XIAO ESP32-C6 is one of the smallest practical ESP32-C6 boards for ESPHome, battery-powered sensors and compact smart-home projects. It combines a 160 MHz RISC-V ESP32-C6, 4 MB flash, Wi-Fi 6, Bluetooth LE and an IEEE 802.15.4 radio for Thread and Zigbee in the standard 21 × 17.8 mm XIAO footprint.
The board is more capable than its size suggests, but several pins are already committed internally. GPIO12 and GPIO13 carry the built-in USB Serial/JTAG connection, GPIO3 and GPIO14 control the RF antenna switch, GPIO15 drives the onboard user LED, and GPIO9 is used for the BOOT button. The normal side headers still expose 11 useful D0–D10 pins.
For ESPHome, the XIAO ESP32-C6 is now a much stronger choice than it was when C6 support first appeared. Current ESPHome uses ESP-IDF for the C6, supports Wi-Fi/Home Assistant operation, OpenThread on the built-in 802.15.4 radio and native Zigbee support. This guide focuses on the normal Wi-Fi/ESPHome use case first, then covers battery operation and the newer mesh-radio options.
XIAO ESP32-C6 Hardware at a Glance
| Feature | Seeed XIAO ESP32-C6 |
|---|---|
| Processor | ESP32-C6 RISC-V HP core up to 160 MHz + LP core up to 20 MHz |
| Memory | 512 KB SRAM, 4 MB flash |
| Wi-Fi | 2.4 GHz Wi-Fi 6 / 802.11ax |
| Bluetooth | Bluetooth LE 5 |
| 802.15.4 | Zigbee and Thread capable |
| Exposed digital pins | D0–D10, 11 side-header GPIOs |
| ADC | D0–D2 plus additional chip ADC-capable pads |
| I²C | D4 SDA / D5 SCL |
| UART | D6 TX / D7 RX |
| SPI | D8 SCK / D9 MISO / D10 MOSI |
| USB | USB-C using ESP32-C6 USB Serial/JTAG |
| Battery | 3.7 V Li-ion/LiPo pads with onboard charging management |
| Dimensions | 21 × 17.8 mm |
The board has no PSRAM. That is not a problem for normal sensors, relays, Bluetooth, Thread, Zigbee or ordinary ESPHome devices, but it makes the XIAO C6 a less obvious choice for large displays, image-heavy projects or memory-intensive audio workloads.
XIAO ESP32-C6 Pinout
Seeed labels the side pins D0–D10. The underlying ESP32-C6 GPIO numbers matter because most ESPHome configurations use the raw GPIO number rather than the printed XIAO alias.
| XIAO pin | ESP32-C6 GPIO | Default role | Useful notes |
|---|---|---|---|
| D0 | GPIO0 | Analog / digital | ADC-capable, low-power GPIO |
| D1 | GPIO1 | Analog / digital | ADC-capable, low-power GPIO |
| D2 | GPIO2 | Analog / digital | ADC-capable, low-power GPIO |
| D3 | GPIO21 | Digital | General-purpose GPIO |
| D4 | GPIO22 | I²C SDA | Can also be used as GPIO |
| D5 | GPIO23 | I²C SCL | Can also be used as GPIO |
| D6 | GPIO16 | UART TX | General-purpose GPIO |
| D7 | GPIO17 | UART RX | General-purpose GPIO |
| D8 | GPIO19 | SPI SCK | General-purpose GPIO |
| D9 | GPIO20 | SPI MISO | General-purpose GPIO |
| D10 | GPIO18 | SPI MOSI | General-purpose GPIO |
The printed peripheral labels are defaults, not hard restrictions. ESP32-C6 has a flexible GPIO matrix, so UART, SPI and I²C signals can often be reassigned in software. The table is still the best starting point because it matches Seeed’s board documentation and common examples.
Pins Used Internally by the Board
Several C6 GPIOs exist on the chip but should not be treated as ordinary spare XIAO pins.
| GPIO | Board function | Practical meaning |
|---|---|---|
| GPIO3 | RF switch power/control enable | Used when switching between onboard and U.FL antenna |
| GPIO14 | RF antenna select | LOW = onboard antenna, HIGH = external U.FL after RF switch control is enabled |
| GPIO15 | Onboard user LED | Available internally but already connected to LED circuitry |
| GPIO9 | BOOT button | Strapping/boot function; use with care |
| GPIO12 | USB D− | USB Serial/JTAG, routed to USB-C |
| GPIO13 | USB D+ | USB Serial/JTAG, routed to USB-C |
GPIO12 and GPIO13 are particularly important. On the ESP32-C6 they form the fixed USB Serial/JTAG interface. The XIAO routes them to the USB-C connector, and they are not normal D0–D10 breakout pins.
GPIO4–GPIO7 are also available on bottom/JTAG pads rather than the standard side-header row. Unless you specifically need the extra test pads, the D0–D10 pins are the cleaner set to design around.
USB: What the C6 Can and Cannot Do
The USB-C connector is connected to the ESP32-C6’s built-in USB Serial/JTAG peripheral. That gives the board convenient flashing, serial logging and JTAG debugging without an external USB-to-UART chip.
This is not the same USB peripheral found on an ESP32-S3. The C6’s documented USB block is USB Serial/JTAG rather than a general-purpose USB OTG controller. If your project specifically needs USB HID, MIDI, MSC or custom USB-device classes, an ESP32-S3 is usually the better starting point.
For ESPHome, this distinction is mostly irrelevant: USB is primarily used for the initial flash and diagnostics, after which the device normally communicates over Wi-Fi, Thread or another network path.
Battery Power and Charging
The XIAO ESP32-C6 includes onboard battery-management hardware and two solder pads for a single-cell rechargeable lithium battery. Seeed recommends a qualified 3.7 V Li-ion or LiPo cell.
Battery polarity matters. On the rear of the board, Seeed documents the negative battery pad on the side near the D8 marking and the positive pad near D5. Verify the current silkscreen and official board diagram before soldering because reversing a lithium cell is not a recoverable software mistake.
When USB-C is connected with a battery attached, the board can charge the cell. The red charge indicator flashes while charging and turns off when charging is complete. If no battery is connected, Seeed notes that the red light may illuminate when USB is first attached and then turn off after roughly 30 seconds.
One important difference from USB operation is the 5 V pin. Seeed explicitly notes that when the board is powered only from the battery, no voltage is present on the 5 V pin. A sensor powered from 5 V/VBUS will therefore stop working when the USB cable is removed unless the design provides its own boost supply.
3.3 V and 5 V Pins
The 3V3 pin is the board’s regulated 3.3 V rail and is the natural supply for most ESP32 sensors. Seeed documents the regulator output as capable of around 700 mA, but that does not mean you should design a peripheral load right at that limit. Leave margin for the ESP32-C6’s own radio current peaks and regulator thermal behaviour.
The 5 V pin is effectively VBUS when USB is attached. Seeed’s pin-multiplexing documentation also allows it to be used as an external power input with appropriate diode isolation. Do not connect an arbitrary external 5 V supply at the same time as USB without following Seeed’s recommended power-path arrangement.
Reading the Battery Voltage
The battery voltage is not automatically exposed to an ADC pin. Seeed documents adding a 200 kΩ resistor to create a 1:2 battery-voltage divider feeding A0/D0, allowing the ESP32-C6 to measure half the battery voltage safely.
This is a hardware modification, not an ESPHome setting. Follow the official Seeed diagram for the exact connection. Once the divider is installed, the ADC reading needs to be multiplied by approximately two to recover the battery voltage.
A Li-ion battery’s voltage-to-percentage relationship is nonlinear, so do not simply map 3.0–4.2 V linearly to 0–100% and expect an accurate state-of-charge value. For Home Assistant, a raw voltage sensor is often more honest unless you implement a battery-specific discharge curve.
ESPHome Setup for XIAO ESP32-C6
Current ESPHome recommends identifying newer ESP32 chips by variant rather than relying on a PlatformIO board definition. For the XIAO C6, a clean base configuration is:
esphome:
name: xiao-c6
friendly_name: XIAO ESP32-C6
esp32:
variant: esp32c6
framework:
type: esp-idf
logger:
api:
encryption:
key: !secret esphome_api_key
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "XIAO-C6 Fallback"
password: !secret fallback_password
captive_portal:
ESPHome’s current documentation treats ESP32-C6 as an ESP-IDF target. Unlike older ESP32 and C3 boards, do not start a C6 configuration by forcing the Arduino framework simply because an older ESPHome example used Arduino elsewhere.
Seeed examples may still use board: esp32-c6-devkitc-1 because it provides a compatible generic C6 build target. Current ESPHome now recommends variant: esp32c6 where possible, because the board field mainly supplies aliases and build defaults.
ESPHome GPIO Example
This example uses D3/GPIO21 for an external status LED and D2/GPIO2 for a push-button:
switch:
- platform: gpio
name: "External Output"
pin: GPIO21
id: external_output
binary_sensor:
- platform: gpio
name: "Push Button"
pin:
number: GPIO2
mode:
input: true
pullup: true
inverted: true
filters:
- delayed_on: 20ms
- delayed_off: 20ms
on_press:
- switch.toggle: external_output
Using the raw GPIO numbers avoids ambiguity when moving YAML between generic C6 board definitions. Keep a copy of the XIAO pin table beside the configuration so D-labels and GPIO numbers do not get mixed.
ESPHome I²C Example
The default XIAO I²C pair is D4/GPIO22 for SDA and D5/GPIO23 for SCL:
i2c:
sda: GPIO22
scl: GPIO23
scan: true
sensor:
- platform: sht3xd
address: 0x44
temperature:
name: "Room Temperature"
humidity:
name: "Room Humidity"
update_interval: 60s
This makes the XIAO C6 a neat match for compact SHT31/SHT40 environmental nodes. For sensor choice, see our SHT31 vs SHT40 vs SHT45 comparison.
Deep Sleep and Battery Life
Seeed publishes a board-level deep-sleep figure of approximately 15 µA from a 3.8 V supply for the XIAO ESP32-C6. That is an excellent baseline for a tiny battery node, but it is not a complete project-current figure.
Your finished device also includes the sensor, voltage divider, external pull-ups and any indicator circuitry. A permanently powered breakout board can easily consume more current than the sleeping XIAO itself.
For timer-based ESPHome operation, the normal pattern is: wake, connect, read the sensor, publish, then return to deep sleep.
deep_sleep:
id: deep_sleep_control
run_duration: 20s
sleep_duration: 10min
Do not blindly use a 20-second run period for every battery project. Measure how long your Wi-Fi connection and sensor update actually take, then give the device enough margin to complete its work before sleeping.
At chip level, ESP32-C6 low-power wake GPIOs include GPIO0–GPIO7. On the XIAO side header, D0/GPIO0, D1/GPIO1 and D2/GPIO2 are therefore particularly useful when you want an external wake source without using the underside pads.
For a broader power-budget approach, see our ESP32 battery-powered sensors and deep-sleep guide.
Onboard vs External Antenna
The XIAO C6 includes both an onboard ceramic antenna and a U.FL connector for an external antenna. The RF switch is software controlled.
Seeed documents the control sequence as:
- Drive GPIO3 LOW to enable RF-switch control.
- GPIO14 LOW selects the onboard antenna.
- GPIO14 HIGH selects the external U.FL antenna.
Do not reuse GPIO3 or GPIO14 for unrelated functions if you intend to control the antenna. The onboard antenna is the simplest option for most Home Assistant devices; the U.FL connector becomes useful when the XIAO is mounted inside a metal enclosure or where antenna placement is constrained.
Wi-Fi 6 Does Not Mean 5 GHz
The ESP32-C6 supports 2.4 GHz Wi-Fi 6. It does not provide 5 GHz Wi-Fi. Wi-Fi 6 refers to the 802.11ax feature set, not automatically to the 5 or 6 GHz bands.
For ESPHome this is usually ideal because most smart-home sensors still benefit from the range and compatibility of 2.4 GHz. Make sure your access point allows 2.4 GHz clients and that any combined SSID/band-steering configuration is not blocking IoT onboarding.
Bluetooth Proxy Use
The C6 includes Bluetooth LE and can be used for BLE-based ESPHome applications. However, if your only objective is a dedicated Home Assistant Bluetooth proxy, compare it with the ESP32-C3 and ESP32-S3 as well. The C6’s main extra value is the 802.15.4 radio and Wi-Fi 6 support.
Memory is also more limited than a PSRAM-equipped S3. For a simple proxy or sensor node this is fine, but the S3 remains the better choice for projects that grow into displays, voice or other memory-heavy features.
Thread Support in ESPHome
The built-in 802.15.4 radio makes Thread one of the most interesting reasons to choose the C6. Current ESPHome supports OpenThread on ESP32-C6 using ESP-IDF.
An ESPHome node can communicate with Home Assistant across a Thread network, but you need a Thread border router to bridge the 802.15.4 mesh to the IPv6 network used by Home Assistant.
Thread itself is the network layer; it is not the same thing as Matter. ESPHome can use its own API over Thread, while Matter is a higher-level application protocol that may also use Thread underneath.
Zigbee Support in ESPHome
ESPHome now also has native Zigbee support for ESP32-C6. That makes the XIAO C6 capable of becoming a Zigbee end device or router rather than only a Wi-Fi ESPHome node.
There are still practical limitations. ESPHome currently warns that ESP32-C6 Zigbee reliability can vary between boards, and its documentation specifically notes reports where some C6 boards perform reliably only when close to the coordinator. Wi-Fi coexistence also matters: station-mode Wi-Fi with a Zigbee end device is supported, while combining Wi-Fi station mode with a Zigbee router can make the Zigbee network unstable.
For a normal Wi-Fi Home Assistant sensor, none of this matters. Only add Zigbee because the project actually benefits from mesh networking or battery-friendly coordinator integration.
XIAO ESP32-C6 vs XIAO ESP32-C3
| Feature | XIAO ESP32-C6 | XIAO ESP32-C3 |
|---|---|---|
| CPU | RISC-V up to 160 MHz + LP core | RISC-V up to 160 MHz |
| Wi-Fi | 2.4 GHz Wi-Fi 6 | 2.4 GHz Wi-Fi 4 |
| Bluetooth | BLE 5 | BLE 5 |
| Thread / Zigbee | Yes, 802.15.4 radio | No |
| Flash | 4 MB | 4 MB |
| Battery charging | Yes | Yes |
| Best reason to choose | Thread/Zigbee, Wi-Fi 6, newer smart-home stack | Simple low-cost Wi-Fi/BLE projects |
If both cost about the same, the C6 is the more future-proof smart-home board. If you only need Wi-Fi, BLE and a few GPIOs, the C3 is still perfectly adequate and has an enormous existing project base.
XIAO ESP32-C6 vs ESP32-C6 SuperMini
Both boards use the same C6 family, but the XIAO is the more polished battery/wearable platform. The built-in charging path, tiny standardised footprint, onboard/external antenna selection and Seeed documentation are strong advantages.
The SuperMini boards are often cheaper and can expose a slightly different pin arrangement, but board quality and documentation vary between suppliers. If you are choosing between the C3 and C6 SuperMini families, see our ESP32-C3 SuperMini vs ESP32-C6 SuperMini comparison.
Common Problems
| Symptom | First checks |
|---|---|
| ESPHome build fails after copying old ESP32 YAML | Use variant: esp32c6 and ESP-IDF rather than forcing an old Arduino configuration. |
| No USB port appears | Try a known data cable, press RESET, then enter download mode with BOOT if necessary. |
| Sensor on 5 V pin dies when USB is unplugged | Battery mode does not supply the 5 V/VBUS pin. |
| Battery voltage always reads zero | The board requires the documented resistor-divider modification before A0 can read the battery. |
| Wi-Fi works poorly with external antenna attached | Check GPIO3/GPIO14 RF-switch configuration and U.FL connection. |
| Device will not wake from a chosen GPIO | Use a supported low-power wake pin; GPIO0–GPIO7 are the C6 low-power wake-capable group. |
| Zigbee performance is poor | Test near the coordinator first and review current ESPHome C6 Zigbee limitations. |
| Unexpectedly high battery drain | Measure the full board plus sensors; deep-sleep board current is not the same as total project current. |
Is the XIAO ESP32-C6 a Good ESPHome Board?
Yes. For a compact ESPHome node, the XIAO ESP32-C6 is one of the more interesting small boards available. It has enough GPIO for ordinary sensors and relays, proper USB flashing, battery charging, low deep-sleep current and a radio stack that covers Wi-Fi, BLE and 802.15.4.
Its main limitation is memory and pin count. Four megabytes of flash and no PSRAM are completely adequate for ordinary Home Assistant nodes, but the board is not intended to compete with a high-memory ESP32-S3 for large displays or complex user interfaces.
If your project needs a tiny battery-powered temperature sensor, button, contact sensor, soil probe, BLE device or Thread/Zigbee experiment, the XIAO C6 is a strong fit. If you need many GPIOs or large RAM buffers, use a larger ESP32 board instead.
Related ESP32 Guides
- ESP32-C3 SuperMini vs ESP32-C6 SuperMini — GPIO, USB and ESPHome differences.
- ESP32 Battery-Powered Sensors and Deep Sleep — current budgeting, wake cycles and sensor power control.
- SHT31 vs SHT40 vs SHT45 — useful compact environmental sensors for the XIAO.
- ESP32 & Home Assistant Guides — ESPHome, relays, sensors and smart-home projects.
Datasheets & External Resources
- Seeed Studio XIAO ESP32-C6 getting-started guide — specifications, pin map, battery use, deep sleep and antenna control.
- Seeed XIAO ESP32-C6 pin multiplexing guide — GPIO, UART, I²C and SPI mapping.
- Espressif ESP32-C6 datasheet — USB Serial/JTAG, strapping pins, ADC and GPIO restrictions.
- ESPHome ESP32 platform documentation — current C6 variant and framework support.
- ESPHome OpenThread component — ESP32-C6 Thread networking.
- ESPHome Zigbee component — ESP32-C6 Zigbee support and current coexistence limitations.