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)¶
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)¶
Potentiometer Circuit (Module 2, 3)¶
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