board dev studio

Verified 2026-10

SparkFun Thing Plus - ESP32 WROOM (USB-C)

Feather-footprint ESP32-WROOM board with 16 MB flash, USB-C through a CH340C bridge, a Qwiic connector on a separately switched 3.3 V rail, a microSD slot on the same SPI lines as the header, a single-cell LiPo connector with an MCP73831 charger and a MAX17048 fuel gauge, and 21 GPIO on the two 0.1in headers - 3.3 V logic, not 5 V tolerant.

Place this board on a carrier in the editor →

Logic level3.3 V

Specs

MCUEspressif ESP32-WROOM-32E module (dual-core Xtensa LX6 up to 240 MHz, 520 KB SRAM, 448 KB ROM, 16 MB SPI flash, 2.4 GHz WiFi 802.11 b/g/n, Bluetooth Classic and BLE)
Clock240 MHz
Flash16 MB
RAM520 KB
I/O21 digital, 13 analog, 16 PWM

SparkFun's own counts for the header: 21 multifunctional GPIO, up to 13 12-bit ADC channels, 2 DAC, up to 16 PWM outputs and 8 capacitive-touch inputs. Only 20 of the 21 sit on the numbered header as GPIO - pads 10, 11, 12, 25, 26, 27 and 28 are USB, EN, battery, ground, no-connect, 3.3 V and reset - and four of the GPIO pads (A5, A4, A3, A2 = GPIO35/36/39/34) are input-only. GPIO0 goes to the BOOT button and is also the enable line for the Qwiic regulator, GPIO2 drives the WS2812, GPIO5 is the microSD chip select, GPIO13 drives the blue STAT LED, and GPIO1/GPIO3 are the CH340C's UART0 lines, which are not brought out to the header at all.

Pinout

28 pads, as the vendor numbers them.

#NameFunctionSignals
1SDAGPIO21 - I2C data. Feeds the Qwiic connector and the MAX17048 fuel gauge. No pull-up resistor on the board - the ESP32's internal pull-up is the only one unless the Qwiic chain supplies oneGPIO21, I2C SDA
2SCLGPIO22 - I2C clock. Same net as the Qwiic connector and the fuel gauge, and likewise no on-board pull-upGPIO22, I2C SCL
304GPIO14. Touch channel 6, ADC2 channel 6GPIO14, ADC2_CH6, Touch6
406GPIO32. ADC1 channel 4, touch channel 9GPIO32, ADC1_CH4, Touch9
508GPIO15. ADC2 channel 3, touch channel 3GPIO15, ADC2_CH3, Touch3
610GPIO33. ADC1 channel 5, touch channel 8GPIO33, ADC1_CH5, Touch8
711GPIO27. ADC2 channel 7, touch channel 7GPIO27, ADC2_CH7, Touch7
812GPIO12. ADC2 channel 5, touch channel 5. A strapping pin: it sets the flash voltage at reset, so do not hold it high or low during bootGPIO12, ADC2_CH5, Touch5, strapping pin
9LEDGPIO13 - drives the blue STAT LED through R4 (1k), anode side, so the LED is active HIGH. Also printed LED_BUILTIN on SparkFun's graphic. ADC2 channel 4, touch channel 4GPIO13, ADC2_CH4, Touch4, LED_BUILTIN
10VUSBUSB 5 V, the same net as the USB-C VBUS pins, the MCP73831 charger input and the 3.3 V regulators' VIN through the input diode and P-FET. It is a 5 V rail brought out, not a 5 V output to load5V, V_USB
11ENEnable for the 3.3 V regulator (XC6222 CE). Pulled up to VIN through R8 (10k), so the board runs unless this pad is pulled lowEN, regulator enable
12VBATBattery voltage, straight to the JST connector's positive pin and the MCP73831's battery pin - unfused and unswitched, so it is the battery node itselfVBAT, battery
13FREEGPIO4. ADC2 channel 0, touch channel 0GPIO4, ADC2_CH0, Touch0
14TXGPIO17 - UART1 TXGPIO17, UART1 TX
15RXGPIO16 - UART1 RXGPIO16, UART1 RX
16POCIGPIO19 - SPI MISO (VSPIQ), shared with the microSD slot's DAT0 lineGPIO19, SPI MISO, VSPIQ
17PICOGPIO23 - SPI MOSI (VSPID), shared with the microSD slot's CMD lineGPIO23, SPI MOSI, VSPID
18SCKGPIO18 - SPI clock (VSPICLK), shared with the microSD slot's CLK lineGPIO18, SPI SCK, VSPICLK
19A5GPIO35. ADC1 channel 7. Input only - GPIO34-39 have no output driverGPIO35, ADC1_CH7, input only
20A4GPIO36. ADC1 channel 0. Input onlyGPIO36, ADC1_CH0, input only
21A3GPIO39. ADC1 channel 3. Input onlyGPIO39, ADC1_CH3, input only
22A2GPIO34. ADC1 channel 6. Input onlyGPIO34, ADC1_CH6, input only
23A1GPIO25. ADC2 channel 8, DAC channel 1GPIO25, ADC2_CH8, DAC1
24A0GPIO26. ADC2 channel 9, DAC channel 2GPIO26, ADC2_CH9, DAC2
25GNDGroundGND
26NCNo connection. The pad is drilled and silkscreened NC but carries no net on the vendor's own board file, so nothing can be routed to it on a carrierNC
273V33.3 V from the main XC6222B331MR-G regulator, the same rail the ESP32 module, the microSD slot and the WS2812 run from. It is directly on the module's supply, so back-feeding it is back-feeding the module3.3V
28RESETModule enable (CHIP_PU / EN), pulled up through R2 (10k) and pulled low by the RST button, the CH340C's auto-reset transistor pair and this padRESET, EN, module enable

