Arduino Nano ESP32 Pinout: ESP32-S3 GPIOs, USB, ADC, SPI and I2C

Arduino Nano ESP32 pinout guide: ESP32-S3 GPIO mapping, Arduino vs raw GPIO numbering, USB-C, 12-bit ADC, SPI, I2C, UART, PWM, RGB LED, boot pins, 3.3 V logic, PSRAM and 16 MB Flash.

The Arduino Nano ESP32 is a native ESP32-S3 development board in the familiar Arduino Nano form factor.

Unlike the UNO R4 WiFi, where an ESP32-S3 acts mainly as a connectivity coprocessor, the Nano ESP32 runs your application directly on the ESP32-S3.

The board combines:

  • dual-core Xtensa LX7 CPU up to 240 MHz;
  • 512 kB internal SRAM;
  • 8 MB PSRAM;
  • 16 MB external Flash;
  • 2.4 GHz Wi-Fi 4;
  • Bluetooth LE 5.0;
  • native USB-C;
  • eight analog inputs;
  • SPI, I²C, UART, I²S and TWAI/CAN;
  • ESP-NOW;
  • MicroPython support;
  • Arduino Cloud support.

The most important pinout detail is that Nano ESP32 uses Arduino Nano pin names that do not match the raw ESP32-S3 GPIO numbers.

For example:

This guide maps the Arduino names to the physical ESP32-S3 GPIOs and explains the default UART, SPI, I²C, ADC, USB, boot and LED connections.

Arduino Nano ESP32 Specifications

Feature Arduino Nano ESP32
Main module u-blox NORA-W106-10B
SoC Espressif ESP32-S3
CPU Dual-core 32-bit Xtensa LX7
Maximum CPU frequency 240 MHz
Internal SRAM 512 kB
RTC SRAM 16 kB total RTC-domain memory
PSRAM 8 MB Octal SPI
External Flash 16 MB QSPI
Operating voltage 3.3 V
Digital pins 14 standard, 21 including analog pins
Analog inputs 8
ADC resolution 12-bit SAR hardware
DAC No true voltage DAC
Wi-Fi 2.4 GHz 802.11 b/g/n
Bluetooth Bluetooth LE 5.0
USB Native USB-C
SPI default D10-D13
I²C default A4 SDA, A5 SCL
UART default D0 RX, D1 TX
CAN/TWAI Classic CAN controller, flexible GPIO assignment
VIN 6-21 V recommended

Complete Nano ESP32 Arduino-to-GPIO Mapping

Board label Arduino pin number ESP32-S3 GPIO Main functions
D0 / RX 0 GPIO44 UART RX, GPIO
D1 / TX 1 GPIO43 UART TX, GPIO
D2 2 GPIO5 GPIO
D3 3 GPIO6 GPIO
D4 4 GPIO7 GPIO
D5 5 GPIO8 GPIO
D6 6 GPIO9 GPIO
D7 7 GPIO10 GPIO
D8 8 GPIO17 GPIO
D9 9 GPIO18 GPIO
D10 10 GPIO21 SPI CS by default, GPIO
D11 11 GPIO38 SPI COPI/MOSI, GPIO
D12 12 GPIO47 SPI CIPO/MISO, GPIO
D13 13 GPIO48 SPI SCK, built-in LED, GPIO
A0 17 GPIO1 ADC1_CH0, digital GPIO
A1 18 GPIO2 ADC1_CH1, digital GPIO
A2 19 GPIO3 ADC1_CH2, digital GPIO
A3 20 GPIO4 ADC1_CH3, digital GPIO
A4 / SDA 21 GPIO11 ADC2_CH0, I²C SDA, digital GPIO
A5 / SCL 22 GPIO12 ADC2_CH1, I²C SCL, digital GPIO
A6 23 GPIO13 ADC2_CH2, digital GPIO
A7 24 GPIO14 ADC2_CH3, digital GPIO

Arduino Pin Numbering vs Raw GPIO Numbering

Nano ESP32 is unusual because Arduino provides two numbering modes in the IDE:

The options are:

  • By Arduino pin — default Nano-style numbering;
  • By GPIO number (legacy) — conventional ESP32 raw GPIO numbering.

Why This Matters

With default Arduino numbering:

means:

If you switch the IDE to raw GPIO numbering:

means:

That is a completely different physical pin.

Use D0, D1, D2 and A0 Constants

The safest Arduino-style code is:

Arduino documents that symbolic names such as:

