NodeMCU-32S

Breadboard-friendly ESP32 board with Wi-Fi and BLE - great for rapid prototyping, IoT applications, and Arduino-based development.

Popular Micro-USB
NodeMCU-32S board
48.26 × 25.4 mm
ESP32
MCU
240MHz
clock
4MB
flash
520KB
SRAM
32· 9 ADC
GPIO
BLE 4.2+ WiFi
radio
On this page

NodeMCU-32S Pinout

38 pins · 2.54 mm pitch
NodeMCU-32S pinout diagram
PinGPIOLabelsStatusCapabilitiesNotes
1-3V33.3Vpower-3.3V power output
2-ENcontrol-Chip enable / reset (active LOW)
3-GNDground-Ground connection
49D2GPIO9strapping-Connected to the module's SPI flash - do NOT use, the board will crash or fail to boot
510D3GPIO10strapping-Connected to the module's SPI flash - do NOT use, the board will crash or fail to boot
611CMDGPIO11strapping-Connected to the module's SPI flash - do NOT use, the board will crash or fail to boot
7-5V5V0power-5V power input for the board
8-GNDground-Ground connection
9-GNDground-Ground connection
108D1GPIO8strapping-Connected to the module's SPI flash - do NOT use, the board will crash or fail to boot
117D0GPIO7strapping-Connected to the module's SPI flash - do NOT use, the board will crash or fail to boot
126SCKGPIO6strapping-Connected to the module's SPI flash - do NOT use, the board will crash or fail to boot
132LED_BUILTINGPIO2strapping-On-board user LED (active-LOW)
143IO3GPIO3uartuartUART0 RX (USB serial)
151IO1GPIO1uartuartUART0 TX (USB serial)
1621IO21GPIO21safe-I²C SDA
1722IO22GPIO22safe-I²C SCL
185IO5GPIO5strappingspiVSPI CS / SS
1923IO23GPIO23safespiVSPI MOSI
2019IO19GPIO19safespiVSPI MISO
2118IO18GPIO18safespiVSPI SCK
2236IO36GPIO36strappingadcADC1 Channel 0 (SVP)
2339IO39GPIO39strappingadcADC1 Channel 3 (SVN)
2432IO32GPIO32safeadc · touchADC1 Channel 4 / Touch 9
2533IO33GPIO33safeadc · touchADC1 Channel 5 / Touch 8
2625IO25GPIO25safedacDAC1
2726IO26GPIO26safedacDAC2
2827IO27GPIO27safeadc · touchADC2 Channel 7 / Touch 7
2914IO14GPIO14strappingtouch · spiHSPI SCK / Touch 6
3012IO12GPIO12strappingtouch · spiHSPI MISO / Touch 5
3113IO13GPIO13strappingtouch · spiHSPI MOSI / Touch 4
3215IO15GPIO15strappingadcMTDO / ADC2 Channel 3
334IO4GPIO4strappingadc · touchTouch 0 / ADC2 Channel 0
3416IO16GPIO16strappinguartUART2 RX / CLK_OUT
3517IO17GPIO17strappinguartUART2 TX
360IO0GPIO0strappingtouchBOOT-strap / Touch 1 (keep HIGH at reset)
3734IO34GPIO34strappingadcADC1 Channel 6
3835IO35GPIO35strappingadcADC1 Channel 7
32 GPIOs broken out 10 free · 16 need care · 6 to avoid

Start with these

10 pins with no boot or system involvement
IO21IO22IO23IO19IO18IO32IO33IO25IO26IO27

Freely assignable - no strapping, flash, USB or JTAG duties. Ideal first picks for buttons, sensors and LEDs.

Fine - with a little care

16 pins · 14 things to know
LED_BUILTINGPIO2 Bootstrapping pin (must be low or floating at reset); internal pull-down. Strapping

If driven HIGH on reset (while IO0 is LOW), selects an unsupported SDIO boot mode, causing boot failure.

