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

Pinout

38 pins · 2.54 mm pitch
View:
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

Start with these

10 pins with no boot or system involvement
IO21GPIO21IO22GPIO22IO23GPIO23IO19GPIO19IO18GPIO18IO32GPIO32IO33GPIO33IO25GPIO25IO26GPIO26IO27GPIO27

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

Fine - with a little care

sampled at boot or shared with debug/serial
PinLabelWhat to knowRole
LED_BUILTINGPIO2If driven HIGH on reset (while IO0 is LOW), selects an unsupported SDIO boot mode, causing boot failure.Strapping
IO5GPIO5Must be HIGH during boot; if pulled LOW at reset, alters SDIO slave timing and may prevent normal boot.Strapping
IO36GPIO36 (SENSOR_VP)Cannot be used as output; only suitable for input (e.g., analog read).Other
IO39GPIO39 (SENSOR_VN)Cannot be used as output; only suitable for input.Other
IO14MTMS (GPIO14)Used for JTAG debugging (TMS); driving it as GPIO may interfere with JTAG or produce spurious signals at boot.Other
IO12MTDI (GPIO12)Keep LOW during boot (internal PD); pulling HIGH at reset selects 1.8V flash mode, causing flash brownout if 3.3V flash is used.Strapping
IO13MTCK (GPIO13)Used for JTAG debugging (TCK); avoid using as GPIO if JTAG is needed.Other
IO15MTDO (GPIO15)Keep HIGH during boot (internal PU); if LOW on reset, bootloader log is silenced and boot mode may change.Strapping
IO4GPIO4Sampled at reset for boot config; should not be driven at boot (affects boot mode timing).Strapping
IO0GPIO0Must be HIGH during boot for normal startup; if held LOW on reset, forces flash programming mode.Strapping
IO34GPIO34Cannot be used as output (no drive capability); only suitable for analog/digital input.Other
IO35GPIO35Cannot be used as output; only suitable for input.Other

Only if you know the tricks

wired to flash or USB - expect a fight
PinLabelWhat to knowRole
D2GPIO9 (Flash SD2)Used by internal flash/PSRAM; typically not exposed on modules, avoid using as GPIO.Flash
D3GPIO10 (Flash SD3)Used by internal flash/PSRAM; typically not exposed on modules, avoid using as GPIO.Flash
CMDGPIO11 (Flash CMD)Used by internal flash (chip select/command); not available for general use.Flash
D1GPIO8 (Flash SD1)Used for internal flash/PSRAM data; not available for general GPIO.Flash
D0GPIO7 (Flash SD0)Used for internal flash/PSRAM data; not available for general GPIO.Flash
SCKGPIO6 (Flash SCK)Used for internal flash/PSRAM communication; not available for general GPIO.Flash
IO3U0RXD (GPIO3)Used for receiving data from USB-UART (programming); also pulled HIGH at boot for console communication, so using as GPIO can disrupt uploads.USB
IO1U0TXD (GPIO1)Connected to on-board USB-UART for uploading and logs; drives serial output at boot, so using as GPIO can disrupt programming or console.USB
IO16GPIO16Connected to internal PSRAM on PSRAM-enabled modules; not usable as GPIO on those modules.Flash
IO17GPIO17Connected to internal PSRAM on PSRAM-enabled modules; not usable as GPIO on those modules.Flash
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.
Pinout notes 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…

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. 12 of the exposed pins carry boot-time or system duties on the ESP32 (LED_BUILTIN, IO5, IO36 and 9 more).


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
Serial chip: CP2102. Not detected? Hold BOOT while plugging in.
2
Flash with your tool
Arduino IDE, PlatformIO, ESPHome or esptool - copy the settings on the right.
3
Verify it runs
The blink example uses GPIO21 - swap for your board's LED pin if different.
Tools → Board settings Copy
Board:            Nodemcu 32s
Flash Size:       4MB · DIO
Upload Speed:     921600

// blink
pinMode(21, OUTPUT);
digitalWrite(21, LOW);   // on (often inverted)
platformio.ini Copy
[env:nodemcu-32s]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
device.yaml Copy
esp32:
  board: esp32dev
  variant: nodemcu-32s
  framework:
    type: esp-idf

# blink - GPIO21
output:
  - platform: gpio
    pin: 21
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
shell Copy
esptool.py --chip esp32 --port /dev/ttyACM0 \
  write_flash 0x0 firmware.bin
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…

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
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 · 4
PWM
16 channels
Power
USB
Micro-USB
Serial
CP2102
Boot address
0x1000
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
DIO · DIO
Sketch · Data
1.25 MB · 320 KB
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