Arduino Nano ESP32 Pinout, Datasheet, Schematic [Ultimate Guide]

In this guide, you’ll find the Arduino Nano ESP32 pinout diagram (both Nano headers with the Arduino pin names and the ESP32-S3 GPIO numbers), the datasheet and schematic, and every pin group explained with its default pins and gotchas. Without further ado, let’s get right into it!

The Arduino Nano ESP32 (ABX00083) is the first Arduino board built on an ESP32. It packs u-blox’s NORA-W106 module with the ESP32-S3, a dual-core 240MHz Xtensa LX7 with Wi-Fi and Bluetooth LE, 16MB of flash and 8MB of PSRAM, into the classic Nano footprint with a USB-C port. It has 24 GPIO pins, all at 3.3v.


Arduino Nano ESP32 Pinout Diagram

Here is a detailed Arduino Nano ESP32 Pinout Diagram with colored labels and legends to help you easily identify the functionalities that each pin can perform. It shows both 15-pin headers (JP1, the analog side, and JP2, the digital side) with the Arduino pin names, the ESP32-S3 GPIO numbers, and every pin’s ADC, touch, UART, SPI, I2C, PWM and strapping functions.

Arduino Nano ESP32 pinout diagram with Arduino pin names, ESP32-S3 GPIO numbers, ADC, touch, UART, SPI, I2C, PWM and boot strapping pin functions
Arduino Nano ESP32 (ABX00083): headers JP1 (analog side) and JP2 (digital side)

Each row shows the header pin number, the Arduino pin name (D2, A4…), the ESP32-S3 GPIO number, and its functions, color-coded by peripheral. The ARDUINO column is the number the Arduino IDE uses in its default pin-numbering mode (A2 is D19, for example). The square symbol means every pin is 3.3v only, the PWM symbol means every I/O can output PWM, and the numbered badges point to the notes at the bottom of the diagram.

With the USB-C connector at the top, JP1 (left) runs from D13 (pin 1) down to VIN (pin 15), and JP2 (right) runs from D12 (pin 1) down to D1/TX (pin 15), following the numbering in Arduino’s datasheet. The two rows are 15.24mm (600 mil) apart, like every Nano, so the board fits a breadboard and most Nano sockets.

Buy an Arduino Nano ESP32: If you don’t have one yet, you can get the genuine Arduino board (ABX00083, with headers) from Amazon or AliExpress. It runs the Arduino core, MicroPython and ESP-IDF right out of the box.

Download Arduino Nano ESP32 Pinout Diagram (Full Resolution)

The Arduino Nano ESP32 pinout diagram (JP1 and JP2 headers) in full resolution (5120×2800 px WebP), in one ZIP file. Print it, zoom in, or keep it next to your bench. Please consider supporting my work if it helped you.


Arduino Nano ESP32 Datasheet

This development board is built around the ESP32-S3 SoC, inside u-blox’s NORA-W106-10B module. So the Arduino Nano ESP32 datasheet set has three parts: Arduino’s documents for the board, Espressif’s for the chip, and u-blox’s for the module. Here are the official documents you’ll need, linked to their original sources:

DocumentIDRevisionWhat You’ll Use It ForLink
Arduino Nano ESP32 datasheet (user manual)ABX00083Rev 12 (Oct 2026)Board specs, power options (VIN, VBUS, 3V3), pin current, header pin listsPDF
Arduino Nano ESP32 schematicABX00083 / ABX00092V0.3 (Jul 2023)The full board circuit (see the next section)PDF
Arduino Nano ESP32 full pinoutABX00083Dec 2023Arduino’s 4-page pin map, incl. the bottom test pads and the SJ1 jumperPDF
ESP32-S3 Series datasheetEspressifv2.2Pin functions (IO MUX, RTC, ADC, touch), strapping pins, electrical limitsPDF
ESP32-S3 technical reference manualEspressiflatestRegisters and how every peripheral and the GPIO matrix workPDF
ESP32-S3 Series SoC errataEspressifv1.3Silicon limitations (for example, no DMA on ADC2)Web
NORA-W10 series data sheetUBX-21036702R05 (Apr 2025)The module: antenna, RF, temperature range, PSRAMPDF

Which document do I need? The Arduino datasheet for the board’s power limits and header map, the schematic for what’s connected to each pin, the ESP32-S3 datasheet for pin functions and electrical limits, and the technical reference manual when you write register-level code. Arduino keeps all its board files on the Arduino Nano ESP32 product page, and its Nano ESP32 user manual (cheat sheet) has the core-specific details.


Arduino Nano ESP32 Schematic

The Arduino Nano ESP32 schematic is Arduino’s ABX00083 / ABX00092 drawing, version V0.3 (7 Nov 2023), shared by the boards with and without headers. It’s one sheet, so here is the full sheet followed by close-ups of each block; click a page to view it full screen.

Arduino Nano ESP32 schematic page 1: full sheet (ABX00083 V0.3)
Page 1 of 7 · Full Sheet
Arduino Nano ESP32 schematic page 2: USB-C connector, ESD protection and CC resistors (ABX00083 V0.3)
Page 2 of 7 · USB-C, ESD & CC Resistors
Arduino Nano ESP32 schematic page 3: MP2322 step-down converter and VIN input (ABX00083 V0.3)
Page 3 of 7 · MP2322 Buck Converter & VIN
Arduino Nano ESP32 schematic page 4: NORA-W106 (ESP32-S3) module and 32.768kHz crystal (ABX00083 V0.3)
Page 4 of 7 · NORA-W106 ESP32-S3 Module
Arduino Nano ESP32 schematic page 5: headers JP1/JP2 and reset button (ABX00083 V0.3)
Page 5 of 7 · Headers JP1/JP2 & Reset Button
Arduino Nano ESP32 schematic page 6: power LED, SCK LED and RGB LED (ABX00083 V0.3)
Page 6 of 7 · Power, SCK & RGB LEDs
Arduino Nano ESP32 schematic page 7: 16MB QSPI flash and bottom test points (ABX00083 V0.3)
Page 7 of 7 · QSPI Flash & Test Points
Page 1 of 4