continue to refer to the same physical board pins regardless of which pin-numbering mode is selected.

This makes code much less fragile.

Physical Nano Header Layout

With the USB-C connector at the top, the Nano ESP32 follows the familiar Nano dual-row format:

The exact arrangement matters because B0/B1 and VBUS occupy positions that differ from some older Nano-family boards.

3.3 V Logic Only

Nano ESP32 is a 3.3 V board.

Arduino explicitly warns that all digital and analog pins operate at 3.3 V and higher external voltages can damage the board.

Do not connect 5 V logic directly to:

  • D0-D13;
  • A0-A7;
  • B0/B1;
  • other exposed ESP32 signals.

Use a suitable level shifter, divider or 3.3 V-compatible peripheral.

There Is No Normal 5 V Pin

Nano ESP32 does not provide a continuously regulated 5 V rail like a classic Nano.

It exposes:

which carries approximately 5 V when the board is powered from USB-C.

If the board is powered only through VIN, VBUS is not automatically active.

This distinction matters when powering external 5 V modules.

VIN

Arduino specifies a recommended VIN range of:

The onboard MP2322 converter steps VIN down to the board’s 3.3 V operating rail.

3.3 V Output

The 3.3 V header pin is connected to the board’s regulated 3.3 V rail and can power external low-voltage peripherals.

Remember that every GPIO also uses 3.3 V logic.

GPIO Current

Arduino’s current datasheet states maximum GPIO drive figures of approximately:

These should not be treated as convenient design targets for continuous high-current loads.

Use a transistor or driver for:

  • relays;
  • motors;
  • large LEDs;
  • solenoids;
  • other power devices.

UART: D0 and D1

The default external UART pins are:

In Arduino code:

is the normal choice for an external UART peripheral.

D1/TX Has a Series Resistor

The official pinout notes that the D1/TX0 path contains a 499 Ω series resistor.

This limits current and should be considered when attaching unusual loads to the TX signal.

For normal UART receivers it is not a problem.

USB Serial Is Native

The USB-C connector connects directly to ESP32-S3 native USB hardware.

So:

This keeps the external UART independent from the normal PC serial connection.

Native USB Pins

Internally, ESP32-S3 uses:

These signals are routed to the USB-C connector rather than appearing as normal Nano header GPIOs.

Do not expect to use GPIO19/GPIO20 freely as header pins while also using the native USB interface.

USB-C Capabilities

The USB-C port is used for:

  • power;
  • programming;
  • serial communication;
  • native USB device functions;
  • built-in debugging.

Arduino also lists Nano ESP32 as compatible with the standard Keyboard and Mouse HID libraries.

Out-of-the-Box Debugging

Nano ESP32 supports debugging without requiring a separate external debug probe.

This is one advantage of the ESP32-S3 native USB/Serial-JTAG architecture.

Advanced development can use:

  • breakpoints;
  • step execution;
  • variable inspection;
  • lower-level ESP-IDF debugging.

SPI Pins

The default SPI mapping is:

Mapped to raw GPIO:

Basic SPI Example

Using D10 instead of numeric 10 keeps the code safe across the Nano ESP32 numbering modes.

D13 Is Also LED_BUILTIN

The normal built-in user LED is connected to:

That same pin is also the default SPI SCK pin.

So the built-in LED can flash during SPI activity.

I²C Pins

The default I²C mapping is:

Raw GPIO mapping:

Use:

I²C Pins Are Flexible on ESP32-S3

The ESP32-S3 GPIO matrix allows I²C to be routed to many different free GPIOs.

Arduino uses A4/A5 by default for Nano compatibility, but advanced code can remap the bus.

For portable Nano sketches, leave the defaults unless you have a specific reason to change them.

Eight Analog Inputs

Nano ESP32 exposes:

The analog mapping is:

Analog pin GPIO ADC unit/channel
A0 GPIO1 ADC1_CH0
A1 GPIO2 ADC1_CH1
A2 GPIO3 ADC1_CH2
A3 GPIO4 ADC1_CH3
A4 GPIO11 ADC2_CH0
A5 GPIO12 ADC2_CH1
A6 GPIO13 ADC2_CH2
A7 GPIO14 ADC2_CH3

ADC Resolution

ESP32-S3 uses 12-bit SAR ADC hardware for normal single-read operation.

A raw 12-bit result spans:

Arduino-ESP32 can configure resolution through the appropriate ADC APIs.