Buses

BusSignalsPinsVoltageNote
I2C ×2SDA, SCLSDA, SCL3.3 VGPIO21/GPIO22, on header pads 1-2, the Qwiic connector (J3) and the MAX17048 fuel gauge. SparkFun's board file shows no pull-up resistor anywhere on either line - the netlist ties SDA/SCL only to the module, the Qwiic connector, the fuel gauge and the two header pads - so the bus runs on the ESP32's internal pull-ups or whatever the Qwiic chain provides. A carrier that expects 2.2k on the host must add it, and two boards both relying on internal pull-ups will be weak. The Qwiic connector's 3.3 V is not the header's 3V3: it comes from a second XC6222B331MR-G (U5) whose enable is GPIO0, so Qwiic power is off until GPIO0 is driven high and off whenever the board is held in boot-button state.
SPI ×1SCK, PICO, POCISCK, PICO, POCI3.3 VVSPI: SCK on GPIO18 (pad 18), PICO/MOSI on GPIO23 (pad 17), POCI/MISO on GPIO19 (pad 16). The microSD slot hangs off the same three lines with its own chip select on GPIO5 (module pad 29, no header pad), so a card and an SPI peripheral share one bus and cannot be clocked independently.
UART ×1TX, RXTX, RX3.3 VUART1 on GPIO17 (pad 14) and GPIO16 (pad 15). The console UART (UART0) is elsewhere: the CH340C bridge is wired to the module's TXD0/RXD0 (GPIO1/GPIO3) with DTR/RTS driving an auto-reset transistor pair, and those two GPIO are not on the header.
USB ×1D+, D-5 VUSB-C receptacle through a CH340C USB-to-serial bridge - this ESP32 has no native USB, so the port is a 5 V input and a serial console, not a USB device interface. R9 and R10 are 5.1k CC pull-downs, so a C-to-C cable works.

I²C / bus addresses