Official source: the Arduino Nano ESP32 schematic V0.3 (PDF) on Arduino Docs. Here’s what to look at:

  • Power path: USB-C VBUS (net VUSB) and VIN (through the Schottky diode D2, PMEG6020) both feed the MP2322GQH step-down converter (U2), which makes the 3.3v rail for the module, the flash, the LEDs and the 3V3 pin. There’s no 5v regulator on the board.
  • SJ1: a closed solder jumper between the buck output and the 3.3v rail. Cutting it lets you run the board from a battery on the 3V3 pin (Arduino’s full pinout, page 4).
  • USB-C (J1): D+/D− go straight to the ESP32-S3’s own USB on GPIO19/GPIO20 through the PRTR5V0U2X ESD protection (D1), and CC1/CC2 have 5.1kΩ pull-downs, so any USB-C charger or port gives you 5v. There’s no USB-UART chip.
  • NORA-W106-10B (M1): the ESP32-S3R8 with 8MB of octal PSRAM inside. The 32.768kHz crystal (Y1) sits on GPIO15/GPIO16, and the 16MB GD25B128EWIGR QSPI flash (U3) is on the internal flash pins, so none of those are on the headers.
  • Headers: JP1 pin 3 (AREF on a classic Nano) is GPIO46 and JP1 pin 13 (RESET on a classic Nano) is GPIO0; the schematic notes that both are ESP32-S3 boot straps. D1/TX has the 499Ω series resistor R4, and RST has a 5.1kΩ pull-up (R3) and the reset button PB1.
  • LEDs: the green power LED (DL3) on 3.3v, the yellow SCK LED (DL2) driven by the 2N7002 MOSFET Q1 from GPIO48 (so it doesn’t load the SPI clock), and the common-anode RGB LED (DL1) on GPIO46 (red), GPIO0 (green) and GPIO45 (blue), each through 499Ω with a 976kΩ pull-up.
  • Test points (bottom): the JTAG pins GPIO39–GPIO42 (MTCK, MTDO, MTDI, MTMS), USB D+/D−, VUSB, 3V3, RESET and GPIO46, for debugging or factory programming.

Note: The schematic numbers JP2 from TX (pin 1) to MISO (pin 15), while the datasheet numbers it from D12 (pin 1) to D1/TX (pin 15); this article and the diagram follow the datasheet. The full pinout lists the RGB LED as D14–D16 on page 1 but swaps green and blue on page 3; the Arduino core says LED_GREEN = 15 and LED_BLUE = 16, so page 1 is right.


Arduino Nano ESP32 Specs

The Arduino Nano ESP32 is a Nano-size ESP32-S3 board from Arduino. Here are its specifications, including the board-level parts that chip-only spec lists usually skip.

Arduino Nano ESP32 development board (ABX00083) with the u-blox NORA-W106 ESP32-S3 module

Get an Arduino Nano ESP32: The genuine Arduino board is the one I recommend. Grab it from Amazon or AliExpress.

ItemArduino Nano ESP32
Moduleu-blox NORA-W106-10B (ESP32-S3R8, PCB antenna)
CPUDual-core 32-bit Xtensa LX7, up to 240MHz, plus ULP-RISC-V and ULP-FSM coprocessors
Memory512KB SRAM, 384KB ROM, 16KB RTC SRAM, 8MB octal PSRAM (in the module), 16MB QSPI flash (GD25B128EWIGR)
WirelessWi-Fi 4 (802.11 b/g/n, 2.4GHz) and Bluetooth LE 5
Logic level3.3v on every pin, not 5v tolerant (abs max 3.6v)
GPIO pins24 on the headers: D0–D13, A0–A7, B0, B1
Board supplyUSB-C 5v, or 6v–21v on VIN
3.3v regulatorMP2322GQH synchronous step-down converter (U2); no 5v regulator and no 5V pin
Pin current40mA source, 28mA sink per GPIO (Arduino datasheet)
Clocks40MHz crystal in the module, 32.768kHz crystal (Y1) on GPIO15/GPIO16
USB connectorUSB-C, wired to the ESP32-S3’s native USB (USB Serial/JTAG + OTG); no USB-UART chip
DebuggerBuilt-in USB Serial/JTAG over the USB-C cable; JTAG test pads on the bottom
User I/ORGB LED (GPIO46/0/45, active low), yellow LED on D13, green power LED, reset button
Form factorArduino Nano, 18 × 45mm, 2x 15-pin headers (castellated pads)
Order codesABX00083 (with headers), ABX00092 (without headers)
NoDAC, 5v-tolerant pins, 5V output pin (VBUS is 5v only on USB power)

Arduino Nano ESP32 Specifications Summary

  • The Arduino Nano ESP32 runs an ESP32-S3 at up to 240MHz (dual-core Xtensa LX7) with 512KB SRAM, 8MB PSRAM and 16MB flash.
  • It has 24 GPIOs on the headers (D0–D13, A0–A7, B0, B1), and every pin is 3.3v only: none of them is 5v tolerant.
  • The Arduino core numbers the pins By Arduino pin by default (D2 = 2, A0 = 17); By GPIO number (legacy) switches to raw ESP32-S3 GPIO numbers.
  • It has 16 ADC pins (12-bit): 10 on ADC1 (A0–A3, D2–D7), which work with Wi-Fi, and 6 on ADC2 (A4–A7, D8, D9), which can fail while Wi-Fi is on.
  • It has 14 capacitive touch pins (A0–A7, D2–D7) and no DAC.
  • All 24 I/O pins can output PWM (LEDC with 8 channels, plus 2x MCPWM).
  • Serial is USB CDC on the USB-C port; Serial0 is UART0 on D0 (RX) / D1 (TX); Serial1 has no default header pins.
  • The Arduino Wire pins are A4 (SDA) and A5 (SCL); SPI is D11 (COPI), D12 (CIPO), D13 (SCK) with D10 as CS.
  • Power it from USB-C (5v) or VIN (6v–21v). There’s no 5V pin: VBUS gives 5v only while USB powers the board.
  • B0 (GPIO46) and B1 (GPIO0) are boot strapping pins and drive the red and green RGB LED. B1 to GND at reset starts the ROM download mode.
  • Each GPIO can source 40mA and sink 28mA, and D1/TX has a 499Ω series resistor.

Arduino Nano ESP32 Peripherals: ESP32-S3 vs On the Headers

The ESP32-S3 routes almost every peripheral through its GPIO matrix, so UART, I2C, SPI, PWM, CAN and I2S can go to nearly any free pin. This table shows what the chip has and what you can actually reach on the Nano headers.