IO3 Default UART0 RX pin for USB-serial programming (console input). UART

Used for receiving data from USB-UART (programming); also pulled HIGH at boot for console communication, so using as GPIO can disrupt uploads.

IO1 Default UART0 TX pin for USB-serial programming and console. UART

Connected to on-board USB-UART for uploading and logs; drives serial output at boot, so using as GPIO can disrupt programming or console.

IO5 Bootstrapping pin; internal pull-up; VSPI CS0 (default SPI chip-select); acts as FSPIWP (flash write-protect) on internal-flash variants. Strapping

Must be HIGH during boot; if pulled LOW at reset, alters SDIO slave timing and may prevent normal boot.

IO36 Input-only GPIO (no output); ADC1 channel 0, Hall sensor VP. Other

Cannot be used as output; only suitable for input (e.g., analog read).

IO39IO35 Input-only GPIOs with ADC1 channels - no output driver Other

Cannot be used as output; only suitable for input.

  • IO39Input-only GPIO (no output); ADC1 channel 3, Hall sensor VN.
  • IO35Input-only GPIO (no output driver); ADC1 channel 7.
IO14 JTAG mode select pin (TMS); also HSPI CLK and PWM-capable GPIO. JTAG

Used for JTAG debugging (TMS); driving it as GPIO may interfere with JTAG or produce spurious signals at boot.

IO12 Bootstrapping pin; JTAG TDI; sets flash voltage (VDD_SDIO); also HSPIQ (flash data line). Strapping

Keep LOW during boot (internal PD); pulling HIGH at reset selects 1.8V flash mode, causing flash brownout if 3.3V flash is used.

IO13 JTAG clock pin (TCK); also ADC2 channel 4 / Touch4 input. JTAG

Used for JTAG debugging (TCK); avoid using as GPIO if JTAG is needed.

IO15 Bootstrapping pin; JTAG TDO; controls UART0 boot log output; also HSPICS0 (secondary SPI CS). Strapping

Keep HIGH during boot (internal PU); if LOW on reset, bootloader log is silenced and boot mode may change.

IO4 Bootstrapping pin; internal pull-down; also HSPIHD (flash data line) on modules with internal flash. Strapping

Sampled at reset for boot config; should not be driven at boot (affects boot mode timing).

IO16IO17 PSRAM chip select and clock on WROVER-class modules; in-package flash lines on ESP32-U4WDH. Both also carry UART2 PSRAM

Wired to the memory die on PSRAM-equipped modules (WROVER, PICO-V3-02) and on in-package-memory chip variants (U4WDH, D0WDRH2-V3); an ordinary GPIO on a plain WROOM-32.

  • IO16PSRAM CS# on WROVER-class modules and on ESP32-D0WDRH2-V3; in-package flash CS# on ESP32-U4WDH. Also UART2 RX.
  • IO17PSRAM clock on WROVER-class modules; in-package flash IO1/DO on ESP32-U4WDH. Also UART2 TX.
IO0 Bootstrapping pin (enter bootloader when low); internal pull-up. Strapping

Must be HIGH during boot for normal startup; if held LOW on reset, forces flash programming mode.

IO34 Input-only GPIO (no output driver); ADC1 channel 6. Other

Cannot be used as output (no drive capability); only suitable for analog/digital input.

Only if you know the tricks

6 pins · 4 things to know
D2GPIO9D3GPIO10 SPI flash/PSRAM data lines SD2 and SD3 (flash HOLD and WP) Flash

Used by internal flash/PSRAM; typically not exposed on modules, avoid using as GPIO.

  • D2Connected to SPI flash/PSRAM data 2 (SD2, flash HOLD).
  • D3Connected to SPI flash/PSRAM data 3 (SD3, flash WP).
CMDGPIO11 Connected to SPI flash command/CS (CMD/CS0). Flash

Used by internal flash (chip select/command); not available for general use.

D1GPIO8D0GPIO7 SPI flash data lines SD0 and SD1 Flash

