The Arduino Nano ESP32 (ABX00075) marries the classic Nano footprint with the Espressif ESP32-S3-N8R2 module. While the physical board looks identical to the legacy ATmega328P Nano, the internal architecture is entirely different. The most critical baseline fact for your bench: the Nano ESP32 operates at 3.3V logic. Feeding 5V into any GPIO pin will permanently destroy the ESP32-S3 silicon.
Below is the complete mapping between the Nano silkscreen labels and the internal ESP32-S3 GPIO numbers, followed by the specific trapdoors and wiring standards you need to know before soldering your first header.
The Complete Arduino Nano ESP32 Pinout Table
This table maps the physical silkscreen labels on the PCB to the internal ESP32-S3 GPIO numbers used in the Arduino IDE and ESP-IDF. Use this as your primary bench reference.
| Silkscreen Label | ESP32-S3 GPIO | Primary Function | Notes & Constraints |
|---|---|---|---|
| D0 / RX | GPIO43 | UART0 RX | Default Serial RX. 3.3V logic. |
| D1 / TX | GPIO44 | UART0 TX | Default Serial TX. 3.3V logic. |
| D2 | GPIO5 | GPIO / PWM | Safe for general I/O. |
| D3 | GPIO6 | GPIO / PWM | Safe for general I/O. |
| D4 | GPIO7 | GPIO / PWM | Safe for general I/O. |
| D5 | GPIO8 | GPIO / PWM | Safe for general I/O. |
| D6 | GPIO9 | GPIO / PWM | Safe for general I/O. |
| D7 | GPIO10 | GPIO / PWM | Safe for general I/O. |
| D8 | GPIO17 | GPIO / PWM | No internal pull-up. Add external if needed. |
| D9 | GPIO18 | GPIO / PWM | No internal pull-up. |
| D10 / SS | GPIO21 | SPI CS | Default SPI Chip Select. |
| D11 / MOSI | GPIO38 | SPI MOSI | Default SPI MOSI (CIPO on S3). |
| D12 / MISO | GPIO47 | SPI MISO | Default SPI MISO (COPI on S3). |
| D13 / SCK | GPIO48 | SPI SCK / LED | Drives the onboard RGB LED (via WS2812). |
| A0 | GPIO1 | ADC1 / GPIO | ADC1 channel. Safe for analog reads. |
| A1 | GPIO2 | ADC1 / GPIO | ADC1 channel. Safe for analog reads. |
| A2 | GPIO3 | ADC1 / Strapping | Strapping pin. Do not pull high/low during boot. |
| A3 | GPIO4 | ADC1 / GPIO | ADC1 channel. Safe for analog reads. |
| A4 / SDA | GPIO11 | I2C SDA | Default Wire SDA. Has 4.7k pull-ups enabled in HW. |
| A5 / SCL | GPIO12 | I2C SCL | Default Wire SCL. Has 4.7k pull-ups enabled in HW. |
| VIN | N/A | Power Input | Accepts 7-21V DC. Tied to VBUS if USB powered. |
| 5V | N/A | Power Out | Output from onboard regulator. Max 500mA draw. |
| 3V3 | N/A | Power Out | ESP32-S3 logic rail. Max 300mA draw. |
Rows People Get Wrong: Strapping Pins & I2C Defaults
When reading the table above, three specific areas cause 90% of bench debugging headaches for engineers transitioning from the classic Nano or the original ESP32 dev boards.
The 5V vs 3.3V Power Rail Confusion
On the silkscreen, the 5V pin is exactly where it was on the ATmega328P Nano. However, on the Nano ESP32, this pin is an output from the onboard switching regulator when powered via USB-C or VIN. It is not a logic reference. The actual logic reference is the 3V3 pin. Never backfeed 5V into the 3V3 pin to power the board; the S3's internal LDO will overheat and fail.
ESP32-S3 Strapping Pins (GPIO3, GPIO45, GPIO46)
The ESP32-S3 samples specific pins during the boot sequence to determine flash voltage, boot mode, and JTAG routing. On the Nano ESP32, A2 (GPIO3) is a strapping pin. If you wire a sensor to A2 that pulls the line LOW during the exact millisecond the board resets, the S3 will enter an unintended boot mode and fail to run your sketch. Rule of thumb: Never use A2 for inputs that change state during power-on.
I2C Mapping and Hardware Pull-ups
Unlike the original ESP32 dev kits where I2C defaulted to GPIO21/22, the Arduino core for the Nano ESP32 maps Wire to A4 (GPIO11) and A5 (GPIO12) to maintain shield compatibility. Furthermore, the Arduino Nano ESP32 schematic includes onboard pull-up resistors for these specific I2C lines. If you are wiring raw I2C sensors, you do not need to add external 4.7k pull-ups to A4 and A5.
Peripheral Decision Tree: Which Pin Should You Use?
Use this decision path to select the correct pins for your specific peripheral. This terminates in a concrete wiring choice to eliminate guesswork.
| If you need to connect... | Then use these pins... | Why / Constraints |
|---|---|---|
| I2C Sensors (BME280, OLED) | A4 (SDA) & A5 (SCL) | Hardware pull-ups present. Default Wire mapping. Do not use other pins unless you remap in software and add external pull-ups. |
| SPI Displays (TFT, SD Cards) | D10, D11, D12, D13 | Maps to default hardware SPI bus. Yields maximum clock speeds (up to 80MHz) without bit-banging overhead. |
| Analog Sensors (Potentiometers, NTC) | A0, A1, A3, A4, A5 | These route to ADC1. Avoid A2 (GPIO3) due to strapping pin conflicts. Avoid using ADC2 pins if WiFi is active simultaneously. |
| Hardware UART (GPS, RS485) | D0 (RX) & D1 (TX) | Routes to UART0. Note: UART0 is shared with the USB-C debug serial. Use Serial1 on D2/D3 if you need a dedicated secondary UART. |
| Interrupts (Encoders, Buttons) | D2 through D7 | GPIO5 through GPIO10. These have clean internal pull-up/pull-down configurations and no boot-strapping conflicts. |
Regional & Standard Wiring Color Conventions
While the NEC and IEC 60446 govern mains wiring colors, embedded microcontroller wiring relies on de-facto industry standards for sensor and communication buses. Adhering to these prevents catastrophic reverse-polarity events when swapping modules.
The Qwiic / STEMMA QT Standard (I2C)
If you are using JST-SH 4-pin connectors (SparkFun Qwiic or Adafruit STEMMA QT), the color code is strictly standardized across the industry:
- Red: 3.3V Power (VCC)
- Black: Ground (GND)
- Blue: SDA (Data)
- Yellow: SCL (Clock)
Bench Tip: If you are splicing a STEMMA QT cable to bare wires for a custom PCB, always verify the pinout with a multimeter. Some cheap third-party clones swap the Blue and Yellow wires.
Standard UART / Serial Wiring
For 3-pin or 4-pin JST-PH UART connections (commonly used for GPS modules and Bluetooth radios like the ESP-01), the standard color code is:
- Red: VCC (3.3V or 5V, verify module requirement)
- Black: GND
- Green: TX (Transmit from module)
- White: RX (Receive into module)
Remember the golden rule of UART: TX connects to RX, and RX connects to TX. Never connect TX to TX.
Safe Interpretation When Markings Are Faded or Missing
The silkscreen on the Arduino Nano ESP32 is notoriously thin. After a few rounds of soldering and desoldering headers, or if you bought a second-hand board, the pin labels may be completely worn off. Here is how to safely identify your pins without guessing.
- Establish Orientation: Hold the board with the USB-C port facing away from you. The left row contains the analog and power pins; the right row contains the digital and communication pins.
- Identify Power and Ground: Set your multimeter to continuity mode (the diode/beep setting). Probe the metal shield of the USB-C port—this is your ground reference. Touch the other probe to the pins on the board. The pins that beep are GND. On the left row, the pin immediately adjacent to the GND pin closest to the USB port is
VIN. The next is5V, followed by3V3. - Trace the I2C Lines: If you need to find A4 and A5 but the text is gone, look closely at the PCB traces under a magnifying glass. GPIO11 and GPIO12 (A4/A5) have physical traces routing directly to the onboard pull-up resistor network near the ESP32-S3 metal shield. You can also power the board via USB and use a logic analyzer or oscilloscope to probe the analog pins while running a basic
Wire.begin()sketch; the SCL pin will show a distinct 100kHz or 400kHz clock square wave. - Consult the Schematic: When in doubt, bypass the physical board entirely. Download the official Arduino Nano ESP32 schematic and the Espressif ESP32-S3 datasheet. Map the physical pin count (15 pins per side) directly to the schematic net names.