As with every MCU ADC, nominal resolution is not the same as guaranteed absolute accuracy.

ADC Input Is 3.3 V-Class, Not 5 V

Never apply 5 V directly to a Nano ESP32 analog input.

Use an appropriate resistor divider if measuring a higher voltage.

The usable measurement range also depends on ESP32 ADC attenuation settings rather than simply assuming:

maps perfectly to:

For accurate measurement, use calibration and avoid operating exactly at the ADC range boundaries.

Important: A4-A7 Use ADC2

The first four analog pins:

use ADC1.

The last four:

use ADC2.

This matters because Espressif documents limitations when ADC2 is used while Wi-Fi is active.

At low level, ADC2 readings can fail or become unavailable while the Wi-Fi driver owns ADC2 resources.

If your project requires dependable analog measurement while Wi-Fi is running, prefer:

where possible because those are ADC1 channels.

A4/A5 Conflict with I²C Too

A4 and A5 are also the default I²C pins.

So they have two different potential conflicts:

If I²C is active on those pins, do not simultaneously treat them as independent analog inputs.

No True DAC

ESP32-S3 does not include the two true voltage DACs found on the original ESP32.

Nano ESP32 therefore has no direct equivalent to the 12-bit DAC on Arduino Nano R4 or UNO R4.

For analog voltage output use:

  • an external DAC;
  • PWM plus filtering;
  • I²S-based external audio DAC hardware.

PWM

ESP32-S3 uses flexible LEDC PWM hardware rather than fixed AVR-style PWM pins.

That means PWM can be routed to many suitable output GPIOs.

Example:

or use the lower-level Arduino-ESP32 LEDC API when you need explicit frequency and resolution control.

Interrupts

Arduino’s current Nano ESP32 datasheet states that all exposed GPIOs can be configured as interrupts through the ESP32 interrupt matrix.

Normal Arduino code can use:

Again, symbolic D2 is preferable to a raw numeric literal when the pin-numbering mode might change.

TWAI / Classic CAN

ESP32-S3 includes a TWAI controller, which is Espressif’s implementation of classic CAN 2.0B.

Unlike boards with fixed CAN header pins, Nano ESP32 does not assign default TWAI TX/RX pins.

Suitable free GPIOs can be selected in software.

You still need an external CAN transceiver:

TWAI on ESP32-S3 is classic CAN and does not support CAN-FD frames.

I²S

ESP32-S3 includes two I²S controllers.

There are no fixed Nano header pins assigned to I²S.

The GPIO matrix allows signals such as:

  • MCLK;
  • BCLK;
  • WS/LRCLK;
  • DIN;
  • DOUT;

to be routed to suitable available GPIOs.

This makes Nano ESP32 useful for:

  • digital microphones;
  • audio DACs;
  • amplifier modules;
  • audio processing projects.

RGB LED

Nano ESP32 includes an onboard RGB LED connected to three ESP32-S3 GPIOs:

Arduino provides symbolic LED names, so use those rather than relying on raw GPIO numbers.

B0 and B1 Pins

Two Nano header positions expose ESP32-S3 boot/strapping-related pins:

These are also shared with parts of the onboard RGB LED circuitry.

B1 Bootloader Function

Arduino documents that:

can be shorted to GND while resetting the board to force ESP32-S3 bootloader/download mode.

This is useful when recovering an unresponsive board.

B0/B1 Should Be Used Carefully

Because B0 and B1 are strapping-related pins, Arduino recommends using them mainly as outputs if you repurpose them in a sketch.

External circuits that force an unexpected level during reset can change the ESP32-S3 boot behaviour.

For ordinary projects, use D0-D13/A0-A7 first and leave B0/B1 alone unless you specifically need them.

Bootloader Recovery

If the board becomes unresponsive:

  1. short B1 to GND;
  2. press/reset the board;
  3. enter bootloader mode;
  4. upload appropriate firmware;
  5. remove the B1-GND short;
  6. reset normally.

Arduino provides dedicated recovery documentation for Nano ESP32.

16 MB External Flash

The board includes:

of external QSPI Flash.

This is far more storage than classic Nano-family AVR boards.

It provides headroom for:

  • large firmware;
  • OTA partitions;
  • filesystems;
  • web assets;
  • certificates;
  • MicroPython files.

8 MB PSRAM

The NORA-W106 module also includes:

This is valuable for:

  • large buffers;
  • graphics;
  • audio;
  • machine-learning models;
  • networking;
  • large JSON documents;
  • MicroPython applications.

