Skip to content

Hardware Kit

Every attendee receives the following hardware kit at the workshop.

All hardware must be returned after the workshop

The components in this kit are loaned to you for the duration of the workshop only. You must return all items β€” including the XIAO ESP32-S3, breadboard, sensors, displays, and all jumper wires β€” at the end of Day 2.

  • Do not take any components home
  • Do not swap or mix components with other attendees' kits
  • If any component is damaged during the workshop, inform the instructor immediately β€” do not attempt to hide or discard it
  • You take home the code, knowledge, and Jupyter notebooks β€” not the hardware

Main Board

Seeed Studio XIAO ESP32-S3

MCU ESP32-S3 (dual-core Xtensa LX7, 240 MHz)
Flash 8 MB
PSRAM 8 MB (essential for camera and ML workloads)
WiFi 802.11 b/g/n
Bluetooth BLE 5.0
USB USB-C (data + power)
GPIO 11 digital I/O pins
ADC 9 channels (12-bit)
I2C / SPI / UART All supported
Size 21 Γ— 17.8 mm

This is the brain of every experiment. It runs ESP-IDF firmware, connects to WiFi, reads sensors, drives displays, and runs ML models β€” all on a board smaller than your thumb.


Full Component List

Component Qty Used In Purpose
XIAO ESP32-S3 1 All modules Main microcontroller
LED (red/green/yellow) 3 Module 1, 2, 5 Digital output, PWM dimming
RGB LED (common cathode) 1 Module 1 Multi-channel GPIO + PWM
Push buttons 2 Module 1, 3, 12 Digital input, GPIO wakeup
Breadboard (half-size) 1 All modules Circuit assembly
Jumper wires (M-M, M-F) 20+ All modules Connections
Potentiometer (10kΞ©) 1 Module 2, 3, 4 Analog input (ADC)
Passive buzzer 1 Module 2 PWM tone generation
SSD1306 I2C OLED (128Γ—64) 1 Module 4, 7 I2C display
DHT11 temperature/humidity sensor 1 Module 9, 10, 12, 13, 14, 17 Sensor data + TinyML
W25Q32 SPI flash (4 MB) 1 Module 6 SPI communication
NEO-6M GPS module 1 Module 5 UART + NMEA parsing
INA219 current sensor 1 Bonus I2C power measurement

Pin Mapping Reference

Quick reference for wiring the XIAO ESP32-S3:

XIAO Pin GPIO ADC Notes
D0 GPIO_NUM_1 ADC1_CH0
D1 GPIO_NUM_2 ADC1_CH1
D2 GPIO_NUM_3 ADC1_CH2
D3 GPIO_NUM_4 ADC1_CH3
D4 GPIO_NUM_5 ADC1_CH4
D5 GPIO_NUM_6 ADC1_CH5
D6 GPIO_NUM_7 ADC1_CH6
D7 GPIO_NUM_8 β€” Touch pin
D8 GPIO_NUM_9 β€” Touch pin, on-board button
D9 GPIO_NUM_10 β€” Touch pin, on-board LED (active low)
A0 GPIO_NUM_2 ADC1_CH2 Analog input

Pin conflicts

Some pins share functions. For example, GPIO 2 is both D1 and A0. Check the XIAO ESP32-S3 pinout before wiring.


Wiring Diagrams

LED Circuit (Module 1)

XIAO D0 (GPIO 1) ──[330Ξ©]───LEDβ”œβ”€β”€ GND

RGB LED Circuit (Module 1)

XIAO D0 (GPIO 1) ──[220Ξ©]───Rβ”œβ”€β”€ GND
XIAO D1 (GPIO 2) ──[220Ξ©]───Gβ”œβ”€β”€ GND
XIAO D2 (GPIO 3) ──[220Ξ©]───Bβ”œβ”€β”€ GND

Button Circuit (Module 1)

XIAO D7 (GPIO 8) ───BTNβ”œβ”€β”€ GND
              β”‚
             10kΞ© pull-up to 3.3V

Potentiometer Circuit (Module 2, 3)

3.3V ───POTβ”œβ”€β”€ GND
        β”‚
   XIAO A0 (wiper)

I2C OLED (Module 4)

XIAO SDA (D6, GPIO 7) ── OLED SDA
XIAO SCL (D5, GPIO 6) ── OLED SCL
3.3V ──────────────────── OLED VCC
GND ───────────────────── OLED GND

DHT11 (Module 9+)

XIAO D3 (GPIO 4) ──[10kΞ© pull-up to 3.3V] ── DHT11 DATA
3.3V ────────────────────────────────────────── DHT11 VCC
GND ─────────────────────────────────────────── DHT11 GND

SPI Flash W25Q32 (Module 6)