AddressBusDeviceNote
0x36I2CMAX17048 fuel gaugeSilicon-fixed, nothing on the board straps it. Recorded here as the 7-bit address a bus scan reports; the MAX17048's own prose writes it as 0x6C write / 0x6D read, which is the 8-bit form with the R/W bit. It is on the same GPIO21/GPIO22 bus as the Qwiic connector, so a Qwiic device that sits at 0x36 will collide.

Power

InputUSB-C 5 V, or a single-cell LiPo on the 2-pin JST connector (J4), or 5 V onto the VUSB pad
Input range5 V USB on VUSB; the battery connects directly on VBAT. Both regulators take VIN, which is fed from VUSB through a diode and a P-FET (Q3) or from VBAT

The MCP73831 charger (U1) takes VUSB, charges VBAT and sets its current with R6 (2.0k) on PROG, which the charger's own datasheet formula (I = 1000 V / R_PROG) makes 500 mA; the yellow CHG LED is the charger's STAT output through R3 (1k). A MAX17048 fuel gauge hangs on SDA/SCL to report battery state. SparkFun publishes no board-level current figure, only the module's (2.5 uA deep sleep, 80 mA average, 380 mA WiFi peak), so no board draw is recorded here. Three solder jumpers: PWR (gates the red power LED through R34), CHG_LED (gates the yellow charge LED through R3) and SHLD (ties the USB-C shell to ground, bridged by default). USB-C is a 5 V input only - it cannot be a USB device port.

Outputs

RailRatingNote
3V33.3 V, 700 mA maxMain XC6222B331MR-G regulator (U3) feeding the ESP32 module, the microSD slot and the WS2812. 700 mA is SparkFun's figure for the regulator, not a measured board budget.
QWIIC_PWR3.3 VA second XC6222B331MR-G (U5) that exists only to feed the Qwiic connector's 3.3 V pin. Its enable is GPIO0, so it is off until code or the module drives GPIO0 high - a sensor on the Qwiic chain will not power up on reset by itself.

Notes

Pin numbers are the fab file's own J5 pad numbers in the THING_PLUS package - 1-12 one row, 13-28 the other - so they join to a pad rather than to a symbol, and as on the Thing Plus RP2350 the two rows run in opposite directions: pad 1 (SDA) and pad 13 (FREE) are at the same end, nearest the antenna. Silk labels on pads 3-8 are printed with leading zeros (04, 06, 08, 10, 11, 12) and are NOT the GPIO numbers: pad 3 is GPIO14, pad 4 GPIO32, pad 5 GPIO15, pad 6 GPIO33, pad 7 GPIO27, pad 8 GPIO12, per SparkFun's own graphical datasheet. Anyone reading '08' as GPIO8 will be wrong - GPIO8 does not come out at all. The board is 2.55 x 0.9 in (64.8 x 22.9 mm) with four 4-40 mounting holes. Buttons: BOOT on GPIO0 and RST on the module enable. LEDs: red PWR (jumper-gated), yellow CHG (charger STAT), blue STAT on GPIO13, and a WS2812 RGB LED on GPIO2 whose data-out is on test point TP2. Test points TP1-TP4 carry GPIO0, WS2812 DO, GPIO2 and GPIO5 (microSD CS). The fab file's module package is ESP-WROOM-32D-NARROW while the product page calls the module an ESP32-WROOM-32E; the pinout is the same but the two are not the same part number, so a footprint copied from this file is a 32D footprint. GPIO12 is a strapping pin (flash voltage) and GPIO0 is the boot strap, so a carrier that drives pad 8 or shorts GPIO0 will change how the board boots. GPIO34-39 are input-only, and the ESP32's ADC2 is unavailable while WiFi is active - on this board that hits pads 3-8 and A1/A0 (GPIO14, 32, 15, 33, 27, 12, 25, 26), which is most of the labelled analog pins, so the pins that keep working as ADC with WiFi on are A5, A4, A3 and A2 (GPIO35, 36, 39, 34).

Provenance

Every figure on this page was read from the 6 sources below and last checked on Oct 21, 2026.

Related boards