XIAO ESP32S3: Builder guide
Draft. Untested on hardware. Every procedure below is untested. This standalone guide describes the plain Seeed Studio XIAO ESP32S3, part 113991114, using its product datasheet updated 2026-09-20 and schematic v1.1. The PCB revision of our stock is unverified. Do not substitute a Sense or Plus diagram. S2 S3
View or save the portrait PDF (opens a new tab)
Start with the boundary
A GPIO is a programmable input or output. The chip uses 3.3 V logic; a 5 V GPIO signal is outside its specified input range and can damage it. Connect grounds between signal circuits, but never interpret a shared ground as permission to connect incompatible voltages. A level shifter changes signal voltage between devices; use a properly chosen one before connecting a higher-voltage sensor. S4
Voltage ratings answer different questions. USB supplies the board through its power circuit. GPIO carries information directly to the chip. A pin labelled power is not interchangeable with a pin labelled data. Disconnect power before changing wiring, inspect for bridging wires, and keep the underside off conductive surfaces. Stop if a part becomes unexpectedly hot. Do not handle a powered board by its metal contacts. S4
The maker specifies nominal USB input at 5 V and battery input at 3.7 V. Those are not full minimum/maximum battery limits. The chip supply recommendation is 3.0–3.6 V, normally 3.3 V, behind the board's regulator. Do not apply the chip supply range to the USB connector. S2 S4
No motors, lamps or long LED strips should be powered through a GPIO. A control signal and a load's power feed are different paths. Choose a suitable driver and separate load supply after checking that load's documentation. This pilot does not establish an available external-load current budget. Keep the first example free of external loads. S4
Read pin names in context
D names are board aliases; GPIO numbers identify chip connections. They are different numbering systems. Use the board alias in portable sketches where possible. An ADC converts an analog voltage into a number; it does not make the input tolerant of excessive voltage. PWM changes the fraction of time an output stays on; it does not create a stronger power output. S4
| Job | Plain-board pins | Meaning |
|---|---|---|
| General signals | D0–D10 | GPIO1, 2, 3, 4, 5, 6, 43, 44, 7, 8, 9 respectively S5 |
| Analog sensing | D0–D5, D8–D10 | ADC-capable edge pins; UART pair is excluded S2 S4 S5 |
| I2C | D4 = GPIO5 SDA; D5 = GPIO6 SCL | Data and clock for a shared bus S5 |
| UART | D6 = GPIO43 TX; D7 = GPIO44 RX | Transmit and receive, not USB S5 |
| SPI | D8 = GPIO7 SCK; D9 = GPIO8 MISO; D10 = GPIO9 MOSI | Clock, data into controller, data out S5 |
| User LED | GPIO21, LED_BUILTIN
|
LOW lights it; HIGH extinguishes it S1 S5 |
| Power | 5V/VBUS, GND, 3V3 | Supply rail, return, regulated output S3 |
I2C devices need compatible pull-ups and distinct addresses. Inspect a module's own schematic before assuming its pull-ups go to the correct supply. For UART, the transmitting end connects to the receiving end. Serial console output over USB does not automatically appear on the edge UART pins. SPI also needs a chip-select wire chosen for the attached device. The core's default SS alias is GPIO44, which overlaps UART RX; choose explicitly instead of copying a default without reviewing it. S5
D2/GPIO3 can select the JTAG debugging route at reset, but only when EFUSE_STRAP_JTAG_SEL is programmed to enable that choice; the default eFuse setting ignores GPIO3 for JTAG selection. An eFuse is a permanent chip configuration bit. Check actual eFuse settings before relying on this conditional strap. S4 (Table 3-5) S5
Three power routes
All routes are untested in this draft. Use only USB for the example. Fit the maker-supplied antenna before experimenting with radio functions; hook one edge of its connector onto the socket first, then gently press the other edge down while supporting the board. Never pull it off by its wire. The blink does not need an antenna or any network setup. S1
USB-C: the route for this project
Use a computer USB connection and a known data cable. The board expects nominal 5 V USB power. Leave the battery and edge power pads unconnected. Keep cable strain away from the small socket. A charging-only cable can power the board while leaving the computer unable to find an upload port. S2
A powered LED alone does not prove the data connection works. Confirm the board appears in the IDE's port list. If it does not, inspect the cable and port before changing firmware settings. Avoid hubs while diagnosing an uncertain connection, and change one variable at a time so a successful change has a clear explanation.
The 5V/VBUS edge pad: qualified wiring only
The schematic connects the 5V edge pad to the USB power rail. The maker requires a diode between an external supply and the 5V pin: anode toward the supply, cathode toward the 5V pin. A regulated 5 V supply can feed that route with its return at GND; this is a wiring procedure for someone able to verify voltage and polarity before connection. Disconnect USB first. Never connect an external supply and a computer to that shared rail together in this pilot. On battery power, the maker says the 5V pin has no voltage. S1 S3
Use a supply whose behaviour under load you understand. Check the board's actual pad labels before attaching anything. This guide deliberately supplies no breadboard wiring exercise: headers may require soldering, and a guessed connection on such a small board can short adjacent contacts. This route is not the beginner activity.
Battery pads: defer until revision and cell are checked
The underside BAT+ and BAT− pads connect to the battery/charging circuit. The maker gives a nominal single-cell lithium battery voltage of 3.7 V. A rechargeable lithium cell is not interchangeable with a disposable cell, a higher-voltage pack or a bare bench wire. Do not connect any of those to these pads. S2 S3
An experienced adult must establish pad polarity, compatible protected cell, charging specification and board revision before soldering a battery lead. Keep USB disconnected during assembly. Do not begin a charging experiment from this guide: the documentation conflict is recorded in Reference. A swollen, damaged or unusually hot cell needs the manufacturer's handling instructions, not a test charge. Never leave a trial charge unattended. S1 S2
Avoid feeding the 3V3 output pad as a shortcut around the power circuit. The maker describes that pad as an output, and this pilot supplies no validated alternate-input procedure for it. Avoid connecting several power sources while trying to discover which one works. S1 S3
Worked example: a recognisable pulse
Untested: this original sketch uses only the onboard user LED. Install Arduino IDE from Arduino's instructions. Follow Espressif's board-package installation page. For reproducibility, select ESP32 package 3.3.2 and XIAO_ESP32S3; the pinned alias file supplies LED_BUILTIN. The independent PR reviewer compiled both examples on 3.3.2 and 3.3.12 with identical variant aliases; both compile with the same LED behaviour encoded. That is software evidence, not a hardware upload or observed blink. S9 S6 S5
Select the board's port. For native USB upload, choose USB CDC On Boot: Enabled and Upload Mode: UART0 / Hardware CDC where offered. CDC is the USB serial connection exposed by firmware, not the edge UART. If this is the first flash, the official instructions may require manual download mode and a reset afterward. S7
// Original FastGizmo example. Timing choices are not hardware ratings.
const unsigned long litMs = 300;
const unsigned long darkMs = 700;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW);
delay(litMs);
digitalWrite(LED_BUILTIN, HIGH);
delay(darkMs);
}
pinMode sets an output before digitalWrite changes it. The LED is active low: the LOW state turns it on. The timings are our chosen milliseconds, not a promise about frequency accuracy. Verify, then Upload. Expected result is a short lit interval followed by a longer dark interval, repeated. No serial monitor or external wiring is needed. S8 S1 S5
After a successful upload, disconnect and reconnect USB. Expected result: the saved sketch starts again. Record whether it does; do not label this verified merely because compilation succeeds. Try changing the named timings only after the original example behaves as expected. Keep an unchanged copy so you can recover a known program.
Common mistakes and recovery
Untested recovery: hold BOOT, press and release RESET, then release BOOT. Select the port that appears in download mode and upload again. After the first flash, press RESET if required. The port may change between download mode and the running sketch; reselect it rather than reusing an old name. S7
If the wrong light stays on, distinguish the user LED from the charge LED. If the program seems reversed, remember active-low behaviour. If upload fails, check cable, board selection and port before adding hardware. Remove external circuits while diagnosing. Do not assume pressing BOOT makes a stock board into a drag-and-drop disk: firmware and bootloader matter. S1 S5 S7
Keep a small test log with board markings, package version, settings, cable, expected behaviour and what you actually saw. Record failures too. This log belongs with bench review; it is not a form, and this guide collects nothing from you.
Sources and versions
Read 2026-10-11. S1 Seeed combined wiki, updated 2026-05-14; S2 plain-board datasheet, updated 2026-09-20; S3 schematic v1.1; S4 chip datasheet v2.2; S5 core aliases 3.3.2; S6 package install; S7 USB instructions; S8 GPIO API; S9 IDE install.