The official Arduino Nano ESP32 (based on the u-blox NORA-W106 / ESP32-S3 module) bridges the classic 0.6-inch Nano footprint with dual-core 240 MHz Wi-Fi and Bluetooth 5 power. However, mapping the legacy 'D' and 'A' silkscreen labels to the underlying ESP32-S3 GPIOs is where most hardware bugs and fried peripherals start. Unlike older ESP8266 Nano clones, this board runs strictly at 3.3V logic and utilizes the S3's native USB peripheral.
Below is the exact pin mapping, followed by the DC wiring color standards you need when moving from breadboard to terminal blocks, and recovery protocols for worn boards.
Complete Arduino Nano ESP32 Pinout Reference
This table maps the physical silkscreen labels on the official Arduino Nano ESP32 to the internal ESP32-S3 GPIO numbers. Use this when writing direct register code or configuring ESP-IDF, as the Arduino IDE abstraction layer handles the 'D' and 'A' aliases automatically.
| Nano Label | ESP32-S3 GPIO | Primary Function | ADC Capable | Bench Notes & Limits |
|---|---|---|---|---|
| D0 (RX) | GPIO44 | UART0 RX | No | Default serial receive. 3.3V logic only. |
| D1 (TX) | GPIO43 | UART0 TX | No | Default serial transmit. |
| D2 | GPIO5 | Digital I/O | Yes (ADC1) | Safe for PWM and interrupts. |
| D3 | GPIO6 | Digital I/O | Yes (ADC1) | Safe for PWM and interrupts. |
| D4 | GPIO7 | Digital I/O | Yes (ADC1) | Safe for PWM. |
| D5 | GPIO8 | Digital I/O | Yes (ADC1) | Safe for PWM. |
| D6 | GPIO9 | Digital I/O | Yes (ADC1) | Safe for PWM. |
| D7 | GPIO10 | Digital I/O | Yes (ADC1) | Safe for PWM. |
| D8 | GPIO17 | Digital I/O | Yes (ADC2) | ADC2 conflicts with Wi-Fi. Use as digital only when Wi-Fi is active. |
| D9 | GPIO18 | Digital I/O | Yes (ADC2) | ADC2 conflicts with Wi-Fi. Use as digital only when Wi-Fi is active. |
| D10 (SS) | GPIO38 | SPI SS | No | Default SPI Chip Select. |
| D11 (MOSI) | GPIO48 | SPI MOSI | No | Also drives the onboard RGB LED (Green channel). |
| D12 (MISO) | GPIO47 | SPI MISO | No | Also drives the onboard RGB LED (Blue channel). |
| D13 (SCK) | GPIO21 | SPI SCK | No | Standard SPI clock. |
| A0 | GPIO4 | Analog / Digital | Yes (ADC1) | 12-bit SAR ADC. Do not exceed 3.1V input. |
| A1 | GPIO3 | Analog / Digital | Yes (ADC1) | 12-bit SAR ADC. |
| A2 | GPIO2 | Analog / Digital | Yes (ADC1) | 12-bit SAR ADC. |
| A3 | GPIO1 | Analog / Digital | Yes (ADC1) | 12-bit SAR ADC. |
| A4 (SDA) | GPIO42 | I2C SDA | No | Default I2C Data. Requires external pull-ups. |
| A5 (SCL) | GPIO41 | I2C SCL | No | Default I2C Clock. Requires external pull-ups. |
| A6 | GPIO40 | Digital I/O | No | Digital only on this specific board routing. |
| A7 | GPIO39 | Digital I/O | No | Digital only on this specific board routing. |
| 5V | N/A | Power Rail | N/A | USB VBUS input or regulated output. Max 5.5V. |
| 3V3 | N/A | Power Rail | N/A | Onboard LDO output. Max 3.6V. |
| GND | N/A | Ground | N/A | Common ground for all peripherals. |
DC Control Wiring Standards: IEC vs NEC Color Codes
When you migrate your Nano ESP32 from a solderless breadboard to a permanent enclosure using DIN-rail terminal blocks or Molex connectors, you must translate jumper wires into standardized wiring. Mixing hobby conventions with industrial standards causes catastrophic shorts when a 24V industrial sensor meets a 3.3V GPIO.
Here is how regional standards dictate DC control and sensor wiring colors. Choose the standard that matches your region's AHJ (Authority Having Jurisdiction) or your facility's existing PLC wiring conventions.
| Function | IEC 60446 (EU / Global Industrial) | NEC / US Hobby Standard | Application Notes |
|---|---|---|---|
| Positive DC (+VDC) | Brown | Red | Used for 3.3V, 5V, or 24V sensor power feeds. |
| DC Ground (0V / GND) | Blue | Black | Return path. Must be bonded to the Nano ESP32 GND pin. |
| Switched / Signal | Black | White or Yellow | Data lines (I2C SDA/SCL, UART TX/RX, Analog). |
| Protective Earth (PE) | Green/Yellow Stripe | Green or Bare Copper | Chassis ground. Never connect to Nano ESP32 GND directly unless using a single-point star ground to avoid ground loops. |
Which standard applies to you? If you are building a consumer IoT device in North America, stick to the Red/Black/White hobby standard to match off-the-shelf sensor modules (like Adafruit or SparkFun). If you are integrating the Nano ESP32 into an industrial control panel or a European-manufactured appliance, you must use IEC 60446 colors (Brown/Blue/Black) to pass CE marking and electrical safety audits.
Rows People Get Wrong & Faded Silkscreen Recovery
Even with the table above, bench mistakes happen. Here are the specific edge cases that trap developers, followed by how to probe a board when the silkscreen has been scraped off or obscured by conformal coating.
The 'Rows People Get Wrong' Trap
- The 5V Pin is NOT a Logic Level: The 5V pin on the Nano ESP32 is tied to the USB VBUS or the VIN regulator input. It does not mean the board outputs 5V logic on its GPIOs. The ESP32-S3 is a 3.3V device. Feeding 5V into D2 (GPIO5) will fry the input protection diodes and kill the pin.
- I2C Pull-Up Absence: Unlike older AVR-based Nanos, the ESP32-S3 does not reliably enable internal weak pull-ups for I2C communication. If your BME280 or MPU6050 hangs on
Wire.begin(), you must add physical 4.7kΩ pull-up resistors from A4 (SDA) and A5 (SCL) to the 3V3 pin. - ADC2 vs Wi-Fi Conflict: Pins D8 (GPIO17) and D9 (GPIO18) route to ADC2. The ESP32-S3 hardware disables ADC2 the moment the Wi-Fi radio initializes. If your analog sensor reads return 0 or erratic noise after connecting to Wi-Fi, move the sensor to A0-A3 (ADC1).
- Strapping Pin Boot Failures: If you wire a low-impedance sensor or a pull-down resistor to GPIO0, GPIO3, GPIO45, or GPIO46, the board may fail to boot or enter download mode unexpectedly. Keep these pins floating or pulled high via 10kΩ resistors during power-on.
Safe Interpretation When Markings are Faded
If you inherit a field-deployed Nano ESP32 with worn silkscreen, do not guess the pinout. Use a digital multimeter (DMM) to safely map the power rails before applying power to your sensors.
- Find GND: Set your DMM to continuity mode (the diode/beep symbol). Place the black probe on the metal shield of the USB-C connector. Probe the header pins with the red probe. The pin that beeps (reads < 1 ohm) is GND.
- Find 5V (VBUS): Plug the board into a USB data blocker (power only). Set the DMM to DC Voltage. Place the black probe on your identified GND pin. Probe the remaining power-side pins. The pin reading 4.8V to 5.2V is the 5V rail.
- Find 3V3: With the board powered and the black probe on GND, probe the opposite side's power rails. The pin reading exactly 3.25V to 3.35V is the 3V3 LDO output. Do not confuse this with a GPIO that happens to be driven HIGH by running code. To verify, unplug the USB, wait 10 seconds for capacitors to discharge, and measure again; the 3V3 pin will drop to 0V, while a GPIO might float.
Frequently Asked Questions
Can I use 5V sensors with the Arduino Nano ESP32 pinout?
No, not directly. The ESP32-S3 datasheet specifies an absolute maximum GPIO voltage of 3.6V. If you must interface a 5V sensor (like an HC-SR04 ultrasonic module or a 5V relay module), use a bidirectional logic level shifter (like the Texas Instruments TXS0108E) or a simple voltage divider (e.g., 2kΩ and 3.3kΩ resistors) to step the 5V signal down to a safe 3.1V for the Nano's input pins.
Why does my I2C sensor fail on A4 and A5?
The most common cause is missing pull-up resistors. The Arduino Wire library attempts to enable internal pull-ups, but the ESP32-S3's internal resistors are often too weak (typically 45kΩ) to pull the bus high fast enough at 400kHz I2C speeds. Solder 4.7kΩ resistors between the SDA/SCL lines and the 3V3 pin. If it still fails, verify your sensor's I2C address using an I2C scanner sketch, as many modules default to addresses that conflict with the S3's internal peripherals.
How do I enter download mode if the boot button is missing or broken?
The official Nano ESP32 features a dedicated 'ROM Bootloader' mode triggered by a specific button sequence, but if the physical switch fails, you can force it via hardware. Wire a momentary pushbutton between GPIO0 (which maps to specific internal routing on the NORA module) and GND. Hold the GPIO0 button to ground, press and release the Reset button, then release the GPIO0 button. The board will stall the normal boot sequence and wait for the ESP-IDF or Arduino IDE to flash the new firmware over USB.