PeripheralESP32-S3On the Nano ESP32 Headers
GPIO45 GPIOs24 (D0–D13, A0–A7, B0, B1)
ADC2x 12-bit SAR ADC, 20 channels16 pins: 10 on ADC1 (A0–A3, D2–D7), 6 on ADC2 (A4–A7, D8, D9)
Touch14 capacitive touch padsall 14 (A0–A7, D2–D7)
DACnone–
UART3UART0 on D0/D1; UART1 and UART2 on any pin via the matrix (D9/D8 are UART1’s IO MUX pins)
SPI (general purpose)SPI2, SPI3Arduino SPI on D10–D13; a second bus on any pins
I2C2Arduino Wire on A4/A5; Wire1 on any pins
I2S2Arduino defaults D7 (SCK), D8 (FS), D9 (SD), D10 (SD in)
TWAI (CAN 2.0)1any pin, with an external CAN transceiver
PWMLEDC (8 channels), 2x MCPWMall 24 I/O pins
USBUSB OTG Full-Speed + USB Serial/JTAGon the USB-C connector only (GPIO19/GPIO20)
RMT, PCNT, LCD, camera, SD/MMCyesany free pins

Arduino Nano ESP32 Quick Pin Selection Guide

Not sure which pin to use? Here are the Arduino Nano ESP32 pins I’d pick first for each job, and why.

Use CaseRecommended PinsWhy
Serial to the PCUSB-C (Serial)USB CDC on the native USB; no adapter needed
Serial to a module (GPS, GSM…)D0 (RX), D1 (TX) as Serial0, or D9/D8 as Serial1UART0 is fixed on D0/D1; give Serial1 its pins in begin()
I2C sensors and displaysA4 (SDA), A5 (SCL)The Arduino Wire pins; add 4.7kΩ pull-ups if the module has none
SPI devicesD11 (COPI), D12 (CIPO), D13 (SCK), D10 (CS)The Arduino SPI pins; D13 also blinks the yellow LED
Analog inputs with Wi-Fi onA0, A1, A2, A3, D2–D7ADC1 pins keep working while Wi-Fi runs
PWM (LEDs, motors, servos)D2–D9Any pin works; these have no strapping or bus role
Touch buttonsA0–A3, D2–D7Touch pads that don’t clash with I2C
External interruptAny GPIO (D2–D9 first)Every ESP32-S3 GPIO can trigger an interrupt
On-board LEDsLED_BUILTIN (D13), LED_RED / LED_GREEN / LED_BLUEThe RGB LED is active low
Safest general GPIOD2–D7No strapping role, no board load, ADC1 + touch capable

Arduino Nano ESP32 Pins to Use With Caution

PinReasonWhat to Do
B1 (GPIO0)Boot strap: LOW at reset starts ROM download mode; also the green LEDDon’t pull it LOW at reset; use it as an output or a button input with care
B0 (GPIO46)Boot strap (must not be HIGH while GPIO0 is LOW at reset); also the red LEDDon’t pull it HIGH at reset; it also lights the red LED, so it’s best as an output
A2 (GPIO3)JTAG-source strap (only read if the eFuse is set)Safe for normal use; avoid strong pulls at reset
D1 / TX (GPIO43)499Ω series resistor on the boardUse it for UART only, not to drive LEDs or loads
D13 (GPIO48)SPI SCK and the yellow LED (via MOSFET)Fine as SCK; the LED blinks with SPI traffic
A4–A7, D8, D9ADC2 pins: reads can fail while Wi-Fi is onUse ADC1 pins for analog with Wi-Fi
All pins3.3v only, no 5v toleranceLevel-shift every 5v signal
VBUSOnly 5v when USB powers the boardDon’t count on it with VIN power

Arduino Nano ESP32 Pin Numbering: Arduino Pins vs ESP32-S3 GPIO Numbers

The Arduino Nano ESP32 has two pin-numbering modes in the Arduino IDE. By default (Tools > Pin Numbering > By Arduino pin), the numbers follow the Nano silkscreen: digitalWrite(2, HIGH) drives D2, which is GPIO5. In By GPIO number (legacy) mode, the same number means the raw ESP32-S3 GPIO, so 2 is GPIO2, which is A1.

Board PinArduino Number (Default)ESP32-S3 GPIO (Legacy Mode)Board PinArduino Number (Default)ESP32-S3 GPIO (Legacy Mode)
D0 / RX00GPIO44A017GPIO1
D1 / TX1GPIO43A118GPIO2
D22GPIO5A219GPIO3
D33GPIO6A320GPIO4
D44GPIO7A4 (SDA)21GPIO11
D55GPIO8A5 (SCL)22GPIO12
D66GPIO9A623GPIO13
D77GPIO10A724GPIO14
D88GPIO17B0 / LED_RED14GPIO46
D99GPIO18B1 / LED_GREEN15GPIO0
D10 (CS)10GPIO21LED_BLUE (no pin)16GPIO45
D11 (COPI)11GPIO38
D12 (CIPO)12GPIO47
D13 (SCK)13GPIO48

The safe habit is to always write the pin names ( D2, A0, LED_RED) instead of bare numbers. The core defines those constants for both modes (arduino_nano_nora variant), so your sketch drives the same pin either way.

Note: Libraries that talk to the ESP-IDF directly (OneWire/DS18B20, some Servo, LED strip and stepper libraries) expect GPIO numbers. In the default mode they can drive the wrong pin, which is the most common “half my pins don’t work” report on the Arduino forum. Switch to By GPIO number (legacy) for those sketches, or update the library (Arduino: Nano ESP32 pin setup). In arduino-cli, the board option is PinNumbers=byGPIONumber.


Arduino Nano ESP32 Pins Functions

The 30 header pins of the Arduino Nano ESP32 are divided into the following groups based on the hardware functionality they’re used for. Thanks to the ESP32-S3’s GPIO matrix, most pins belong to several groups at once.

We’ll discuss each pin group in the following sections one by one in more detail.


Arduino Nano ESP32 Power Pins

The Arduino Nano ESP32 is powered from the USB-C port (5v) or from 6v–21v on VIN. Both go into the MP2322GQH step-down converter, which makes the 3.3v rail. There’s no 5V pin: the VBUS pin gives 5v only while USB powers the board. The power pins are highlighted in red in the pinout diagram.

Arduino Nano ESP32 power pins (VIN, VBUS, 3V3, GND) on headers JP1 and JP2

