NodeMCU Pin Diagram (ESP8266 Dev Board)

Nodemcu Pin Diagram — circuit diagram showing component connections+5V VccARDUINOUNOIC / MCUR1R2Output LEDPin HeaderNodemcu Pin Diagram (Pinout)
NodeMCU Pin Diagram (ESP8266 Dev Board) — interactive diagram. Open it in the editor to customise components and wiring.

This is a free printable nodemcu pin diagram: download the diagram as SVG or open it and print to paper or PDF.

Full NodeMCU ESP8266 pinout reference covering GPIO to D-number mapping, 3.3 V logic levels, ADC0, boot-strap pins, and power rails.

The NodeMCU is a development board built around the Espressif ESP8266EX system-on-chip. The most common variants use the ESP-12E or ESP-12F module and expose the chip's GPIO through a 30-pin dual-inline layout (15 pins per side). Understanding the pin diagram requires recognising two numbering schemes that coexist on every diagram: the D-numbers silkscreened on the PCB (D0–D10, plus A0) and the underlying GPIO numbers used in firmware (GPIO0–GPIO16).

Critically, the ESP8266 operates at 3.3 V logic throughout. No GPIO pin is 5 V-tolerant. Applying 5 V directly to any GPIO, including through a sensor's data line, will permanently damage the chip. All external devices must either run at 3.3 V natively or use a level-shifter.

Key GPIO-to-D-number mappings: D0 = GPIO16, D1 = GPIO5, D2 = GPIO4, D3 = GPIO0, D4 = GPIO2, D5 = GPIO14, D6 = GPIO12, D7 = GPIO13, D8 = GPIO15, D9 = GPIO3 (UART RX), D10 = GPIO1 (UART TX).

Four pins have boot-strap functions that affect how the chip starts. GPIO0 (D3) must be HIGH (or floating) at power-on for normal boot from flash; pulling it LOW forces the chip into UART download mode for flashing. GPIO2 (D4) must be HIGH at boot; it also drives the on-board LED on many NodeMCU boards, active-low. GPIO15 (D8) must be LOW at boot; a pull-down resistor is already present on the ESP-12 module. GPIO16 (D0) is connected to the WAKE pin for deep-sleep wake-up via RST and cannot be used as a general interrupt pin.

The ADC pin A0 is the sole analogue input, with a full-scale range of 0–1.0 V on the bare ESP8266 chip. On most NodeMCU boards a resistor voltage divider extends this to approximately 0–3.3 V. Confirm the range of your specific board variant before connecting any analogue source.

Power pins: the VIN or VU pin accepts regulated 5 V and feeds the on-board AMS1117-3.3 regulator. The 3V3 pin provides regulated 3.3 V output, rated approximately 600 mA continuous from the AMS1117. Never power the 3V3 pin from an external 5 V source.

How to wire nodemcu pin diagram

  1. Identify your NodeMCU variant and module type NodeMCU boards are made in several versions (v1.0, v2, v3) by multiple manufacturers. Check the silkscreen on the ESP module itself (ESP-12E or ESP-12F) and on the main PCB. The GPIO-to-D mapping is consistent across variants, but USB-to-serial chip, physical width (0.9 inch vs 1.1 inch between pin rows), and voltage divider values may differ.
  2. Print or open the GPIO-to-D-number mapping table Work from a reliable pin diagram that shows both the silkscreen D-number and the underlying GPIO number simultaneously. Errors in this mapping are the single most common cause of firmware-to-hardware mismatches. Pin D0 = GPIO16 is a particularly common trap because the numbering does not follow a simple sequential pattern.
  3. Identify and avoid or manage boot-strap pins Mark GPIO0 (D3), GPIO2 (D4), GPIO15 (D8), and GPIO16 (D0) on your schematic before assigning peripherals. If a peripheral must connect to a boot-strap pin, add a series resistor (typically 10 kΩ) between the peripheral output and the pin so the on-board pull resistors can still dominate the boot-strap state at power-on.
  4. Check all peripheral supply voltages and logic levels List every sensor, display, and module in your project and record its supply voltage and logic level. Replace any 5 V-only peripheral with a 3.3 V equivalent, or add a level-shifter to its data lines. Do this before any wiring, not after.
  5. Calculate and add current-limiting resistors for GPIO loads For any LED or similar resistive load connected directly to a GPIO, calculate the required series resistor: R = (Vcc − Vforward) / I_target. Targeting 8–10 mA per LED keeps well within the GPIO current budget. For inductive loads (relays, motors), use a transistor or MOSFET driver stage with a flyback diode.
  6. Power the board correctly and measure voltages before connecting peripherals Apply 5 V to VIN (or connect via USB) and measure the 3V3 pin with a multimeter before connecting any peripheral. Confirm 3.3 V ± 0.1 V is present. A reading significantly below 3.3 V indicates a regulator problem, insufficient supply current from the USB source, or an existing short-circuit load.
  7. Test each GPIO individually in firmware before assembling the full circuit Upload a simple blink sketch to each GPIO you plan to use, confirm correct operation, then add peripherals one at a time. Connecting all peripherals simultaneously makes fault isolation very difficult if one peripheral causes unexpected behaviour at boot or during operation.

