Documentation

ShillehTek Pre-Soldered XIAO ESP32S3 Microcontroller: WiFi Bluetooth Arduino MicroPython | ShillehTek Product Manual
Documentation / ShillehTek Pre-Soldered XIAO ESP32S3 Microcontroller: WiFi Bluetooth Arduino MicroPython | ShillehTek Product Manual

ShillehTek Pre-Soldered XIAO ESP32S3 Microcontroller: WiFi Bluetooth Arduino MicroPython | ShillehTek Product Manual

Overview

The Seeed Studio XIAO ESP32-S3 is the performance flavor of the XIAO family — a tiny 21 × 17.5 mm board built around Espressif's dual-core ESP32-S3. Two Xtensa LX7 cores run at 240 MHz, with 8 MB of external PSRAM and 8 MB of flash. That extra RAM is what makes the S3 the right pick for camera streaming, audio DSP, on-device ML inference, or any project that runs out of memory on a standard ESP32.

It has 11 GPIOs, 9 touch-capable pins, hardware I2C, SPI, UART, and a native USB-C connector that can act as Serial, JTAG, or USB HID. There's also a battery charge circuit on the back-side BAT pads — solder a LiPo cell and the board handles charging from USB-C automatically.

Use it with the Arduino IDE (esp32 core), MicroPython, or ESP-IDF. The board pairs particularly well with the XIAO Expansion Board for fast prototyping with an OLED, RTC, microSD slot, and grove connectors.

At a Glance

MCU
ESP32-S3
Core
Dual Xtensa LX7 @ 240 MHz
Wireless
Wi-Fi 4 + BLE 5.0
Flash / PSRAM
8 MB / 8 MB
Touch Pins
9 (TOUCH1-TOUCH9)
USB
Native USB-C

Specifications

Parameter Value
Microcontroller ESP32-S3R8 (dual-core 32-bit Xtensa LX7)
Maximum Clock 240 MHz
Flash Memory 8 MB
PSRAM 8 MB
SRAM 512 KB on-chip
Wi-Fi 2.4 GHz IEEE 802.11 b/g/n
Bluetooth BLE 5.0 + BLE Mesh
USB USB-C (Native USB OTG/Serial/JTAG/HID)
GPIO 11 pins (D0-D10)
Analog Input 11 ADC channels (A0-A10)
Touch Sensors 9 capacitive touch (TOUCH1-TOUCH9)
I2C SDA=D4 (GPIO5), SCL=D5 (GPIO6)
SPI SCK=D8 (GPIO7), MISO=D9 (GPIO8), MOSI=D10 (GPIO9)
UART TX=D6 (GPIO43), RX=D7 (GPIO44)
Power Input 5V via USB-C, or 3.7V LiPo via solder pads
Antenna On-board PCB + IPEX U.FL connector
Dimensions 21 × 17.5 × 3.5 mm

Pinout Diagram

XIAO ESP32-S3 pinout diagram showing left side D0-D6 with analog A0-A4, TOUCH1-TOUCH6, I2C SDA on D4 and SCL on D5, UART TX on D6, and right side D10-D7 with A8-A10, TOUCH7-TOUCH9, SPI MOSI/MISO/SCK on D10/D9/D8, UART RX on D7, plus 5V, GND, and 3V3 power pins

Wiring Guide

Power and Programming

USB-C powers the board with 5V and handles flashing through the native USB Serial/JTAG controller — no external programmer required.

Pin Function Notes
USB-C 5V power + flash Native USB; supports JTAG and HID
5V +5V input/output Pass-through from USB-C
3V3 3.3V regulator output ~700 mA available
GND Ground
BAT pads 3.7V LiPo input On-board charging from USB-C
Tip: If a sketch crashes and the USB port disappears, hold BOOT, tap RESET, release BOOT to enter the ROM bootloader. You can also force download mode by holding BOOT while plugging the USB cable in.

External LED + Button

The XIAO ESP32-S3 doesn't expose a user-controllable LED. Wire an external LED through a 220Ω resistor to any free GPIO.

Component XIAO Pin Details
LED + 220Ω → GND D0 (GPIO1) Anode to GPIO, cathode to GND through resistor
Button → GND D1 (GPIO2) Use INPUT_PULLUP

I2C Devices

Default I2C uses D4 (SDA) and D5 (SCL).

Sensor Pin XIAO ESP32-S3 Pin
VCC 3V3
GND GND
SDA D4 (GPIO5)
SCL D5 (GPIO6)

SPI Devices

SPI is on D8 (SCK), D9 (MISO), and D10 (MOSI). Use any free GPIO for chip-select; D7 is a common pick.

SPI Signal XIAO Pin GPIO
SCK D8 GPIO7
MISO D9 GPIO8
MOSI D10 GPIO9
CS D7 GPIO44 (or any free GPIO)

Capacitive Touch Inputs

Nine GPIO pins double as capacitive touch sensors. Solder a small wire, copper pad, or piece of conductive tape to the pin and use it as a touch button — no resistor or other components needed.

