XIAO ESP32S3
by Seeed Studio
A compact development board by Seeed Studio featuring the ESP32-S3, suitable for wearable and space-constrained applications.

On this page
Pinout
14 pins · 2.54 mm pitch| Pin | GPIO | Labels | Status | Capabilities | Notes |
|---|---|---|---|---|---|
| 1 | 1 | D0A0GPIO1 | safe | adc · touch · pwm | |
| 2 | 2 | D1A1GPIO2 | safe | adc · touch · pwm | |
| 3 | 3 | D2A2GPIO3 | strapping | adc · touch · pwm | |
| 4 | 4 | D3A3GPIO4 | safe | adc · touch · pwm | |
| 5 | 5 | D4A4SDAGPIO5 | safe | adc · touch · pwm · i2c | |
| 6 | 6 | D5A5SCLGPIO6 | safe | adc · touch · pwm · i2c | |
| 7 | 43 | D6TXGPIO43 | strapping | uart · pwm | |
| 8 | - | 5V | power | - | 5V power input/output |
| 9 | - | GND | ground | - | |
| 10 | - | 3V3 | power | - | 3.3V power |
| 11 | 9 | D10A10MOSIGPIO9 | strapping | adc · touch · pwm · spi | |
| 12 | 8 | D9A9MISOGPIO8 | safe | adc · touch · pwm · spi | |
| 13 | 7 | D8A8SCKGPIO7 | safe | adc · touch · pwm · spi | |
| 14 | 44 | D7RXGPIO44 | strapping | uart · pwm |
Start with these
7 pins with no boot or system involvementFreely assignable - no strapping, flash, USB or JTAG duties. Ideal first picks for buttons, sensors and LEDs.
Fine - with a little care
sampled at boot or shared with debug/serial| Pin | Label | What to know | Role |
|---|---|---|---|
| D2 | GPIO3 | Sampled at reset to select JTAG interface (USB Serial/JTAG controller vs. external pins). Improper use can disable external JTAG or alter debug interface. | Strapping |
| D6 | U0TXD (GPIO43) | Used for bootloader output and UART console logs. If repurposed, you will lose the default serial output (and programming via UART0). | Other |
| D10 | FSPIHD | IO MUX pin of the general-purpose SPI2 (FSPI) bus, not of the in-package flash - that sits on GPIO26-32. The datasheet lists it as a priority-2 pin ("can be freely used without restrictions"), so it is only taken if your board wires flash, an SD card or a display to FSPI. | Other |
| D7 | U0RXD (GPIO44) | Used for bootloader input (download mode via serial). If repurposed, you cannot use the default UART0 download mode for programming the chip. | Other |
Pinout notes The XIAO ESP32S3 pinout brings out 14 pins at a 2.54 mm pitch - 11 usable GPIO alongside the 5V, GND and 3V3 power rails. Peripheral wiring is straightforward:…
The XIAO ESP32S3 pinout brings out 14 pins at a 2.54 mm pitch - 11 usable GPIO alongside the 5V, GND and 3V3 power rails.
Peripheral wiring is straightforward: I²C is mapped to SDA on GPIO5 and SCL on GPIO6; the SPI bus (MOSI, MISO, SCK) is broken out in full; TX/RX on GPIO43 and GPIO44 cover serial logging and flashing.
Beyond plain digital I/O you get 9 ADC-capable pins for sensors and battery monitoring, PWM on every GPIO and 9 capacitive-touch inputs.
4 of the exposed pins carry boot-time or system duties on the ESP32-S3 (D2, D6, D10 and 1 more) - check the guidance above before wiring anything to them. D0, D1, D3, D4 and 3 more are free of any such role - the safest first picks.
Getting started
flash your first firmware in ~2 minutesBoard: XIAO_ESP32S3 USB CDC On Boot: Enabled Flash Size: 8MB (64Mb) Flash Mode: DIO PSRAM: OPI PSRAM Partition Scheme: Default with spiffs (3MB APP/1.5MB SPIFFS) Upload Speed: 921600
// blink the onboard user LED
void setup() {
pinMode(21, OUTPUT);
}
void loop() {
digitalWrite(21, HIGH); delay(500);
digitalWrite(21, LOW); delay(500);
}[env:xiao-esp32s3]
platform = espressif32
board = seeed_xiao_esp32s3
framework = arduino
monitor_speed = 115200
upload_speed = 921600
board_build.arduino.memory_type = qio_opi
build_flags = -DBOARD_HAS_PSRAMseeed_xiao_esp32s3 - or type it after board =.esp32:
board: seeed_xiao_esp32s3
variant: esp32s3
framework:
type: esp-idf
psram:
mode: octal
speed: 80MHz
# blink - GPIO21
output:
- platform: gpio
pin: 21
id: led_out
light:
- platform: binary
name: "LED"
output: led_outseeed_xiao_esp32s3 (same ids as PlatformIO).esptool.py --chip esp32s3 --port /dev/ttyACM0 \
--baud 921600 write_flash 0x0 firmware.bin--port = your /dev/tty* (macOS/Linux) or COMx (Windows).Good to know
board-specific quirks worth 60 secondsWe ran a XIAO ESP32S3 on the bench with arduino-esp32 3.3.11 and PlatformIO, reading the results back over its native USB serial port. ESP.getPsramSize() reports 0 on the default Arduino menu, 8388608 bytes with Tools > PSRAM > OPI PSRAM, and about 8 MB from PlatformIO's seeed_xiao_esp32s3 board definition with no extra flags. Flash reports 8388608 bytes; the chip identifies as ESP32-S3 revision v0.2. The user LED…
We ran a XIAO ESP32S3 on the bench with arduino-esp32 3.3.11 and PlatformIO, reading the results back over its native USB serial port.
ESP.getPsramSize()reports 0 on the default Arduino menu, 8388608 bytes with Tools > PSRAM > OPI PSRAM, and about 8 MB from PlatformIO'sseeed_xiao_esp32s3board definition with no extra flags.- Flash reports 8388608 bytes; the chip identifies as ESP32-S3 revision v0.2.
- The user LED is GPIO21 and lights when the pin is driven LOW.
- Our box contained a 2.4 GHz FPC antenna labelled A-02.
Not tested here: deep-sleep current, and the camera and microphone, which belong to the Sense variant.
The PSRAM is octal (OPI) and off by default in Arduino IDE. Set Tools → PSRAM → "OPI PSRAM" or ESP.getPsramSize() reports 0 and large allocations fail. In PlatformIO the seeed_xiao_esp32s3 board definition enables it (it ships -DBOARD_HAS_PSRAM and a qio_opi memory type); in ESPHome add psram: mode: octal. With PSRAM disabled the sketch still builds and runs - ESP.getPsramSize() simply returns 0 - so check it…
The PSRAM is octal (OPI) and off by default in Arduino IDE. Set Tools → PSRAM → "OPI PSRAM" or ESP.getPsramSize() reports 0 and large allocations fail. In PlatformIO the seeed_xiao_esp32s3 board definition enables it (it ships -DBOARD_HAS_PSRAM and a qio_opi memory type); in ESPHome add psram: mode: octal.
With PSRAM disabled the sketch still builds and runs - ESP.getPsramSize() simply returns 0 - so check it at boot before you allocate a frame buffer.
Gallery
4 photosSpecifications
ESP32-S3 · 21 × 17.8 mm · vs other ESP32 chips →About this board
At 21 × 17.8 mm it's among the smallest boards in the whole ESP32 family.
Inside sits the ESP32-S3 - a dual-core Xtensa with vector extensions suited to AI workloads.
At $7.49 it's cheaper than most ESP32-S3 boards, which usually run around $29.
The small footprint costs pins: 11 GPIO are broken out, versus 22 or so on a full-size board.
Around the module: 8MB (OPI) PSRAM, battery charging via Solder pads, status LEDs (User, Charge) and Reset/Boot buttons.
It flashes over native USB - no serial-converter driver needed, which isn't a given among ESP32-S3 boards.
The XIAO ESP32S3 is Seeed Studio's ESP32-S3 in the XIAO form factor: a 21 x 17.8 mm board built around an ESP32-S3R8 (dual-core Xtensa LX7 at up to 240 MHz, 8 MB PSRAM in the package) with 8 MB flash, USB-C, and a U.FL connector for the antenna that ships in the box. The PSRAM is what separates it from the XIAO C3 and C6, neither of which has any: 8 MB for camera frame buffers, audio buffers and TinyML models, instead of just the 512 KB of SRAM inside the chip.
Battery support is built in: solder pads for a 3.7 V lithium cell, an onboard charger at 50 mA (fast) / 3.8 mA (trickle), a red charge LED, a user LED on GPIO21 that lights when the pin is driven LOW, and a typical deep-sleep draw of 14 µA. The same board with an OV3660 camera, a digital microphone and a microSD slot on an expansion board that plugs onto the B2B connector at the bottom edge is sold as the XIAO ESP32S3 Sense; the Plus goes to 16 MB of flash and adds nine more GPIOs on back-side pads.
Programming runs over the S3's native USB - there is no separate serial chip - and arduino-esp32 lists the board as XIAO_ESP32S3 (set Tools → PSRAM to "OPI PSRAM"). Boards ship without pin headers, so Seeed also sells a pre-soldered variant with them fitted.
- Dual-core Xtensa LX7 at up to 240 MHz
- Supports WiFi 4 (802.11 b/g/n), Bluetooth 5.0 LE and Bluetooth Mesh
- Ultra-small size (21x17.8 mm)
Where to buy
prices are typical street prices
Resources
Similar boards