This memory capacity is one reason Nano ESP32 is much better suited to network-heavy applications than small AVR Nano boards.

Wi-Fi and Bluetooth

The onboard NORA-W106 module provides:

  • 2.4 GHz 802.11 b/g/n Wi-Fi;
  • Bluetooth Low Energy 5.0;
  • integrated antenna.

The wireless stack runs directly on the same ESP32-S3 that executes your sketch.

There is no separate network coprocessor.

ESP-NOW

Nano ESP32 supports Espressif’s ESP-NOW peer-to-peer protocol.

This is useful for:

  • wireless sensor nodes;
  • low-latency controller links;
  • remote buttons;
  • robot-to-robot communication.

MicroPython

Arduino officially supports MicroPython on Nano ESP32.

The combination of:

  • 240 MHz dual-core CPU;
  • 512 kB SRAM;
  • 8 MB PSRAM;
  • 16 MB Flash;
  • Wi-Fi and BLE;

makes the board substantially more comfortable for MicroPython than low-memory AVR boards.

Low-Power Hardware

ESP32-S3 includes:

  • RTC memory;
  • ULP coprocessor;
  • deep sleep;
  • light sleep;
  • RTC-capable ADC operation;
  • power-management hardware.

Arduino quotes very low SoC-only sleep currents, but the complete development board consumes more because regulators, LEDs and other board components remain present.

Always measure the complete board if battery lifetime matters.

Nano ESP32 vs Classic Nano Pin Compatibility

The Nano footprint makes mechanical migration easy, but electrical compatibility is not guaranteed.

Feature Classic Nano Nano ESP32
Logic voltage 5 V 3.3 V
CPU ATmega328P, 16 MHz Dual LX7, up to 240 MHz
Flash 32 kB 16 MB external
RAM 2 kB 512 kB + 8 MB PSRAM
ADC 10 bit 12-bit hardware
Wi-Fi No Yes
BLE No Yes
Native USB No Yes
True DAC No No

For the legacy board’s exact mapping, see our classic Arduino Nano pinout guide.

Nano ESP32 vs Nano R4

The Nano R4 takes almost the opposite approach.

Nano R4 gives you:

  • 5 V GPIO;
  • RA4M1 Cortex-M4;
  • 14-bit ADC;
  • true 12-bit DAC;
  • RTC;
  • fixed CAN pins;
  • Qwiic.

Nano ESP32 gives you:

  • much faster CPU;
  • far more memory;
  • native Wi-Fi/BLE;
  • ESP-NOW;
  • PSRAM;
  • MicroPython;
  • ESP-IDF ecosystem.

See our Arduino Nano R4 pinout guide for the RA4M1 alternative.

Nano ESP32 and the Wider ESP32-S3 Family

Nano ESP32 uses the same fundamental ESP32-S3 architecture as many Espressif and third-party S3 boards, but its pin naming and compact Nano footprint are different.

If you need more GPIO access or want to compare module memory configurations, see our ESP32-S3 boards, modules and variants comparison.

Quick Pin Reference

Best Practices

  1. Use symbolic pin names such as D2 and A0 instead of bare numbers.
  2. Remember that the default Arduino pin number is not the same as the raw ESP32 GPIO number.
  3. Never apply 5 V logic directly to Nano ESP32 GPIO.
  4. Use A0-A3 when analog measurement must coexist reliably with active Wi-Fi.
  5. Remember A4/A5 are both ADC2 channels and the default I²C bus.
  6. Do not expect a true DAC; ESP32-S3 has none.
  7. Keep B0/B1 free from external reset-time constraints unless you understand ESP32 strapping behaviour.
  8. Use Serial for USB and Serial1 for D0/D1 UART.
  9. Remember D13 shares SPI SCK with the built-in LED.
  10. Use a 3.3 V-compatible CAN transceiver when using TWAI.

Final Thoughts

The Arduino Nano ESP32 gives you a very capable ESP32-S3 platform in a compact Nano footprint, but its pinout requires more attention than an AVR Nano because there are two numbering systems.

The most important mappings are:

The best habit is simple:

rather than assuming the number printed in code is automatically the raw ESP32 GPIO number.

Once that distinction is understood, Nano ESP32 becomes a very flexible platform: compact, fast, memory-rich, wireless, MicroPython-capable and fully integrated into both the Arduino and ESP32 ecosystems.

Share your love