Used for internal flash/PSRAM data; not available for general GPIO.

  • D1Connected to SPI flash data 1 (SD1).
  • D0Connected to SPI flash data 0 (SD0).
SCKGPIO6 Connected to SPI flash clock (SCK/CLK). Flash

Used for internal flash/PSRAM communication; not available for general GPIO.

These are recommendations, not hard rules - with the right pull-ups, timing and boot-state awareness most pins can be made to work. When in doubt, start green.

The NodeMCU-32S pinout brings out 38 pins at a 2.54 mm pitch - 32 usable GPIO alongside the 3V3, GND and 5V power rails.

On the analog side there are 9 ADC-capable pins for sensors and battery monitoring, 8 capacitive-touch inputs and 2 true DAC outputs.

If you want zero surprises, IO21, IO22, IO23, IO19 and 6 more are free of any such role - the safest first picks. 16 of the exposed pins carry boot-time or system duties on the ESP32 (LED_BUILTIN, IO3, IO1 and 13 more).

Pinout notes The NodeMCU-32S pinout gives you nearly every feature of the ESP32-WROOM-32 module in a breadboard-friendly format. Key power rails-VIN (5 V), 3V3, and…

The NodeMCU-32S pinout gives you nearly every feature of the ESP32-WROOM-32 module in a breadboard-friendly format. Key power rails-VIN (5 V), 3V3, and multiple GND pins-let you power the board itself or feed external sensors and actuators with ease.

For serial communication the board breaks out RX0 and TX0 (UART0, connected to the on-board CP2102 for USB programming) plus an extra pair, RX2 (GPIO16) and TX2 (GPIO17), for a second hardware UART. Default I²C lines are SDA (GPIO21) and SCL (GPIO22), while the default VSPI port maps to MOSI (GPIO23), MISO (GPIO19), SCK (GPIO18), and CS (GPIO5). An alternate HSPI bus (GPIO12-15) is available when you need multiple SPI devices.

On the analog side, GPIO32 - GPIO39 expose ADC1 channels, and several ADC2 channels appear on GPIO0, GPIO2, GPIO4, GPIO12-15, and GPIO25-27 (ADC2 is not usable while Wi-Fi is running). Two 8-bit DAC outputs live on GPIO25 and GPIO26, perfect for audio or reference-voltage generation. Many of these pads double as capacitive-touch inputs for sleek, button-free interfaces.

Every GPIO supports PWM for LED dimming or motor control, and special-function pins such as EN (reset) and BOOT (IO0) make flashing easy. Take note of bootstrapping pins GPIO0, GPIO2, and GPIO15; keep them in the proper state (usually pulled HIGH) during reset to ensure normal startup.

With plentiful digital I/O, rich analog capabilities, and multiple high-speed buses, the NodeMCU-32S pinout delivers the versatility needed for everything from simple sensor nodes to complex connected gadgets-all while staying compact enough for quick prototyping.

Getting started

flash your first firmware in ~2 minutes
Tool:
1
Connect over USB
Uses a CP2102 bridge - install the CP210x driver if no port appears. Not detected? Hold BOOT while plugging in.
2
Match & flash
Set the Tools options shown, then click Upload.
3
Verify it runs
GPIO21 toggles - wire an LED and resistor to it, or change the pin to your board's own LED.
Set these in Tools · leave everything else at default
Arduino IDE 2.x - Tools Copy
Board: "ESP32 Dev Module"
Flash Size: "4MB (32Mb)"
Flash Mode: "DIO"
Partition Scheme: "Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)" (default)
Upload Speed: "921600"
▸ every other Tools option - leave at default
Board: ESP32 Dev Module
Flash Size: 4MB (32Mb)
Flash Mode: DIO
Partition Scheme: Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32 Dev Module
blink.ino Copy
// toggle GPIO21 - wire an LED and resistor to it
void setup() {
  pinMode(21, OUTPUT);
}
void loop() {
  digitalWrite(21, HIGH); delay(500);
  digitalWrite(21, LOW);  delay(500);
}
board to selectesp32dev⧉ copy
platformio.ini Copy
[env:nodemcu-32s]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
Find it: PlatformIO Home ▸ Boards, search esp32dev - or type it after board =.
board to selectesp32dev⧉ copy
device.yaml Copy
esp32:
  board: esp32dev
  variant: esp32
  framework:
    type: esp-idf