PinHeader PinRangeNotes
VINJP1-156v–21v inThrough Schottky diode D2 into the buck converter (Arduino datasheet 11.3)
VBUSJP1-125v out (USB only)Straight from the USB-C connector; off when you power the board from VIN
3V3JP1-23.3v outBuck converter output, for sensors and modules; battery input if you cut SJ1
GNDJP1-14, JP2-120vAll grounds are common
RSTJP2-133.3v logicPull LOW to reset (5.1kΩ pull-up on the board)

The buck converter is efficient: Arduino quotes more than 90% at a 4.5v input, 85–90% at 12v and below 85% at 18v. So a 7.4v or 12v battery on VIN is a much better choice than it is on a classic Nano’s linear regulator. Don’t feed more than 5v into the USB-C port, and never more than 21v into VIN.

Note: The Nano ESP32 is the first Nano without a 5V pin. If you move a project from a classic Nano, any module wired to “5V” must now go to VBUS (USB power only) or to its own 5v supply. And every signal pin is 3.3v: a 5v sensor output needs a level shifter or a voltage divider.

For battery projects, the ESP32-S3 draws about 7µA in deep sleep and 240µA in light sleep (SoC only; the board’s LEDs and buck converter add to that).

Learn more in our ESP32 Sleep Modes & Power Consumption Guide.


Arduino Nano ESP32 GPIO Pins

The Arduino Nano ESP32 has 24 GPIO pins on its headers: D0–D13, A0–A7, B0 and B1. They all work at 3.3v, and none of them is 5v tolerant. A0–A7 are also digital pins 17–24 in the default numbering mode.

Arduino Nano ESP32 GPIO pins (D0-D13, A0-A7, B0, B1) with their ESP32-S3 GPIO numbers

Each GPIO can be an input (floating, pull-up or pull-down, about 45kΩ internal), a push-pull or open-drain output, or almost any peripheral through the GPIO matrix. Here are the limits from the Arduino and Espressif datasheets:

  • Logic level 3.3v; never apply more than 3.6v to any pin.
  • Up to 40mA source and 28mA sink per pin (at the strongest drive setting). The default drive strength is 20mA, and only 10mA on D8/D9 (GPIO17/GPIO18).
  • D1/TX has a 499Ω series resistor, so it can’t drive a load directly.
  • The pins you don’t see: GPIO15/16 (32.768kHz crystal), GPIO19/20 (USB), GPIO26–32 (flash), GPIO33–37 (PSRAM) and GPIO39–42 (JTAG pads on the bottom).

Note: The ESP32-S3 has no 5v-tolerant pins at all. Connecting a 5v Arduino module’s output straight to a Nano ESP32 pin can damage the chip, so use a level shifter (or a resistor divider for slow inputs).

Learn more in our ESP32 GPIO Tutorial.


Arduino Nano ESP32 Interrupt Pins

Every GPIO pin on the Arduino Nano ESP32 can be an external interrupt pin: all 24 of them support RISING, FALLING, CHANGE, LOW and HIGH triggers. In the Arduino core, attachInterrupt(digitalPinToInterrupt(D2), isr, FALLING) works on any of them.

The RTC GPIOs (A0–A7, B1, D2–D10) can also wake the ESP32-S3 from deep sleep (EXT0/EXT1 wake-up), and the touch pins can wake it with a touch.

Learn more in our ESP32 External Interrupts Tutorial.


Arduino Nano ESP32 ADC Pins

The Arduino Nano ESP32 has 16 ADC pins on two 12-bit SAR ADCs. ADC1 has 10 of them (A0–A3 and D2–D7) and keeps working with Wi-Fi on. ADC2 has the other 6 (A4–A7, D8, D9), and its reads can fail while Wi-Fi is running. The ADC pins are highlighted in green in the pinout diagram.

Arduino Nano ESP32 ADC pins (ADC1: A0-A3, D2-D7; ADC2: A4-A7, D8, D9)

PinGPIOADC ChannelWorks With Wi-Fi?PinGPIOADC ChannelWorks With Wi-Fi?
A0GPIO1ADC1_CH0YesD2GPIO5ADC1_CH4Yes
A1GPIO2ADC1_CH1YesD3GPIO6ADC1_CH5Yes
A2GPIO3ADC1_CH2YesD4GPIO7ADC1_CH6Yes
A3GPIO4ADC1_CH3YesD5GPIO8ADC1_CH7Yes
A4GPIO11ADC2_CH0Can failD6GPIO9ADC1_CH8Yes
A5GPIO12ADC2_CH1Can failD7GPIO10ADC1_CH9Yes
A6GPIO13ADC2_CH2Can failD8GPIO17ADC2_CH6Can fail
A7GPIO14ADC2_CH3Can failD9GPIO18ADC2_CH7Can fail

Why ADC2? On the ESP32-S3, the Wi-Fi driver also uses ADC2, so Espressif’s ADC driver says a read “may fail” with a timeout while Wi-Fi holds it. And the S3 errata (ADC-183) says ADC2’s DMA controller doesn’t work, so continuous (DMA) sampling is ADC1 only. analogRead() returns 0 to 4095 (12-bit), and with the default attenuation the datasheet’s accurate range ends at about 2.9v, so readings flatten out near the 3.3v top.

Note: Use A0–A3 or D2–D7 for analog sensors in any Wi-Fi or IoT project. A4/A5 are the default I2C pins too, so on the Arduino Nano ESP32 they’re a poor choice for analog in most projects anyway. Never apply more than 3.3v to an ADC pin; use a voltage divider for higher voltages.

There are so many sensors that we can read with the ADC pins, which include: potentiometers, LDRs, analog temperature sensors (LM35, NTC thermistors), soil moisture sensors, joysticks, current sensors, and much more.

Learn more in our ESP32 ADC Tutorial.

ESP32 ADC Analog Read Arduino Example Tutorial - Calibration And Filtering

Also Read

ESP32 ADC Tutorial

Arduino Nano ESP32 Touch Pins

The Arduino Nano ESP32 has 14 capacitive touch pins: A0–A7 (TOUCH1–4, TOUCH11–14) and D2–D7 (TOUCH5–10). Connect a wire, a copper pad or a piece of foil, and touchRead(D2) returns a value that rises when you touch it (on the ESP32-S3, the opposite of the classic ESP32). They can also wake the board from deep sleep.