XIAO Pin Touch Channel
D0 (GPIO1) TOUCH1
D1 (GPIO2) TOUCH2
D2 (GPIO3) TOUCH3
D3 (GPIO4) TOUCH4
D4 (GPIO5) TOUCH5
D5 (GPIO6) TOUCH6
D8 (GPIO7) TOUCH7
D9 (GPIO8) TOUCH8
D10 (GPIO9) TOUCH9
Tip: Use touchRead(pin) to get the raw count, then experiment with thresholds. Lower readings mean a finger is closer. For consistent thresholds, calibrate at boot by sampling the un-touched value.

Code Examples

Arduino — External LED Blink

xiao_s3_blink.ino
// XIAO ESP32-S3 - Blink an external LED on D0
// Board: "XIAO_ESP32S3" in the Arduino IDE (esp32 core)

#define LED_PIN D0   // GPIO1

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(250);
  digitalWrite(LED_PIN, LOW);
  delay(250);
}

Arduino — Capacitive Touch Read

xiao_s3_touch.ino
// XIAO ESP32-S3 - Capacitive touch sensor on D2 (TOUCH3)
// Reading drops when the pad is touched.

#define TOUCH_PIN D2   // GPIO3 (TOUCH3)
#define LED_PIN   D0   // GPIO1

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  int v = touchRead(TOUCH_PIN);
  Serial.println(v);
  digitalWrite(LED_PIN, v < 20000 ? HIGH : LOW);
  delay(50);
}

Arduino — Wi-Fi Connect + Web Status Page

xiao_s3_web.ino
// XIAO ESP32-S3 - Tiny HTTP server returning a status page.
// Replace YOUR_SSID / YOUR_PASS with your network credentials.

#include <WiFi.h>
#include <WebServer.h>

const char* ssid     = "YOUR_SSID";
const char* password = "YOUR_PASS";

WebServer server(80);

void handleRoot() {
  String html = "<h1>XIAO ESP32-S3</h1>";
  html += "<p>Uptime: " + String(millis() / 1000) + " s</p>";
  html += "<p>Free heap: " + String(ESP.getFreeHeap()) + " bytes</p>";
  server.send(200, "text/html", html);
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) { delay(250); Serial.print('.'); }
  Serial.println();
  Serial.println(WiFi.localIP());

  server.on("/", handleRoot);
  server.begin();
}

void loop() {
  server.handleClient();
}

MicroPython — Hello World

xiao_s3_hello.py
# XIAO ESP32-S3 - MicroPython Hello World
# Flash the official MicroPython ESP32-S3 firmware first.

from machine import Pin
import time

led = Pin(1, Pin.OUT)   # D0 = GPIO1

while True:
    led.value(1)
    time.sleep_ms(250)
    led.value(0)
    time.sleep_ms(250)

Frequently Asked Questions

What's the advantage of the S3 over the regular ESP32?
Three main wins: (1) 8 MB of PSRAM versus the original ESP32's 0-4 MB, which is huge for cameras, deep-learning models, and large display buffers. (2) Vector instructions for neural-network inference — the AI/ML libraries are noticeably faster. (3) Native USB-C, so you can do USB CDC, JTAG, HID, and OTG without external chips.
How do I enable PSRAM in the Arduino IDE?
In Tools, set "PSRAM" to "OPI PSRAM" (the XIAO ESP32-S3 uses Octal SPI PSRAM). The Arduino esp32 core's malloc will then use PSRAM for heap allocations larger than a threshold. You can also call ps_malloc() directly if you want to be explicit.
Can it act as a USB keyboard or mouse?
Yes. The native USB controller supports HID. Use the Adafruit TinyUSB library — its examples cover keyboard, mouse, gamepad, MIDI, and mass-storage (USB stick) modes. Switch the USB stack to TinyUSB in Tools first.
How do I wake from deep sleep with a touch sensor?
Use esp_sleep_enable_touchpad_wakeup() before calling esp_deep_sleep_start(). Configure the touch threshold with touchAttachInterrupt() so that a finger contact triggers the wakeup. The chip wakes in single-digit milliseconds.
Does it run TensorFlow Lite Micro?
Yes. The ESP-NN library accelerates TFLite Micro on the S3 using the LX7 vector instructions. You can run small image-classification, audio-keyword-spotting, and sensor-fusion models in real time. Memory budget for models is comfortable thanks to the 8 MB of PSRAM.
Why are some of my GPIOs not working?
A few pins on the ESP32-S3 are tied to internal flash/PSRAM (GPIO26-32 typically). Sticking to the D0-D10 numbers as labeled on the XIAO board avoids those — the manufacturer already chose only safe pins to break out.
Can it work with the XIAO Expansion Board?
Yes. The XIAO Expansion Board adds a 0.96" OLED, RTC, microSD slot, buzzer, button, two grove connectors, and a 5V/3.3V output. The XIAO ESP32-S3 plugs in just like any XIAO. The expansion board's I2C OLED uses the same default I2C pins (D4/D5).

Related Tutorials