# blink - GPIO21
output:
  - platform: gpio
    pin: 21
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
Find it: search ESPHome's board list for esp32dev (same ids as PlatformIO).
esptool doesn't pick board settings - a prebuilt .bin already has them baked in. This is just the raw flash command.
terminal Copy
esptool.py --chip esp32 --port /dev/ttyACM0 \
  --baud 921600 write_flash 0x1000 firmware.bin
--port = your /dev/tty* (macOS/Linux) or COMx (Windows).
Build details: sketch space 1310720 B · data 327680 B · DIO

Good to know

board-specific quirks worth 60 seconds
The name is older than the board illustration
The name is older than the board
NodeMCU started in 2014 as an open-source Lua firmware for the ESP8266, joined weeks later by an open-hardware devkit - the board that arguably made the ESP8266 a phenomenon. "NodeMCU" strictly names that firmware project, not a manufacturer. When the ESP32 launched, Ai-Thinker - maker of the ESP-12 modules on most original NodeMCUs - carried the familiar name and layout over to the NodeMCU-32S. For a generation of…

NodeMCU started in 2014 as an open-source Lua firmware for the ESP8266, joined weeks later by an open-hardware devkit - the board that arguably made the ESP8266 a phenomenon. "NodeMCU" strictly names that firmware project, not a manufacturer.

When the ESP32 launched, Ai-Thinker - maker of the ESP-12 modules on most original NodeMCUs - carried the familiar name and layout over to the NodeMCU-32S. For a generation of ESP8266 tinkerers this was the natural upgrade path, which made it one of the first ESP32 boards to go mainstream.

Despite the name, almost nobody runs Lua on these today - Arduino, ESPHome and MicroPython all work the same on this board as on any other ESP32. The name survives because the layout earned it.

Six pins you must never use illustration
Six pins you must never use
The main thing the 38-pin layout adds over the 30-pin DevKit V1 is also its main trap: it breaks out GPIO6-11 (labeled SCK, CMD, D0-D3), and those six pins are wired to the WROOM-32 module's internal SPI flash. They are not spare IO - drive them and the chip loses contact with its own program memory: crashes, boot loops, or a board that looks dead. They sit at the bottom of both pin rows, right where you'd naturally…

The main thing the 38-pin layout adds over the 30-pin DevKit V1 is also its main trap: it breaks out GPIO6-11 (labeled SCK, CMD, D0-D3), and those six pins are wired to the WROOM-32 module's internal SPI flash. They are not spare IO - drive them and the chip loses contact with its own program memory: crashes, boot loops, or a board that looks dead.

They sit at the bottom of both pin rows, right where you'd naturally keep wiring. Skip them and pretend the board has 32 pins - see Espressif's GPIO documentation.

A board that stopped booting after you wired it up is far more likely a strap-pin or flash-pin conflict than a dead board. Disconnect everything and flash again before binning it.

Micro-USB or USB-C - same board illustration
Micro-USB or USB-C - same board
Newer NodeMCU-32S-style boards increasingly ship with a USB-C connector instead of Micro-USB - sometimes still silkscreened NodeMCU-32S, sometimes sold as a nameless "ESP32 38-pin Type-C" DevKitC-style clone. There's no new official name and no functional difference: same module, same pinout, same code. What does quietly vary between revisions is the USB-serial chip - CP2102 on the original design, CH340 or CH9102…