XIAO D10 (GPIO 44) ── CS
XIAO D8  (GPIO 9)  ── DI (MOSI)
XIAO D9  (GPIO 10) ── DO (MISO)
XIAO D6  (GPIO 7)  ── CLK
3.3V ─────────────── VCC
GND ──────────────── GND

GPS NEO-6M (Module 5)

XIAO D7 (GPIO 8, TX) ── NEO-6M RX
XIAO D8 (GPIO 9, RX) ── NEO-6M TX
5V ──────────────────── NEO-6M VCC
GND ─────────────────── NEO-6M GND

⚠️ Safety and Component Handling

Read before you start wiring

Improper handling can damage components permanently. Follow these guidelines to keep your kit in working condition.

General Handling Rules

  • Never force connections β€” If a wire or component doesn't fit, don't push harder. Check the pin alignment and try again.
  • Always disconnect USB before rewiring β€” Unplug the XIAO from USB-C before changing any connections on the breadboard. Hot-swapping can cause short circuits.
  • No loose wires on powered boards β€” A stray wire touching the wrong pin can short-circuit and damage the XIAO permanently.
  • Keep your workspace tidy β€” Accidental contact between loose wires is the #1 cause of mysterious failures and damage.
  • Handle the XIAO by the edges β€” Avoid touching the components on the board surface. Static discharge from your fingers can damage the ESP32-S3.
  • Do not bend or stress pins β€” The XIAO's castellated pads are fragile. If using a breadboard, insert and remove gently.

Power and Voltage

Use ONLY 3.3V logic

The XIAO ESP32-S3 operates at 3.3V logic. Connecting 5V signals directly to GPIO pins will destroy the chip.

  • The 5V pin on the XIAO is for input power only β€” do not connect it to GPIO, sensors, or displays unless they are 5V-tolerant
  • The GPS NEO-6M module requires 5V power β€” connect its VCC to the 5V pin, not to a GPIO
  • All other sensors and displays should use 3.3V from the XIAO's 3V3 pin

Component-Specific Handling

Component Warning What Not to Do
XIAO ESP32-S3 Electrostatic sensitive Don't touch the chip; don't connect 5V to GPIO
LEDs Polarity matters Longer leg = anode (+); reversing may damage the LED
RGB LED Needs current-limiting resistors Never connect without 220Ξ© resistors β€” it will burn out
Buzzer Passive only β€” needs PWM signal Don't apply DC voltage directly β€” it won't sound and may damage it
OLED Display I2C address is 0x3C Don't connect to 5V β€” use 3.3V only
DHT11 Needs 10kΞ© pull-up on data line Missing pull-up = no readings or garbage data
GPS NEO-6M Needs outdoor sky view Indoor GPS won't get a fix β€” we use simulated data
SPI Flash Sensitive to incorrect wiring Double-check all 6 wires before powering on
Potentiometer 3.3V only on the outer pins Don't connect 5V β€” ADC will overflow
Breadboard Push wires firmly until they click Loose connections = intermittent failures

Breadboard Best Practices

  • Push wires all the way in β€” Loose connections are the #1 cause of "it doesn't work." If a wire wiggles easily, it's not seated properly.
  • Use the power rails β€” The red/blue lines on the sides are for 3.3V and GND. Use them to distribute power cleanly.
  • Keep wires short β€” Long, looping wires pick up noise and create messy circuits that are hard to debug.
  • One component per hole β€” Don't force two leads into the same row of holes.

πŸ†˜ Getting Help

Ask for help early β€” don't struggle silently

If something isn't working, raise your hand or call the instructor. Most issues are caused by simple wiring mistakes that take 30 seconds to fix but can waste 30 minutes if you debug alone.

Common issues and quick fixes:

Problem Likely Cause Fix
Board not detected by computer Wrong USB cable (charge-only) Use a data-capable USB-C cable
idf.py flash fails Board not in download mode Hold BOOT button, press RESET, release BOOT
No output on serial monitor Wrong baud rate Set to 115200 baud
Sensor returns garbage values Loose breadboard connection Push all wires firmly; check pull-up resistors
OLED shows nothing Wrong I2C address or wiring Run I2C bus scan; check SDA/SCL aren't swapped
LED doesn't light up Wrong polarity or missing resistor Flip LED; check resistor is in circuit
GPS won't get a fix Indoor environment Expected indoors β€” use simulated data
Board gets hot Short circuit on breadboard Disconnect USB immediately! Check for crossed wires
Code compiles but behaves wrong Logic error, not hardware Add ESP_LOGI debug prints to trace the issue

When to ask for help:

  • You've checked the wiring twice and it still doesn't work
  • The board gets unusually hot or smells of burning β€” disconnect USB first, then call the instructor
  • You're unsure about a connection β€” ask before powering on
  • A component looks damaged or behaves erratically
  • You can't find the right GPIO pin or I2C address