Loading the figure…
Wi-Fi, Bluetooth LE and two 240 MHz cores on a 3.3 V breadboard board
Each lesson runs your own code on the board. Finish its checks to tick it off.
Build the board in the right order, then power it up and check it, as on the bench.
0 of 11 stepsStart from the black two-layer board with nothing on it. Every part goes back in the order a factory uses.
Each fault really happens in the simulation. Trigger one, watch the figure, then read why.
Espressif's own ESP32-S3 board: an ESP32-S3-WROOM-1 module (dual-core Xtensa LX7 at 240 MHz, 512 KB SRAM, 8 MB flash, 8 MB PSRAM, Wi-Fi and Bluetooth 5 LE) on a 25.4 x 62.7 mm board with two Micro-USB ports. The UART port goes through a CP2102N bridge to UART0, which is where uploads and Serial live by default; the USB port is the chip's own full-speed USB on GPIO19/20. An SGM2212 regulator makes 3.3 V from USB, the red D5 shows that 3.3 V is up, and an addressable RGB LED sits on GPIO38 (GPIO48 on the older v1.0). Every GPIO is 3.3 V only: never feed it 5 V.
| Header | Pin | Name | Functions | Level | Max current | Notes |
|---|---|---|---|---|---|---|
| J1 | 1 | 3V3 | – | 3.3 V | – | 3.3 V out from the regulator (up to about 800 mA minus what the board uses), or a 3.3 V input when there is no USB. |
| J1 | 2 | 3V3 | – | 3.3 V | – | |
| J1 | 3 | RST | CHIP_PU, EN | 3.3 V | – | EN (CHIP_PU). Pulled up by R5 (10 kΩ) with a 1 µF delay on C6. Pull it low to hold the chip in reset; RESET does the same. |
| J1 | 4 | 4 | RTC_GPIO4, TOUCH4, ADC1_CH3 | 3.3 V | 20 mA | Used by the lessons for the LED (with 330 Ω). ADC1 channel, works while Wi-Fi is on, and a touch pad. |
| J1 | 5 | 5 | RTC_GPIO5, TOUCH5, ADC1_CH4 | 3.3 V | 20 mA | |
| J1 | 6 | 6 | RTC_GPIO6, TOUCH6, ADC1_CH5 | 3.3 V | 20 mA | |
| J1 | 7 | 7 | RTC_GPIO7, TOUCH7, ADC1_CH6 | 3.3 V | 20 mA | |
| J1 | 8 | 15 | RTC_GPIO15, U0RTS, ADC2_CH4, XTAL_32K_P | 3.3 V | 20 mA | |
| J1 | 9 | 16 | RTC_GPIO16, U0CTS, ADC2_CH5, XTAL_32K_N | 3.3 V | 20 mA | |
| J1 | 10 | 17 | RTC_GPIO17, U1TXD, ADC2_CH6 | 3.3 V | 20 mA | |
| J1 | 11 | 18 | RTC_GPIO18, U1RXD, ADC2_CH7, CLK_OUT3 | 3.3 V | 20 mA | |
| J1 | 12 | 8 | RTC_GPIO8, TOUCH8, ADC1_CH7, SUBSPICS1, I2C SDA (Arduino default) | 3.3 V | 20 mA | Arduino's default I2C SDA (Wire.begin(8, 9)). |
| J1 | 13 | 3 | RTC_GPIO3, TOUCH3, ADC1_CH2, Strapping pin | 3.3 V | 20 mA | Strapping pin (JTAG source select). Leave it floating at reset. |
| J1 | 14 | 46 | GPIO46, Strapping pin | 3.3 V | 20 mA | Strapping pin. Must be low at reset for download mode; never hold it high while you upload. |
| J1 | 15 | 9 | RTC_GPIO9, TOUCH9, ADC1_CH8, FSPIHD, SUBSPIHD, I2C SCL (Arduino default) | 3.3 V | 20 mA | |
| J1 | 16 | 10 | RTC_GPIO10, TOUCH10, ADC1_CH9, FSPICS0, FSPIIO4, SUBSPICS0, SPI SS (Arduino default) | 3.3 V | 20 mA | |
| J1 | 17 | 11 | RTC_GPIO11, TOUCH11, ADC2_CH0, FSPID, FSPIIO5, SUBSPID, SPI MOSI (Arduino default) | 3.3 V | 20 mA | |
| J1 | 18 | 12 | RTC_GPIO12, TOUCH12, ADC2_CH1, FSPICLK, FSPIIO6, SUBSPICLK, SPI SCK (Arduino default) | 3.3 V | 20 mA | |
| J1 | 19 | 13 | RTC_GPIO13, TOUCH13, ADC2_CH2, FSPIQ, FSPIIO7, SUBSPIQ, SPI MISO (Arduino default) | 3.3 V | 20 mA | |
| J1 | 20 | 14 | RTC_GPIO14, TOUCH14, ADC2_CH3, FSPIWP, FSPIDQS, SUBSPIWP | 3.3 V | 20 mA | |
| J1 | 21 | 5V | – | 5 V | – | VCC_5V: about 4.6 V out from USB after the Schottkys, or a 5 V input with no protection. |
| J1 | 22 | G | – | – | – | |
| J3 | 1 | G | – | – | – | |
| J3 | 2 | TX | U0TXD, CLK_OUT1 | 3.3 V | 20 mA | UART0 TX, wired to the CP2102N. Serial prints come out here; leave it free. |
| J3 | 3 | RX | U0RXD, CLK_OUT2 | 3.3 V | 20 mA | UART0 RX from the CP2102N. Uploads come in here; leave it free. |
| J3 | 4 | 1 | RTC_GPIO1, TOUCH1, ADC1_CH0 | 3.3 V | 20 mA | |
| J3 | 5 | 2 | RTC_GPIO2, TOUCH2, ADC1_CH1 | 3.3 V | 20 mA | |
| J3 | 6 | 42 | MTMS | 3.3 V | 20 mA | |
| J3 | 7 | 41 | MTDI, CLK_OUT1 | 3.3 V | 20 mA | |
| J3 | 8 | 40 | MTDO, CLK_OUT2 | 3.3 V | 20 mA | |
| J3 | 9 | 39 | MTCK, CLK_OUT3, SUBSPICS1 | 3.3 V | 20 mA | |
| J3 | 10 | 38 | FSPIWP, SUBSPIWP, RGB LED data (v1.1) | 3.3 V | 20 mA | Drives the RGB LED (WS2812 data) on v1.1. Usable as a GPIO, but the LED will react. |
| J3 | 11 | 37 | SPIDQS, FSPIQ, SUBSPIQ | 3.3 V | – | GPIO37 is printed on the header, but on this N8R8 module it is wired to the octal PSRAM. Using it crashes the board. |
| J3 | 12 | 36 | SPIIO7, FSPICLK, SUBSPICLK | 3.3 V | – | GPIO36 is printed on the header, but on this N8R8 module it is wired to the octal PSRAM. Using it crashes the board. |
| J3 | 13 | 35 | SPIIO6, FSPID, SUBSPID | 3.3 V | – | GPIO35 is printed on the header, but on this N8R8 module it is wired to the octal PSRAM. Using it crashes the board. |
| J3 | 14 | 0 | RTC_GPIO0, BOOT button, Strapping pin | 3.3 V | 20 mA | Strapping pin with the BOOT button to GND. High at reset boots your sketch, low enters download mode. Safe to read as a button after boot. |
| J3 | 15 | 45 | GPIO45, Strapping pin | 3.3 V | 20 mA | Strapping pin (flash voltage select). Keep it low or floating at reset. |
| J3 | 16 | 48 | SPICLK_N, SUBSPICLK_N_DIFF, RGB LED data (v1.0) | 3.3 V | 20 mA | RGB LED data on v1.0 boards only. Runs at 1.8 V on modules with 1.8 V PSRAM. |
| J3 | 17 | 47 | SPICLK_P, SUBSPICLK_P_DIFF | 3.3 V | 20 mA | Runs at 1.8 V on modules with 1.8 V PSRAM; 3.3 V on this N8R8. |
| J3 | 18 | 21 | RTC_GPIO21 | 3.3 V | 20 mA | |
| J3 | 19 | 20 | RTC_GPIO20, U1CTS, ADC2_CH9, CLK_OUT1, USB_D+ | 3.3 V | 20 mA | USB D+ of the USB port. Using it as a GPIO kills the native USB connection. |
| J3 | 20 | 19 | RTC_GPIO19, U1RTS, ADC2_CH8, CLK_OUT2, USB_D- | 3.3 V | 20 mA | USB D− of the USB port. Using it as a GPIO kills the native USB connection. |
| J3 | 21 | G | – | – | – | |
| J3 | 22 | G | – | – | – |
Sensors and actuators this board drives, with the real connections.
Any free GPIO through a 330 Ω resistor: (3.3 − 2.0) V / 330 Ω is about 4 mA, well inside the 20 mA a pin gives by default.
| Part pin | Board pin |
|---|---|
| A (through 330 Ω) | 4Wire colour orange |
| K | GWire colour black |
Button between GPIO5 and G with pinMode(5, INPUT_PULLUP): it reads LOW when pressed. Avoid GPIO0, 3, 45 and 46 for buttons that might be held at power-up.
| Part pin | Board pin |
|---|---|
| 1 | 5Wire colour yellow |
| 2 | GWire colour black |
Ends to 3V3 and G, wiper to GPIO1 (ADC1). analogRead() gives 0-4095, analogReadMilliVolts() the calibrated voltage.
| Part pin | Board pin |
|---|---|
| 1 | 3V3Wire colour red |
| wiper | 1Wire colour green |
| 3 | GWire colour black |
Use ADC1 pins (GPIO1-10) when Wi-Fi is on: ADC2 (GPIO11-20) cannot be read while the radio runs. Never connect the ends to 5V.
LDR from 3V3 to GPIO2 and 10 kΩ from GPIO2 to G: more light, higher reading.
| Part pin | Board pin |
|---|---|
| LDR leg 1 | 3V3Wire colour red |
| LDR leg 2 + 10 kΩ to G | 2Wire colour green |
| 10 kΩ | GWire colour black |
Signal on GPIO18 at 50 Hz (ledcAttach(18, 50, 14) or the ESP32Servo library). The 3.3 V signal is enough for the SG90.
| Part pin | Board pin |
|---|---|
| brown (GND) | GWire colour brown |
| red (V+) | 5VWire colour red |
| orange (signal) | 18Wire colour orange |
Power the servo from the 5V pin only for one small servo on a good USB port; its start-up current can brown out the board. Bigger loads need their own supply with a shared ground.
TRIG on GPIO5, ECHO on GPIO6, VCC on 5V.
| Part pin | Board pin |
|---|---|
| VCC | 5VWire colour red |
| TRIG | 5Wire colour yellow |
| ECHO (through 1 kΩ / 2 kΩ divider) | 6Wire colour green |
| GND | GWire colour black |
ECHO is a 5 V signal: put a 1 kΩ / 2 kΩ divider in front of GPIO6 (about 3.3 V) or use a 3.3 V sensor such as the HC-SR04P. Straight 5 V damages the pin.
I2C on SDA GPIO8 and SCL GPIO9 with Wire.begin(8, 9); address 0x68. The breakout's regulator runs happily from 3V3.
| Part pin | Board pin |
|---|---|
| VCC | 3V3Wire colour red |
| GND | GWire colour black |
| SDA | 8Wire colour blue |
| SCL | 9Wire colour yellow |
128 x 64 OLED on I2C (GPIO8, GPIO9), address 0x3C, powered from 3V3.
| Part pin | Board pin |
|---|---|
| VCC | 3V3Wire colour red |
| GND | GWire colour black |
| SDA | 8Wire colour blue |
| SCL | 9Wire colour yellow |
Passive buzzer between GPIO7 and G, driven with tone(7, 440) or ledcWriteTone().
| Part pin | Board pin |
|---|---|
| + | 7Wire colour orange |
| − | GWire colour black |
Works from 2.7 V, so 3V3 is fine. Read GPIO1 with analogReadMilliVolts(1): °C = (mV − 500) / 10.
| Part pin | Board pin |
|---|---|
| +Vs | 3V3Wire colour red |
| Vout | 1Wire colour green |
| GND | GWire colour black |