Specifications

Core SoCEspressif ESP8266EX
Logic level voltage3.3 V (NOT 5 V-tolerant)
GPIO count (usable without conflicts)Up to 11 (excluding boot-strap and UART pins)
ADC input range (bare chip)0–1.0 V
ADC input range (NodeMCU with on-board divider)Approximately 0–3.3 V (verify per board variant)
Maximum GPIO source/sink current (per pin)12 mA absolute maximum; 10 mA recommended
On-board 3.3 V regulator (AMS1117)~600 mA continuous output
Wi-Fi standardIEEE 802.11 b/g/n, 2.4 GHz

Safety warnings

Tools needed

Common mistakes

Troubleshooting

Board does not appear as a serial port and cannot be flashed
Cause: USB-to-serial bridge driver not installed, faulty USB cable (charge-only, no data lines), or wrong USB bridge chip variant requiring a different driver Fix: Identify the USB bridge chip on your board (CP2102, CH340G, CH9102X, etc.) and install the correct driver from the chip manufacturer. Test with a known-good data-capable USB cable. Confirm the port appears in Device Manager (Windows) or /dev/tty* (Linux/macOS) before attempting to flash.
Board resets unexpectedly during Wi-Fi operation
Cause: Insufficient supply current from the USB source; the ESP8266 Wi-Fi radio draws up to 350 mA in bursts, which cheap USB chargers or long thin USB cables cannot supply without voltage sag triggering the brown-out detector Fix: Use a high-quality USB power adapter rated at least 1 A on the 5 V rail, with a short heavy-gauge USB cable. Add a 100 µF capacitor across the 3V3 pin to buffer current bursts. If the problem persists, supply 3.3 V from a dedicated external regulator rated 1 A or more.
GPIO output is always LOW or always HIGH regardless of firmware
Cause: Conflicting boot-strap pull resistor, peripheral holding the pin in a fixed state, or GPIO configured as input by a library without the sketch changing it to output Fix: Disconnect all peripherals and test the pin with a multimeter in isolation. If the pin now responds correctly to firmware, reintroduce peripherals one at a time. Check for GPIO number mismatches in firmware (D-number entered where GPIO number expected).
ADC readings are erratic or always read maximum value
Cause: Input voltage exceeding the A0 pin maximum, poor power supply noise on the 3V3 rail, or attempting to use ADC while Wi-Fi is active (the ESP8266 ADC and Wi-Fi radio share hardware and cannot operate simultaneously in some SDK configurations) Fix: Verify the signal source voltage does not exceed the board's A0 maximum (measure with a multimeter). Use WiFi.mode(WIFI_OFF) before ADC readings if using ADC-only mode, or switch to the system ADC API that samples in between Wi-Fi activity if Wi-Fi must remain active.

Frequently asked questions

Are NodeMCU GPIO pins 5 V-tolerant?

No. The ESP8266 operates entirely at 3.3 V logic and no GPIO pin can safely accept 5 V signals. Connecting 5 V Arduino sensor outputs or 5 V logic directly to any NodeMCU GPIO pin risks permanent chip damage. Use a bi-directional level-shifter or a resistor voltage divider to bring 5 V signals down to 3.3 V before connecting.

Why does my NodeMCU fail to boot when D3 or D8 is connected to a peripheral?

D3 (GPIO0) and D8 (GPIO15) are boot-strap pins sampled at power-on. GPIO0 must be HIGH (not pulled LOW) for normal flash boot; GPIO15 must be LOW. Many peripherals pull these lines in a way that conflicts with the required boot state. Connect these pins to peripherals only through appropriate resistors or after confirming the peripheral does not affect the boot-strap voltage level.

What is the maximum current a single NodeMCU GPIO pin can source or sink?

The ESP8266 datasheet specifies an absolute maximum of 12 mA per GPIO pin and a total chip GPIO current budget of approximately 50 mA. In practice, keep individual pin loads below 10 mA with appropriate current-limiting resistors. Drive higher loads through a transistor, MOSFET, or relay rather than directly from the GPIO.

What is the analogue input voltage range on the A0 pin?

The bare ESP8266 ADC input (TOUT) accepts 0–1.0 V. Most NodeMCU boards include a resistor divider that extends the A0 range to approximately 0–3.3 V. Measure the actual divider resistors on your specific board to confirm the exact range before connecting a signal source. Exceeding the maximum input voltage will damage the ADC.

Can I use D9 and D10 as general-purpose GPIO?

D9 (GPIO3, UART RX) and D10 (GPIO1, UART TX) are used by the USB-serial interface for programming and Serial.print() debugging. You can reassign them to GPIO in firmware, but doing so disables the serial console and makes re-flashing require careful management of the boot-strap sequence. Reserve these pins for UART use unless you have a specific need and a reliable alternative programming method.

Related diagrams

Free electrical calculators

Edit this diagram free in the online editor