Arduino Nano ESP32 PWM Pins

All 24 GPIO pins on the Arduino Nano ESP32 can output PWM. The ESP32-S3’s LEDC peripheral has 8 independent channels, and there are 2 MCPWM units for motor control, routed to any pin through the GPIO matrix. In the Arduino core, analogWrite(D5, 128) just works.

Arduino Nano ESP32 PWM pins: every GPIO (D0-D13, A0-A7, B0, B1) can output PWM

Arduino Nano ESP32 PWM Pins: D0–D13, A0–A7, B0 and B1 (8 LEDC channels at a time).

For more control, use the LEDC API: ledcAttach(D5, 5000, 10) sets 5kHz with 10-bit resolution, and ledcWrite(D5, 512) sets 50% duty. Higher frequencies leave fewer resolution bits. Since there are 8 LEDC channels, you can run up to 8 different PWM outputs at once.

There are so many things that we can control with PWM, which include: LED dimming, RGB LEDs, DC motor speed (with a driver), servo motors, buzzers, ESCs for brushless motors, and much more.

Learn more in our ESP32 PWM Tutorial.

ESP32 PWM Example Arduino Tutorial - ledcWrite AnalogWrite

Also Read

ESP32 PWM Tutorial


Arduino Nano ESP32 UART Pins

The Arduino Nano ESP32 has 3 hardware UARTs, plus the USB CDC port. Serial is the USB-C port (to the Serial Monitor), Serial0 is UART0 on D0 (RX) and D1 (TX), and Serial1/ Serial2 can go to any pins you choose. The UART pins are highlighted in blue in the pinout diagram.

Arduino Nano ESP32 UART pins (D0 RX0 GPIO44, D1 TX GPIO43, D9 RX1 GPIO18, D8 TX1 GPIO17)

Arduino Nano ESP32 Default UART Pins: D0 (RX) and D1 (TX) for Serial0.

PortArduino ObjectRX PinTX PinNote
USB CDCSerialUSB-CUSB-CSerial Monitor over the USB cable
UART0Serial0D0 (GPIO44)D1 (GPIO43)Fixed IO MUX pins; 499Ω resistor on TX
UART1Serial1D9 (GPIO18) suggestedD8 (GPIO17) suggestedNo default header pins: pass them in begin()
UART2Serial2any free pinany free pinThrough the GPIO matrix

The ESP32-S3 core’s default pins for UART1 are GPIO15/GPIO16, and on this board those are the 32.768kHz crystal pins, which aren’t on the headers. So always give Serial1 its pins. D9/D8 are UART1’s own IO MUX pins, and Arduino’s pinout labels them RX1/TX1:

Note: Use the pin constants (D9, D8) in begin(), not the numbers 9 and 8: the core maps the constants correctly in both pin-numbering modes. And remember the logic level: a 5v module’s TX needs a level shifter before it reaches a Nano ESP32 RX pin.

There are so many modules that we can interface with the UART pins, which include: GPS modules, GSM/LTE modules, fingerprint sensors, RS485 transceivers, DFPlayer Mini, other microcontrollers, and much more.

Learn more in our ESP32 Serial Print Tutorial.


Arduino Nano ESP32 I2C Pins

The Arduino Nano ESP32 has 2 I2C buses. The default Arduino Wire pins are A4 (SDA) and A5 (SCL), the same place as on every Nano. The second bus, Wire1, can use any free pins. The I2C pins are highlighted in yellow in the pinout diagram.

Arduino Nano ESP32 I2C pins (A4 SDA GPIO11, A5 SCL GPIO12)

Arduino Nano ESP32 Default I2C Pins: A4 (SDA) and A5 (SCL).

I2C BusArduino ObjectSDASCLNote
I2C0WireA4 (GPIO11)A5 (GPIO12)Default; most libraries assume it
I2C1Wire1any free pinany free pinFor example D4 (SDA) and D5 (SCL)

Note: There are no I2C pull-up resistors on the Nano ESP32, so add 4.7kΩ pull-ups to 3.3v (not 5v) unless your module already has them. A4 and A5 are also ADC2 pins, so you can’t use them for analog while the I2C bus is on them.

There are so many modules and sensors that we can interface with the I2C bus, which include: OLED displays (SSD1306), I2C LCDs, RTC modules (DS3231), IMUs (MPU6050), BME280 sensors, port expanders, and much more.

Learn more in our ESP32 I2C Tutorial.

ESP32 I2C Tutorial in Arduino IDE - Set I2C Pins - I2C Scanner - Multiple Device Addresses

Also Read

ESP32 I2C Tutorial


Arduino Nano ESP32 SPI Pins

The Arduino Nano ESP32 has 2 general-purpose SPI ports (SPI2 and SPI3). The default Arduino SPI pins are D11 (COPI), D12 (CIPO) and D13 (SCK), with D10 as CS, matching the classic Nano. The SPI pins are highlighted in pink in the pinout diagram.

Arduino Nano ESP32 SPI pins (D10 CS GPIO21, D11 COPI GPIO38, D12 CIPO GPIO47, D13 SCK GPIO48)

Arduino Nano ESP32 Default SPI Pins: D11 (COPI/MOSI), D12 (CIPO/MISO), D13 (SCK), and D10 (CS).

SignalPinGPIONote
SCKD13GPIO48Also LED_BUILTIN (yellow LED, through a MOSFET)
CIPO (MISO)D12GPIO47
COPI (MOSI)D11GPIO38
CS (SS)D10GPIO21Any GPIO can be an extra CS

The second SPI port can go to any free pins: create an SPIClass on the other host and call begin(sck, miso, mosi, cs) with the pin constants. The 16MB flash and the PSRAM use the chip’s separate memory SPI bus, so both SPI ports are free for you.

Note: The yellow LED on D13 blinks with every SPI transfer. That’s normal, and because a MOSFET drives the LED, it doesn’t slow down or load the SCK line.

There are so many modules that we can interface with the SPI bus, which include: TFT displays (ILI9341, ST7789), SD card modules, LoRa radios (SX1276), nRF24L01 radios, MAX7219 LED drivers, W5500 Ethernet modules, and much more.


Arduino Nano ESP32 I2S and CAN (TWAI) Pins

The Arduino Nano ESP32 has 2 I2S controllers for digital audio and 1 TWAI controller (CAN 2.0, no CAN FD). Both go through the GPIO matrix. The Arduino core’s default I2S pins are D7 (SCK), D8 (FS), D9 (SD) and D10 (SD in).

