Arduino Nano Pinout – Complete Guide with Diagram
The Arduino Nano is one of those boards that just makes sense once you hold it. It is tiny, it fits directly on a breadboard, and it has almost everything the UNO has, and in less than half the size.
But because it is so compact, the pins are packed close together and it is easy to get confused. Which pin does what? Where is the SPI? Why does the Nano have 8 analog pins when the UNO only has 6?
In this guide, we are going to answer all of that. We will go through every pin on the Arduino Nano, explain what it does, and point out the key differences from the UNO along the way.
If you have not read the Arduino UNO Pinout guide yet, I recommend doing that first — a lot of what the Nano does is identical to the UNO, and understanding the UNO makes everything here much easier to follow.
And once you are done with the pinout, the Arduino Core Tutorials page is where to go next. It covers GPIO, ADC, UART, I2C, SPI, PWM, and interrupts — all with working code examples.

Arduino Nano Specifications
The Nano is small enough to fit in your pocket, but do not let the size fool you. It is a fully capable board for real projects.
What is Arduino Nano?
The Arduino Nano is a compact microcontroller board built around the ATmega328P. It is the same chip used in the Arduino UNO. It measures just 45mm × 18mm, which makes it perfect for projects where space is tight.
It has a Mini-USB port on one end for programming and power. The two rows of header pins on each side make it plug directly into a breadboard, which is one of the main reasons people love using it for prototyping.
One thing worth knowing upfront — the Nano has 30 pins in total, and a few of them behave differently from the UNO. We will cover all of those differences as we go.
Key Specifications at a Glance
| Specification | Detail |
|---|---|
| Microcontroller | ATmega328P |
| Clock Speed | 16 MHz |
| Flash Memory | 32 KB (2 KB used by bootloader) |
| SRAM | 2 KB |
| EEPROM | 1 KB |
| Operating Voltage | 5V |
| Input Voltage (VIN) | 6V – 20V (recommended 7–12V) |
| Digital I/O Pins | 14 (D0 to D13) |
| Analog Input Pins | 8 (A0 to A7) |
| PWM Pins | 6 (D3, D5, D6, D9, D10, D11) |
| Max Current per Pin | 40 mA |
| Board Dimensions | 45mm × 18mm |
| USB Connector | Mini-USB (older versions) / Micro-USB (clones) |
One thing to notice here: the Nano has 8 analog pins (A0 to A7), while the UNO only has 6. That extra A6 and A7 are unique to the Nano, and we will talk about them in the analog section.
Arduino Nano Pinout Diagram
Here is the full pinout diagram. Keep this open in a separate tab while you read through the rest of the guide — it will make everything much easier to follow.
The pins fall into four main groups:
- Power Pins — power in and out
- Digital I/O Pins — reading and writing digital signals
- Analog Pins — reading analog voltages
- Communication Pins — UART, I2C, and SPI
Let’s go through them one by one.
Power Pins
The power pins on the Nano are along the edges of the board. Let’s look at each one.
VIN Pin
The VIN pin is how you power the Nano from an external supply when you are not using the USB cable. The accepted voltage range is 6V to 20V, but I would strongly recommend staying between 7V and 12V in practice.
The input voltage goes through the onboard LM1117 voltage regulator, which steps it down to 5V. If you push VIN too high, the regulator will overheat. And if it gets hot enough for long enough, it will fail.
So keep it in a reasonable range, a 9V battery or a 7.5V adapter works great.
5V Pin
This is a regulated 5V output. You can use it to power external sensors and modules that run on 5V. The available current depends on how you are powering the Nano:
- Via USB — up to around 500 mA (from a standard USB port)
- Via VIN — depends on the regulator, but keep total load reasonable
Do not try to power motors or high-current devices from this pin. Use a dedicated power supply for those.
3.3V Pin
This gives you a regulated 3.3V output. On the Arduino Nano, the 3.3V is sourced from the FT232RL USB-to-serial chip (on original boards). This limits the output to around 50 mA. So it is only suitable for low-power sensors and modules.
Some Nano clones use a different USB chip, which may give you slightly different current limits on this pin. Just keep it light.
GND Pins
The Nano has two GND pins, one on each side of the board. Both are connected to the same ground internally, so use whichever is more convenient for your wiring.
And just like with the UNO, always share a common ground between the Nano and any external component. If the grounds are not connected, your signals will not read correctly.
RESET Pin
Pulling this pin LOW resets the Nano, same as pressing the physical reset button. You will use this mostly in multi-board setups or when another device needs to reset the Nano programmatically.
Key Points to Remember
- Keep VIN between 7V and 12V for reliable operation
- The 3.3V pin is limited — do not overload it
- Both GND pins are the same internally — use either one
- Do not connect USB and VIN at the same time
Digital I/O Pins
The Arduino Nano has 14 digital I/O pins, labeled D0 to D13. They work the same way as on the UNO. You set them as input or output using pinMode(), and you read or write them using digitalRead() and digitalWrite().
How Digital Pins Work
In output mode:
- HIGH = 5V
- LOW = 0V
In input mode:
- 2V to 5V = reads as HIGH
- 0V to 0.8V = reads as LOW
Each pin can source or sink up to 40 mA, but I recommend treating 20 mA as your practical limit for day-to-day use. The total across all pins combined should not exceed 200 mA.
Want to see this in action with real code? Check out our Arduino digitalWrite() and digitalRead() tutorial.
PWM Pins (~)
Six of the digital pins support PWM output. They are marked with a tilde (~) on the board: D3, D5, D6, D9, D10, D11
These are the same PWM pins as on the UNO. You control them with analogWrite(), which accepts values from 0 to 255.
PWM Pins and Their Timers
| PWM Pin | Timer Used |
|---|---|
| D3 | Timer2 |
| D5 | Timer0 |
| D6 | Timer0 |
| D9 | Timer1 |
| D10 | Timer1 |
| D11 | Timer2 |
The default PWM frequency is 490 Hz for most pins, and 980 Hz for D5 and D6. For a deeper dive into duty cycles and frequency control, see our Arduino PWM and analogWrite() guide.
Pin 13 – Built-in LED
Just like the UNO, pin D13 on the Nano is connected to the onboard LED. This makes it the easiest pin to test without using any wire.
Avoid using D13 as a digital input for the same reason as the UNO — the onboard LED and its series resistor affects the pin behavior.
Key Points to Remember
- Always call
pinMode()before using any digital pin - Stay under 20 mA per pin in normal use
- PWM only activates when you use
analogWrite()— otherwise these pins behave like regular digital pins - Do not connect anything to D0 and D1 while uploading code
Interrupt Pins
Interrupts on the Nano work exactly the same as the UNO. You get two dedicated external interrupt pins and pin-change interrupt support on all digital pins.
External Interrupt Pins (INT0 and INT1)
- INT0 → Digital Pin D2
- INT1 → Digital Pin D3
Use attachInterrupt() to assign a handler function to these pins. They can trigger on RISING, FALLING, CHANGE, or LOW.
These two pins each have their own dedicated interrupt vector, so you get a clean, direct response to external events without any extra checking in your code.
Pin Change Interrupts (PCINT)
All digital and analog pins on the Nano support Pin Change Interrupts. These are grouped by port, and you have to manually check which pin triggered the interrupt inside your handler function.
They are more work to set up than external interrupts, but they give you interrupt capability on every pin when you need it.
External Interrupts vs PCINT — Quick Comparison
| Feature | External (INT0/INT1) | Pin Change (PCINT) |
|---|---|---|
| Available on pins | D2 and D3 only | All digital + analog pins |
| Separate ISR per pin | Yes | No — shared per port |
| Trigger modes | RISING, FALLING, CHANGE, LOW | CHANGE only |
| Ease of use | Easy | Requires manual checking |
Stick with D2 and D3 for interrupts unless you have genuinely run out of options. For working code examples and debounce handling, see our Arduino External Interrupts tutorial.
Analog Pins
This is where the Nano is different from the UNO. The Nano has 8 analog input pins, A0 to A7, compared to 6 on the UNO.
All of them are connected to the internal 10-bit ADC, so analogRead() returns a value from 0 to 1023, mapped to 0V–5V.
How Analog Pins Work
The ADC resolution gives you about 4.9 mV per step. For most sensor readings — temperature, light, pressure, potentiometers — this is more than enough.
The formula is the same as the UNO: ADC Value = (Input Voltage / VREF) × 1023
Default VREF is 5V. You can change it using the AREF pin.
For a full analogRead() walkthrough with live examples, see our Arduino ADC tutorial.
A6 and A7 — The Special Ones
Here is something important that catches a lot of people off guard.
A6 and A7 are analog-only pins. Unlike A0–A5, you cannot use A6 and A7 as digital I/O pins. They can only be used with analogRead(). There is no digital input or output capability on these two pins.
So if you need extra analog inputs and you are okay giving up digital flexibility, A6 and A7 are there for you. But do not make the mistake of trying to use them as digital pins — it will not work.
AREF Pin
The AREF pin lets you supply a custom reference voltage to the ADC. Lower the AREF voltage and you increase the effective resolution for small signals.
For example, applying 2.5V to AREF doubles the ADC resolution for signals in the 0–2.5V range. Just make sure your input signal never exceeds whatever voltage you set on AREF.
Using A0–A5 as Digital I/O
Just like the UNO, pins A0 to A5 can work as digital I/O pins. Just use pinMode(A0, OUTPUT) or pinMode(A0, INPUT) and they behave exactly like digital pins.
Note that this does not apply to A6 and A7. Those two are strictly analog.
Key Points to Remember
- A6 and A7 are analog only — no digital I/O on these pins
- A0–A5 can be used as digital I/O if needed
- Never apply more than 5V to any analog pin
- A floating analog pin gives noisy readings — always connect it to something
Communication Pins
The Nano supports the same three serial protocols as the UNO — UART, I2C, and SPI. The pin mapping is identical.
UART Pins (RX / TX)
- RX → Digital Pin D0
- TX → Digital Pin D1
UART is what handles serial communication between the Nano and your PC via the USB cable. On original Arduino Nano boards, this goes through an FT232RL USB-to-serial chip. Many cheaper clones use a CH340G chip instead — which works fine, but you may need to install the CH340 drivers manually on Windows or macOS.
Same rule as the UNO — disconnect anything on D0 and D1 before uploading code, or you will get upload errors.
When to Use SoftwareSerial
If you need a second UART — for example, to talk to a GPS module while still sending debug output to the Serial Monitor — use the SoftwareSerial library. It lets you emulate UART on any two digital pins. It works well at lower baud rates but is not recommended for anything above 115200.
We have a full Arduino UART tutorial covering send, receive, and practical serial examples.
I2C Pins (SDA / SCL)
- SDA (Serial Data) → Analog Pin A4
- SCL (Serial Clock) → Analog Pin A5
Same as the UNO. I2C lets you connect many devices on just two wires, each with its own unique address. Use the Wire library to handle I2C communication.
For bus scanning, master/slave setup, and troubleshooting, see our Arduino I2C tutorial.
Common I2C devices you can connect to the Nano:
- OLED displays (SSD1306)
- RTC modules (DS3231)
- IMU sensors (MPU-6050)
- I2C LCD displays
- Pressure sensors (BMP280)
If you use A4 and A5 for I2C, you lose them as analog inputs. Keep that in mind when planning your project.
SPI Pins (MOSI, MISO, SCK, SS)
- MOSI → Pin D11
- MISO → Pin D12
- SCK → Pin D13
- SS → Pin D10
SPI is the fastest of the three protocols. Use it when you need to talk to high-speed devices like SD cards, TFT displays, or nRF24L01 wireless modules.
One thing to keep in mind — D10 must always be configured as an output when using SPI, even if you are not using it as the SS pin. If D10 is set as an input and it goes LOW, the ATmega328P will automatically switch to SPI slave mode and your code will stop working correctly. This is a common source of confusion.
ICSP Header
The Nano also has a 6-pin ICSP header on the board. It exposes MOSI, MISO, SCK, RESET, VCC, and GND.
This is used to flash the bootloader onto the chip using an external programmer. You will probably never touch it unless you replace a damaged chip or accidentally erase the bootloader.
Timer and Input Capture Pins
A few pins on the Nano tie directly into the hardware timer modules inside the ATmega328P. These are the same as the UNO.
Timer/Counter Pins (T0 and T1)
- T0 → Digital Pin D4 (external clock for Timer0)
- T1 → Digital Pin D5 (external clock for Timer1)
When you configure a timer to use an external clock, it counts pulses coming in on the T0 or T1 pin instead of the internal 16 MHz oscillator. This is useful for frequency counting, counting pulses from encoders, or using an external time base.
Input Capture Pin (ICP1)
- ICP1 → Digital Pin D8
When the ICP1 pin detects a signal edge, the hardware automatically saves the current Timer1 value to a register. No CPU involvement, no delay — it is instantaneous.
This is really useful for measuring signal pulse widths or reading sensors like ultrasonic modules more accurately than pulseIn() allows.
Arduino Nano vs Arduino UNO
Since a lot of people come to the Nano after working with the UNO, here is a quick side-by-side of the important differences.
| Feature | Arduino UNO | Arduino Nano |
|---|---|---|
| Size | 68.6mm × 53.4mm | 45mm × 18mm |
| Analog Pins | 6 (A0–A5) | 8 (A0–A7) |
| A6 and A7 | Not available | Analog-only (no digital) |
| USB Connector | Type-B | Mini-USB (or Micro-USB on clones) |
| Breadboard Friendly | No | Yes |
| Microcontroller | ATmega328P | ATmega328P |
| PWM Pins | 6 | 6 |
| Digital I/O Pins | 14 | 14 |
| 3.3V Source | Onboard regulator | FT232RL chip (50mA max) |
| ICSP Header | Yes | Yes |
The core hardware is identical. The Nano just packages it smaller, adds two extra analog-only pins, and removes the Type-B USB port in favour of Mini-USB.
Arduino Nano Pinout Summary Table
Here is the full reference table for all Arduino Nano pins.
Digital Pins
| Arduino Pin | ATmega328P Port | PWM | Alternate Function | Description |
|---|---|---|---|---|
| D0 | PD0 | – | RX | UART Receive |
| D1 | PD1 | – | TX | UART Transmit |
| D2 | PD2 | – | INT0 | External Interrupt 0 |
| D3 | PD3 | ✓ | INT1 | External Interrupt 1 |
| D4 | PD4 | – | T0 | Timer0 External Clock |
| D5 | PD5 | ✓ | T1 | Timer1 External Clock |
| D6 | PD6 | ✓ | – | PWM Output |
| D7 | PD7 | – | – | General Purpose Digital I/O |
| D8 | PB0 | – | ICP1 | Input Capture Unit |
| D9 | PB1 | ✓ | – | PWM Output |
| D10 | PB2 | ✓ | SS | SPI Slave Select |
| D11 | PB3 | ✓ | MOSI | SPI Master Out Slave In |
| D12 | PB4 | – | MISO | SPI Master In Slave Out |
| D13 | PB5 | – | SCK / LED | SPI Clock / Onboard LED |
Analog Pins
| Arduino Pin | ATmega328P Port | Digital I/O? | Alternate Function | Description |
|---|---|---|---|---|
| A0 | PC0 | Yes | – | Analog Input / Digital I/O |
| A1 | PC1 | Yes | – | Analog Input / Digital I/O |
| A2 | PC2 | Yes | – | Analog Input / Digital I/O |
| A3 | PC3 | Yes | – | Analog Input / Digital I/O |
| A4 | PC4 | Yes | SDA | I2C Data / Analog Input |
| A5 | PC5 | Yes | SCL | I2C Clock / Analog Input |
| A6 | ADC6 | No | – | Analog Input only |
| A7 | ADC7 | No | – | Analog Input only |
| AREF | – | – | AREF | Analog Reference Voltage |
Power Pins
| Pin | Description |
|---|---|
| VIN | External supply input (6V–20V, recommended 7–12V) |
| 5V | Regulated 5V output |
| 3.3V | Regulated 3.3V output (max ~50 mA from FT232RL) |
| GND | Ground (2 pins, both connected internally) |
| RESET | Pull LOW to reset the microcontroller |
Arduino Nano Pinout: Frequently Asked Questions
Most of the time, yes. The core hardware is the same ATmega328P, so code written for the UNO will run on the Nano without modification. The only time you will run into trouble is if your UNO code uses a shield that relies on UNO-specific pin headers, or if you try to use A6 or A7 as digital pins — which will not work on the Nano.
Nano clones often use the CH340G USB chip instead of the FT232RL used on genuine boards. Windows and macOS may not have the CH340 driver installed by default. Download and install the CH340 driver, plug the Nano back in, and it should show up as a COM port. In the Arduino IDE, also make sure you have selected the right board — Arduino Nano — and the correct processor (ATmega328P or ATmega328P Old Bootloader, depending on the clone).
A0 to A5 are true GPIO pins that can work as analog inputs OR digital I/O. A6 and A7 are analog-input only. There is no digital driver circuit connected to them inside the ATmega328P, so you simply cannot use digitalRead() or digitalWrite() on A6 or A7. They are wired directly to the ADC and that is it.
The standard Arduino Nano operates at 5V logic. If you connect a 3.3V sensor directly to a Nano pin and the sensor output swings to 3.3V, the Nano will still read it as HIGH — that is fine. But if the Nano drives a pin HIGH (5V) into a 3.3V-only input on your sensor, you risk damaging the sensor. Use a level shifter to be safe. For projects that are fully 3.3V, consider the Arduino Nano 33 IoT or Nano Every instead.
On most genuine Nano boards and good-quality clones, the auto-reset works through the DTR line on the USB-serial chip. If yours is not auto-resetting, try a different USB cable first — surprisingly often it is a bad cable. If that does not fix it, try pressing the reset button just as the Arduino IDE starts uploading (you will see “Uploading…” in the status bar). Also check that you have the right bootloader selected in the IDE.
Conclusion
The Arduino Nano packs a lot into a very small package. Same ATmega328P chip as the UNO, same digital and communication pins, same PWM — but smaller, breadboard-friendly, and with two extra analog-only pins.
Once you understand the pinout — especially the A6/A7 limitation and the importance of keeping D10 as output for SPI — working with the Nano becomes very straightforward.
If you are moving over from the UNO, most of your knowledge carries over directly. The Nano is a natural next step, and it opens the door to building much more compact and portable projects.
Browse More Arduino Core Tutorials
Arduino digitalWrite() and digitalRead(): Complete Guide with Examples
Arduino UART Tutorial: Serial Communication, Send, Receive & LED Control
Arduino ADC and analogRead() Explained: Complete Guide with Examples
Arduino I2C Tutorial: Wire Library, Master/Slave, Scanner & Troubleshooting
Arduino delayMicroseconds() Tutorial: Precise Timing, Pulses & Alternatives
Arun is an embedded systems engineer with 10+ years of experience in STM32, ESP32, and AVR microcontrollers. He created ControllersTech to share practical tutorials on embedded software, HAL drivers, RTOS, and hardware design — grounded in real industrial automation experience.
Recommended Tools
Essential dev tools
Categories
Browse by platform




