Newer NodeMCU-32S-style boards increasingly ship with a USB-C connector instead of Micro-USB - sometimes still silkscreened NodeMCU-32S, sometimes sold as a nameless "ESP32 38-pin Type-C" DevKitC-style clone. There's no new official name and no functional difference: same module, same pinout, same code.

What does quietly vary between revisions is the USB-serial chip - CP2102 on the original design, CH340 or CH9102 on many newer clones. If the board isn't detected on first plug-in, identify that chip and install its driver; our CH340 vs CP2102 guide shows how to tell them apart.

Got an unbranded 38-pin board and not sure what it is? The 38-pin generic clone guide covers identifying the common variations.

Bench board, not battery board illustration
Bench board, not battery board
The ESP32 chip deep-sleeps at around 10 µA, but DevKit-style boards like this one measure around 5-10 mA in deep sleep - the linear regulator idles at several mA, and the USB-serial chip and power LED stay powered no matter what your firmware does. This measurement guide breaks the numbers down. At that draw an 18650 cell is dead in roughly a week of pure sleeping. Prototype here, then move battery…

The ESP32 chip deep-sleeps at around 10 µA, but DevKit-style boards like this one measure around 5-10 mA in deep sleep - the linear regulator idles at several mA, and the USB-serial chip and power LED stay powered no matter what your firmware does. This measurement guide breaks the numbers down.

At that draw an 18650 cell is dead in roughly a week of pure sleeping. Prototype here, then move battery projects to a bare module or a board built for low quiescent current.

Specifications

ESP32 · 48.26 × 25.4 mm · vs other ESP32 chips →
Compute
MCU
ESP32
Clock
240 MHz
SRAM · Flash
520 KB · 4MB
Radio
Wi-Fi
802.11 b/g/n
Bluetooth
4.2 LE
Antenna
PCB
I/O
GPIO · ADC
32 · 9
UART · I²C · SPI
3 · 2 · 2
PWM
16 channels
Power
USB
Micro-USB
Serial
CP2102
Boot address
0x1000
Electrical
Input
5V USB · VIN
Consumption
-
Regulator
-
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
DIO · DIO
Sketch · Data
1.25 MB · 320 KB

Dimensions

25.4 mm48.26 mm
48.26 × 25.4 mm · pin pitch 2.54 mm
The NodeMCU-32S uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates. Flash mode is DIO with DIO boot mode. The maximum sketch size is 1.25 MB with 320 KB available for data.

About this board

At its core is the ESP32 - a dual-core Xtensa with both Bluetooth Classic and BLE.

Expect to pay about $8.00 - less than the ~$20 most ESP32 boards go for.

32 GPIO are broken out - more than most ESP32 boards, so the pin budget is rarely the constraint.

Onboard you'll find EN/Boot buttons.


The NodeMCU-32S is one of the first ESP32 boards that went mainstream - and the name is the reason. It inherits it from the original NodeMCU project of 2014: Lua firmware plus an open-hardware devkit that made the ESP8266 famous. When the ESP32 arrived, Ai-Thinker carried the trusted name and layout over with the NodeMCU-32S, and thousands of ESP8266 users upgraded to it without a second thought.

Like every long-lived ESP32 board, the version you buy today is most likely an unbranded clone of Ai-Thinker's design - same ESP32-WROOM-32 module, same 38-pin layout. Newer units often swap the Micro-USB connector for USB-C and the CP2102 serial chip for a CH340 or CH9102; none of that changes how the board works, and this page applies to all of them.

Compared to the slimmer 30-pin DevKit V1, the 38-pin layout exposes extra GPIOs (and the six flash pins you must leave alone - see below). An on-board EN (reset) and BOOT button, auto-reset circuitry, and dual rows of pins make it a classic bench prototyping board: plug in, flash, wire up.

Where to buy

prices are typical street prices
NodeMCU-32S
NodeMCU-32S
$8.00per unit, typical
As an Amazon Associate, ESPboards earns from qualifying purchases.

Resources

Similar boards