InterfaceDefault / Suggested PinsNote
I2S SCK (BCLK)D7 (GPIO10)Core default
I2S FS (WS / LRCLK)D8 (GPIO17)Core default
I2S SD (data out)D9 (GPIO18)Core default
I2S SD inD10 (GPIO21)Core default; clashes with SPI CS if you use both
CAN TX / RX (TWAI)any two free pins, for example D4 / D5Needs a 3.3v CAN transceiver (SN65HVD230 or similar)

I2S is how you connect I2S microphones (INMP441), DACs and amplifiers (MAX98357A, PCM5102). The TWAI controller talks to CAN buses in cars and industrial gear, but it needs an external transceiver, since the board has none.


Arduino Nano ESP32 USB Pins

The Arduino Nano ESP32’s USB-C connector is wired straight to the ESP32-S3’s native USB on GPIO19 (D−) and GPIO20 (D+). There’s no USB-UART chip: the same port does the uploads (DFU), the Serial port (CDC), debugging (USB Serial/JTAG), and USB device modes like HID keyboard and mouse.

SignalGPIOOn This Board
USB D−GPIO19USB-C connector only (not on the headers)
USB D+GPIO20USB-C connector only (not on the headers)
VBUS–VBUS pin (JP1-12) and the buck converter input

Because USB is handled by the ESP32-S3 itself, a sketch that crashes early or uses the USB pins wrongly can make the port disappear. That’s what the double-tap reset and the bootloader recovery in the next section are for.


Arduino Nano ESP32 Strapping and Boot Pins

The Arduino Nano ESP32 has 3 strapping pins on its headers: B1 (GPIO0), B0 (GPIO46) and A2 (GPIO3). The ESP32-S3 reads them at reset to pick the boot mode, so an external circuit that forces them LOW or HIGH at power-up can stop the board from booting. The fourth strap, GPIO45, is the blue RGB LED line.

Arduino Nano ESP32 strapping and boot pins (B0 GPIO46, B1 GPIO0, A2 GPIO3, RST)

PinGPIOStrapping RoleOn the Board
B1GPIO0LOW at reset = ROM download (serial/USB) boot976kΩ pull-up, green LED (499Ω)
B0GPIO46Must not be HIGH while GPIO0 is LOW at reset976kΩ pull-up, red LED (499Ω)
A2GPIO3JTAG source select (only if the eFuse is set)Free analog/touch pin
(blue LED)GPIO45VDD_SPI voltage select976kΩ pull-up (weaker than the internal pull-down)
RSTRESET_NReset5.1kΩ pull-up, RST button to GND

B0 and B1 sit exactly where a classic Nano has AREF and RESET. That’s why some Nano shields and I/O expansion boards that tie those positions to something can keep a Nano ESP32 from booting or being recognized: check what your shield does with AREF and RESET before you plug the board in.

Arduino Nano ESP32 Bootloader Recovery Steps

If your Arduino Nano ESP32 isn’t detected anymore (no COM port after uploading a sketch), use these two steps, in this order:

  1. Double-tap reset: press the RST button twice quickly, right after plugging the board in. The RGB LED starts fading, and the board stays in the Arduino bootloader (DFU), so you can upload a working sketch.
  2. ROM download mode (if the bootloader is damaged): short B1 to GND with a jumper wire, press RST, then remove the wire (the RGB LED turns green). In the Arduino IDE, select Tools > Programmer > Esptool, then Tools > Burn Bootloader. Press RST when it’s done, and upload a sketch as usual.

Arduino describes the same procedure in its Help Center article Reset the Arduino bootloader on the Nano ESP32.

Note: Debugging also runs over the USB-C cable: the ESP32-S3’s built-in USB Serial/JTAG works with OpenOCD in Arduino IDE 2 (Sketch > Optimize for Debugging, then Start Debugging). The JTAG pins GPIO39–42 are only on test pads under the board.


Arduino Nano ESP32 On-Board Features

Besides the headers, the Arduino Nano ESP32 has 3 LEDs (one of them RGB), a reset button, two crystals, and a solder jumper. Here’s what each one does.

PartPin / ConnectionWhat It Does
RGB LED (DL1)Red GPIO46 (B0), green GPIO0 (B1), blue GPIO45Common anode, active LOW: digitalWrite(LED_RED, LOW) turns red on
Yellow LED (DL2)D13 / GPIO48 via MOSFET Q1LED_BUILTIN, active HIGH; blinks with SPI SCK
Green power LED (DL3)3.3v railOn whenever 3.3v is present
Reset button (PB1)RESET_N to GNDOne press resets; a double-tap enters the bootloader
32.768kHz crystal (Y1)GPIO15 / GPIO16Low-power clock for the RTC
SJ1 (bottom)Buck output to the 3.3v railClosed by default; cut it to power the board from a battery on 3V3
NORA-W106 antennaEnd of the board opposite USB-CKeep metal and ground planes away from it

Here’s a first test that cycles the RGB LED and blinks the yellow LED. Note the inverted logic of the RGB LED:

Note: Arduino notes that some boards from the first production batch have the green and blue LEDs swapped. If blue lights when you expect green, that’s your board, not your code.


Getting Started With Arduino Nano ESP32

You can program the Arduino Nano ESP32 with the Arduino IDE, MicroPython, PlatformIO or Espressif’s ESP-IDF, all over the USB-C cable. No external programmer is needed.

  • Arduino IDE 2: in the Boards Manager, install “Arduino ESP32 Boards” (by Arduino), then select Arduino Nano ESP32. Uploads use DFU, so nothing needs to be pressed. Check Tools > Pin Numbering before you start (By Arduino pin is the default).
  • Espressif’s Arduino core: the board is also in Espressif’s “esp32” package as Arduino Nano ESP32, using the same arduino_nano_nora variant.
  • MicroPython: Arduino’s MicroPython Installer flashes it in one click; in MicroPython you use the GPIO numbers ( Pin(46) is B0).
  • PlatformIO: board ID arduino_nano_esp32, with the Arduino or ESP-IDF framework.
  • ESP-IDF: target esp32s3, with GPIO numbers everywhere.
Arduino NamePinDefault
SerialUSB-CUSB CDC to the Serial Monitor
Serial0D0 (RX), D1 (TX)UART0
WireA4 (SDA), A5 (SCL)I2C0
SPID11 / D12 / D13, SS = D10SPI2 (FSPI)
LED_BUILTIND13Yellow LED, active HIGH
LED_RED / LED_GREEN / LED_BLUEGPIO46 / GPIO0 / GPIO45RGB LED, active LOW

Since the Arduino Nano ESP32 runs the ESP32 Arduino core, almost every ESP32 tutorial applies to it: just remember the pin names. Wi-Fi and BLE work out of the box with the WiFi and BLE libraries.

Learn more in our ESP32 WiFi Tutorial.


Arduino Nano ESP32 Common Problems & Fixes

Why does my library drive the wrong pin (or only half my pins work)? It’s the pin-numbering mode. The default is By Arduino pin, but some libraries (OneWire, older ESP32Servo, LED strip and stepper libraries) use GPIO numbers. Switch to Tools > Pin Numbering > By GPIO number (legacy), or update the library, and always write pin names like D2 in your own code.

Why doesn’t Serial1 work? It has no default header pins: its core default (GPIO15/16) is the crystal on this board. Pass the pins: Serial1.begin(9600, SERIAL_8N1, D9, D8).

Why does analogRead() return 0 or garbage with Wi-Fi on? You’re on an ADC2 pin (A4–A7, D8, D9), which Wi-Fi shares. Move the sensor to an ADC1 pin: A0–A3 or D2–D7.

Why isn’t my Nano ESP32 detected after an upload? Double-tap the RST button to enter the bootloader and upload a working sketch. If that fails, short B1 to GND, press RST, and use Esptool + Burn Bootloader (see the recovery steps above).

Why won’t it boot on my Nano shield or I/O board? B0 and B1 are in the AREF and RESET positions of a classic Nano and are boot straps. A shield that pulls those positions LOW or HIGH can stop the boot. Check the shield’s AREF/RESET wiring.

Where is the 5V pin? There isn’t one. VBUS gives 5v only while USB powers the board. When you run from VIN, power your 5v modules from their own supply.

Why does the RGB LED turn on when I write LOW? It’s a common-anode LED wired to 3.3v, so it’s active LOW: digitalWrite(LED_RED, LOW) turns red on.


Arduino Nano ESP32 vs Arduino Nano vs Nano Every

The Arduino Nano ESP32 keeps the Nano footprint, but it’s a very different board from the classic 5v Nanos. Here’s how it compares:

FeatureArduino Nano ESP32Arduino Nano (classic)Arduino Nano Every
MCUESP32-S3 (NORA-W106)ATmega328PATmega4809
Clock240MHz, dual-core16MHz20MHz
Flash / RAM16MB / 512KB + 8MB PSRAM32KB / 2KB48KB / 6KB
Logic level3.3v5v5v
WirelessWi-Fi + Bluetooth LEnonenone
5V pinNo (VBUS on USB only)YesYes
USBUSB-C, nativeMini-USB, USB-UART chipMicro-USB, USB-UART chip
Pins 3/13 of the analog sideB0 / B1 (GPIO46 / GPIO0)AREF / RESETAREF / RESET

Pick the Arduino Nano ESP32 for anything connected (Wi-Fi, BLE, IoT dashboards) or anything that needs more speed and memory. Stay with a 5v Nano when your project is full of 5v modules and shields, because the Arduino Nano ESP32’s 3.3v pins would need level shifters. If you’re coming from the UNO, the Arduino UNO Pinout guide covers the 5v side of the family.


Arduino Nano ESP32 Pin Details

Here is every Arduino Nano ESP32 header pin in physical order, with its Arduino number, ESP32-S3 GPIO, main functions, all its IO MUX and analog functions, and a short description. With the USB-C connector at the top, JP1 is the left (analog) header and JP2 the right (digital) one; pin 1 of each is at the USB end.

Arduino Nano ESP32 JP1 Analog Header Pins

PinLabelArduino #GPIOMain FunctionsAll Alternate Functions5v TolerantDescription
JP1-1D1313GPIO48SPI SCK, LED_BUILTINSPICLK_N_DIFF, SUBSPICLK_N_DIFFNo (3.3v)The SPI SCK pin and LED_BUILTIN: it also drives the yellow LED through a MOSFET, so the LED flickers with SPI traffic.
JP1-23V3––3.3v out––3.3v output of the MP2322 buck converter, for powering sensors and modules.
JP1-3B014 (LED_RED)GPIO46Boot strap, red RGB LED–No (3.3v)GPIO46, a boot strapping pin and the red channel of the RGB LED; it sits where AREF is on other Nano boards, so keep shields from pulling it.
JP1-4A017GPIO1ADC1_CH0, TOUCH1, DTR aliasRTC_GPIO1, sar_i2c_sda_0, TOUCH1, ADC1_CH0No (3.3v)ADC1 channel 0 and touch pad 1; a safe analog input that works with Wi-Fi on.
JP1-5A118GPIO2ADC1_CH1, TOUCH2RTC_GPIO2, sar_i2c_scl_1, TOUCH2, ADC1_CH1No (3.3v)ADC1 channel 1 and touch pad 2; a safe analog input that works with Wi-Fi on.
JP1-6A219GPIO3ADC1_CH2, TOUCH3RTC_GPIO3, sar_i2c_sda_1, TOUCH3, ADC1_CH2No (3.3v)ADC1 channel 2 and touch pad 3; also the JTAG-source strapping pin (only used if that eFuse is set).
JP1-7A320GPIO4ADC1_CH3, TOUCH4RTC_GPIO4, TOUCH4, ADC1_CH3No (3.3v)ADC1 channel 3 and touch pad 4; a safe analog input that works with Wi-Fi on.
JP1-8A421GPIO11ADC2_CH0, TOUCH11, Wire SDAFSPIIO5, SUBSPID, FSPID, RTC_GPIO11, TOUCH11, ADC2_CH0No (3.3v)The default I2C SDA pin (Wire), plus ADC2 channel 0 and touch pad 11.
JP1-9A522GPIO12ADC2_CH1, TOUCH12, Wire SCLFSPIIO6, SUBSPICLK, FSPICLK, RTC_GPIO12, TOUCH12, ADC2_CH1No (3.3v)The default I2C SCL pin (Wire), plus ADC2 channel 1 and touch pad 12.
JP1-10A623GPIO13ADC2_CH2, TOUCH13FSPIIO7, SUBSPIQ, FSPIQ, RTC_GPIO13, TOUCH13, ADC2_CH2No (3.3v)ADC2 channel 2 and touch pad 13; analog reads can fail while Wi-Fi is on.
JP1-11A724GPIO14ADC2_CH3, TOUCH14FSPIDQS, SUBSPIWP, FSPIWP, RTC_GPIO14, TOUCH14, ADC2_CH3No (3.3v)ADC2 channel 3 and touch pad 14; analog reads can fail while Wi-Fi is on.
JP1-12VBUS––5v out––5v straight from the USB-C connector; it is only live when the board is powered over USB.
JP1-13B115 (LED_GREEN)GPIO0Boot strap, green RGB LEDRTC_GPIO0, sar_i2c_scl_0No (3.3v)GPIO0, the main boot strapping pin and the green channel of the RGB LED; short it to GND during reset for ROM download mode.
JP1-14GND–––––Ground.
JP1-15VIN––6v–21v in––External supply input, 6v to 21v, through a Schottky diode into the buck converter.

Arduino Nano ESP32 JP2 Digital Header Pins

PinLabelArduino #GPIOMain FunctionsAll Alternate Functions5v TolerantDescription
JP2-1D1212GPIO47SPI CIPO (MISO)SPICLK_P_DIFF, SUBSPICLK_P_DIFFNo (3.3v)The SPI CIPO (MISO) pin; a general-purpose GPIO otherwise.
JP2-2D1111GPIO38SPI COPI (MOSI)FSPIWP, SUBSPIWPNo (3.3v)The SPI COPI (MOSI) pin; a general-purpose GPIO otherwise.
JP2-3D1010GPIO21SPI CS (SS), I2S SD_INRTC_GPIO21No (3.3v)The SPI CS (SS) pin and the default I2S data-in pin; an RTC GPIO that can wake the chip from deep sleep.
JP2-4D99GPIO18ADC2_CH7, I2S SDU1RXD, CLK_OUT3, RTC_GPIO18, ADC2_CH7No (3.3v)The UART1 RX pin of the IO MUX (RX1 on Arduino’s pinout), ADC2 channel 7, and the default I2S data pin.
JP2-5D88GPIO17ADC2_CH6, I2S FSU1TXD, RTC_GPIO17, ADC2_CH6No (3.3v)The UART1 TX pin of the IO MUX (TX1 on Arduino’s pinout), ADC2 channel 6, and the default I2S frame-sync pin.
JP2-6D77GPIO10ADC1_CH9, TOUCH10, I2S SCKFSPIIO4, SUBSPICS0, FSPICS0, RTC_GPIO10, TOUCH10, ADC1_CH9No (3.3v)ADC1 channel 9 and touch pad 10; the default I2S clock (SCK) pin.
JP2-7D66GPIO9ADC1_CH8, TOUCH9SUBSPIHD, FSPIHD, RTC_GPIO9, TOUCH9, ADC1_CH8No (3.3v)ADC1 channel 8 and touch pad 9; a free general-purpose pin.
JP2-8D55GPIO8ADC1_CH7, TOUCH8SUBSPICS1, RTC_GPIO8, TOUCH8, ADC1_CH7No (3.3v)ADC1 channel 7 and touch pad 8; a free general-purpose pin.
JP2-9D44GPIO7ADC1_CH6, TOUCH7, DSR aliasRTC_GPIO7, TOUCH7, ADC1_CH6No (3.3v)ADC1 channel 6 and touch pad 7; a free general-purpose pin (DSR alias in the core).
JP2-10D33GPIO6ADC1_CH5, TOUCH6, CTS aliasRTC_GPIO6, TOUCH6, ADC1_CH5No (3.3v)ADC1 channel 5 and touch pad 6; a free general-purpose pin (CTS alias in the core).
JP2-11D22GPIO5ADC1_CH4, TOUCH5RTC_GPIO5, TOUCH5, ADC1_CH4No (3.3v)ADC1 channel 4 and touch pad 5; a free general-purpose pin.
JP2-12GND–––––Ground.
JP2-13RST––Reset (active low)––Reset input (active low) with a 5.1kΩ pull-up; pulling it LOW resets the ESP32-S3, like the RST button.
JP2-14D0 / RX00GPIO44Serial0 RXU0RXD, CLK_OUT2No (3.3v)UART0 RX (Serial0), the hardware serial port on the header; free when you use USB for Serial.
JP2-15D1 / TX1GPIO43Serial0 TXU0TXD, CLK_OUT1No (3.3v)UART0 TX (Serial0), with a 499Ω series resistor on the board, so don’t use it to drive LEDs or loads.

Wrap Up

To conclude this guide article, the Arduino Nano ESP32 is a very solid board for connected projects. It gives you a 240MHz dual-core ESP32-S3 with Wi-Fi, Bluetooth LE, 16MB of flash and 8MB of PSRAM in the familiar Nano footprint. Just remember the board-level gotchas: every pin is 3.3v only, there’s no 5V pin, B0/B1 are boot straps, ADC2 pins don’t mix well with Wi-Fi, and the IDE has two pin-numbering modes.

We hope it’s been a helpful guide to help you decide which pins to use for your project. For more boards, check out the Pinouts, Datasheets & Schematic Diagrams Library. Follow this ESP32 Series of Tutorials to learn more about programming ESP32 boards with the Arduino core.

If you’re just getting started with ESP32, you need to check out the ESP32 Getting Started Ultimate Guide below.

Getting Started With ESP32 Programming Tutorials

The complete beginner’s guide to ESP32 programming with the Arduino IDE: installing the core, your first project, and the ESP32 tutorials series step by step.

Share This Page With Your Network!
Join Our +25,000 Newsletter Subscribers!

Stay Updated With All New Content Releases. You Also Get Occasional FREE Coupon Codes For Courses & Other Stuff!

Photo of author
Author
Embedded systems engineer with several years of experience in embedded software and hardware design. I work as an embedded SW engineer in the Automotive & e-Mobility industry. However, I still do Hardware design and SW development for DSP, Control Systems, Robotics, AI/ML, and other fields I'm passionate about.
I love reading, writing, creating projects, and teaching. A reader by day and a writer by night, it's my lifestyle. I believe that the combination of brilliant minds, bold ideas, and a complete disregard for what is possible, can and will change the world! I will be there when it happens, will you?

Leave a Comment