The Arduino Micro is a compact, breadboard-friendly Arduino based on the ATmega32U4.
Its biggest feature is the same one that makes the Arduino Leonardo distinctive:
|
1 2 3 4 |
native USB |
The ATmega32U4 itself handles:
- USB programming;
- virtual serial;
- USB keyboard HID;
- USB mouse HID;
- custom USB device classes.
The basic specifications are:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
ATmega32U4 8-bit AVR 16 MHz 5 V logic 32 KB Flash 2.5 KB SRAM 1 KB EEPROM 20 digital I/O 7 PWM outputs 12 analog inputs native USB 48 × 18 mm |
The Micro is essentially a compact Leonardo-class board, but its physical pinout exposes some signals more conveniently for breadboard use.
Arduino Micro Quick Pinout
| Function | Pins |
|---|---|
| Main digital I/O | D0-D13 |
| PWM | D3, D5, D6, D9, D10, D11, D13 |
| Analog inputs | A0-A11 |
| Hardware UART | D0 RX, D1 TX |
| I2C | D2 SDA, D3 SCL |
| SPI CIPO/MISO | D14 |
| SPI SCK | D15 |
| SPI COPI/MOSI | D16 |
| SPI SS | D17 / RX_LED |
| External interrupts | D0, D1, D2, D3, D7 |
| Built-in LED | D13 |
| Logic voltage | 5 V |
| Native USB | Micro-USB directly to ATmega32U4 |
ATmega32U4
The Arduino Micro uses:
|
1 2 3 4 |
ATmega32U4 |
running at:
|
1 2 3 4 |
16 MHz |
with:
|
1 2 3 4 5 6 7 |
32 KB Flash 4 KB used by bootloader 2.5 KB SRAM 1 KB EEPROM |
This is an 8-bit AVR architecture, so the programming model remains familiar to users of classic Arduino boards.
Native USB Is the Main Feature
Unlike an UNO R3, the Micro does not need a separate USB-to-serial microcontroller.
The ATmega32U4 directly provides:
|
1 2 3 4 5 6 |
USB device + your application |
on the same MCU.
This makes Micro especially useful for:
- macro pads;
- custom keyboards;
- button boxes;
- simulator controls;
- game controllers;
- assistive USB devices;
- custom HID interfaces.
Main Digital Pins D0-D13
| Arduino pin | ATmega32U4 pin | Important functions |
|---|---|---|
| D0 | PD2 | RX / INT2 |
| D1 | PD3 | TX / INT3 |
| D2 | PD1 | SDA / INT1 |
| D3 | PD0 | PWM / SCL / INT0 |
| D4 | PD4 | A6 / ADC8 |
| D5 | PC6 | PWM |
| D6 | PD7 | PWM / A7 / ADC10 |
| D7 | PE6 | INT6 |
| D8 | PB4 | A8 / ADC11 / PCINT4 |
| D9 | PB5 | PWM / A9 / ADC12 / PCINT5 |
| D10 | PB6 | PWM / A10 / ADC13 / PCINT6 |
| D11 | PB7 | PWM / PCINT7 |
| D12 | PD6 | A11 / ADC9 |
| D13 | PC7 | PWM / LED_BUILTIN |
Seven PWM Pins
The current Arduino AVR core defines PWM on:
|
1 2 3 4 5 6 7 8 9 10 |
D3 D5 D6 D9 D10 D11 D13 |
for a total of:
|
1 2 3 4 |
7 PWM outputs |
A typical example is:
|
1 2 3 4 5 6 7 8 9 10 |
void setup() { pinMode(9, OUTPUT); } void loop() { analogWrite(9, 128); } |
No True DAC
As with other classic AVR boards:
|
1 2 3 4 |
analogWrite() |
generates PWM.
It does not output a true analogue voltage.
For a real DAC, use:
- an external SPI/I2C DAC;
- PWM plus a low-pass filter;
- a dedicated audio DAC.
12 Analog Inputs
The Micro provides:
|
1 2 3 4 |
A0-A11 |
for a total of:
|
1 2 3 4 |
12 analog inputs |
The first six have dedicated analogue labels.
The remaining six are shared with digital pins.
A0-A5
| Analog pin | Digital alias | ATmega32U4 pin |
|---|---|---|
| A0 | D18 | PF7 / ADC7 |
| A1 | D19 | PF6 / ADC6 |
| A2 | D20 | PF5 / ADC5 |
| A3 | D21 | PF4 / ADC4 |
| A4 | D22 | PF1 / ADC1 |
| A5 | D23 | PF0 / ADC0 |
The Arduino core can therefore use:
|
1 2 3 4 |
A0 |
as a normal digital pin as well as an analogue input.
A6-A11 Reuse Digital Pins
The additional six analogue channels are:
|
1 2 3 4 5 6 7 8 9 |
A6 = D4 A7 = D6 A8 = D8 A9 = D9 A10 = D10 A11 = D12 |
So if D9 is being used for PWM, for example, the same physical pin cannot simultaneously act as an independent A9 input.
Complete Analog Mapping
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
A0 = D18 = PF7 = ADC7 A1 = D19 = PF6 = ADC6 A2 = D20 = PF5 = ADC5 A3 = D21 = PF4 = ADC4 A4 = D22 = PF1 = ADC1 A5 = D23 = PF0 = ADC0 A6 = D4 = PD4 = ADC8 A7 = D6 = PD7 = ADC10 A8 = D8 = PB4 = ADC11 A9 = D9 = PB5 = ADC12 A10 = D10 = PB6 = ADC13 A11 = D12 = PD6 = ADC9 |
ADC Resolution
The ATmega32U4 ADC is:
|
1 2 3 4 |
10-bit |
so:
|
1 2 3 4 |
analogRead() |
normally returns:
|
1 2 3 4 |
0-1023 |
for an input between ground and the selected analogue reference.
AREF
The board provides:
|
1 2 3 4 |
AREF |
for an external ADC reference.
Use:
|
1 2 3 4 |
analogReference() |
when configuring an alternate analogue-reference source.
Serial vs Serial1
This is one of the most important ATmega32U4 rules.
On the Arduino Micro:
|
1 2 3 4 5 6 7 8 |
Serial → USB CDC virtual serial Serial1 → physical UART on D0/D1 |
That means you can use USB Serial Monitor and the hardware UART independently.
USB Serial Example
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void setup() { Serial.begin(115200); while (!Serial) { } Serial.println( "USB serial ready" ); } void loop() { } |
Hardware UART Example
For a GPS, modem or other TTL serial device:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void setup() { Serial.begin(115200); Serial1.begin(9600); } void loop() { while (Serial1.available()) { Serial.write( Serial1.read() ); } } |
The UART pins are:
|
1 2 3 4 5 6 7 8 9 10 |
D0 → RX → PD2 D1 → TX → PD3 |
D0 and D1 Do Not Carry USB Serial
This is important when migrating from UNO.
You can use:
|
1 2 3 4 |
Serial |
over USB while D0 and D1 are connected to another serial device through:
|
1 2 3 4 |
Serial1 |
I2C
The Micro I2C pins are:
|
1 2 3 4 5 6 7 8 |
D2 → SDA D3 → SCL |
Use them through:
|
1 2 3 4 |
#include <Wire.h> |
For example:
|
1 2 3 4 5 6 7 8 9 10 11 |
#include <Wire.h> void setup() { Wire.begin(); } void loop() { } |
SPI
The Micro hardware SPI signals are:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
D14 → CIPO / MISO → PB3 D15 → SCK → PB1 D16 → COPI / MOSI → PB2 D17 → SS → PB0 |
SPI Is Also Available on ICSP
The same hardware SPI signals are present on the:
|
1 2 3 4 |
6-pin ICSP header |
This is important because the ATmega32U4 SPI peripheral is not mapped to:
|
1 2 3 4 5 6 |
D11 D12 D13 |
as it is on the UNO R3.
Micro Exposes SPI More Conveniently Than Leonardo
This is a useful physical difference between the two ATmega32U4 boards.
On the Micro, the board exposes nearby pins labelled:
|
1 2 3 4 5 6 |
CIPO / MISO SCK COPI / MOSI |
in addition to the ICSP header.
The Micro also exposes:
|
1 2 3 4 |
RX_LED / SS |
as an additional pin compared with Leonardo.
RX_LED / SS Pin
The SS signal is:
|
1 2 3 4 5 |
D17 → PB0 |
and shares the same microcontroller pin used by the:
|
1 2 3 4 |
RX LED |
USB activity indicator.
So D17 can be used as a digital/SS pin, but remember it is also electrically associated with the onboard RX LED circuit.
SPI Example
|
1 2 3 4 5 6 7 8 9 10 11 |
#include <SPI.h> void setup() { SPI.begin(); } void loop() { } |
For a custom chip-select pin, you can use any appropriate digital GPIO, not only the hardware SS pin.
Why UNO SPI Assumptions Fail
A library or wiring guide that assumes:
|
1 2 3 4 5 6 |
D11 = MOSI D12 = MISO D13 = SCK |
is describing the UNO-style AVR mapping, not the Micro.
On Micro, use:
|
1 2 3 4 5 6 |
D14-D16 or ICSP |
for hardware SPI.
External Interrupts
The current Arduino AVR core supports external interrupts on:
|
1 2 3 4 5 6 7 8 |
D0 D1 D2 D3 D7 |
| Arduino pin | ATmega32U4 interrupt |
|---|---|
| D0 | INT2 |
| D1 | INT3 |
| D2 | INT1 |
| D3 | INT0 |
| D7 | INT6 |
Use:
|
1 2 3 4 5 6 7 8 |
attachInterrupt( digitalPinToInterrupt(pin), isr, CHANGE ); |
Pin-Change Interrupts
The ATmega32U4 also provides pin-change interrupt support on selected Port B pins, including signals associated with:
|
1 2 3 4 5 |
D8-D11 D14-D17 |
For most sketches, the five dedicated external interrupt pins are easier to use.
Built-In LED
The main onboard LED is:
|
1 2 3 4 5 6 |
LED_BUILTIN → D13 → PC7 |
so the standard Blink example uses:
|
1 2 3 4 |
digitalWrite(LED_BUILTIN, HIGH); |
Native USB Keyboard
The Micro can act as a USB keyboard with:
|
1 2 3 4 |
#include <Keyboard.h> |
A basic example is:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <Keyboard.h> void setup() { pinMode(4, INPUT_PULLUP); Keyboard.begin(); } void loop() { if (digitalRead(4) == LOW) { Keyboard.write('A'); delay(300); } } |
Use a Safety Condition for HID Sketches
A bad keyboard sketch can continuously type into the host computer.
Use a physical enable input such as:
- button;
- jumper;
- startup switch;
- safe-mode pin.
This makes HID development much safer.
Native USB Mouse
The board can also emulate a mouse using:
|
1 2 3 4 |
#include <Mouse.h> |
This is useful for:
- custom pointing devices;
- simulators;
- accessibility projects;
- specialised controls.
USB Upload Behaviour
Because the ATmega32U4 handles both your sketch and USB, resetting the board temporarily disconnects it from the computer.
The Arduino upload process uses the normal ATmega32U4:
|
1 2 3 4 |
1200 bps touch |
behaviour to enter the bootloader.
The USB serial port can therefore disappear and reappear during upload.
Recovering a Difficult USB Sketch
If a sketch repeatedly crashes USB or sends unwanted HID data:
- press reset to enter the bootloader window;
- start the upload while the bootloader is active;
- replace the problem sketch with a simple safe sketch.
The exact timing can vary by operating system and IDE.
5 V Logic
The Micro operates at:
|
1 2 3 4 |
5 V |
which makes it convenient for classic:
- 5 V TTL devices;
- AVR sensor boards;
- older displays;
- legacy modules.
Do not assume modern 3.3 V peripherals are 5 V tolerant.
When connecting ESP32-class devices or modern sensors, check their input-voltage limits.
3.3 V Pin
The onboard:
|
1 2 3 4 |
3.3 V |
rail is rated by Arduino at:
|
1 2 3 4 |
50 mA |
maximum.
It is suitable for small low-power peripherals, not large 3.3 V loads.
GPIO Current
Arduino’s current store specification lists:
|
1 2 3 4 |
20 mA per I/O pin |
for the Micro.
Older pinout documents and historical ATmega32U4 material may show:
|
1 2 3 4 |
40 mA |
as an absolute per-pin figure.
For new designs, use:
|
1 2 3 4 |
20 mA |
as the Arduino board-level maximum guidance and operate well below it when possible.
Do Not Drive Power Loads Directly
Use external drivers for:
- relays;
- motors;
- solenoids;
- high-current LEDs.
GPIO pins are logic outputs, not power supplies.
Powering the Micro
The board can be powered through:
- Micro-USB;
- VIN;
- regulated 5 V supply where appropriate.
Arduino’s current specifications give:
|
1 2 3 4 5 6 7 8 |
recommended VIN: 7-12 V documented limit: 6-20 V |
although the compact board is most commonly powered from USB or a regulated supply.
Breadboard-Friendly Form Factor
The Micro measures approximately:
|
1 2 3 4 |
48 mm × 18 mm |
and is designed to fit across a standard solderless breadboard.
This is its biggest physical advantage over Leonardo.
Micro vs Leonardo
| Feature | Arduino Micro | Arduino Leonardo |
|---|---|---|
| MCU | ATmega32U4 | ATmega32U4 |
| Clock | 16 MHz | 16 MHz |
| Logic | 5 V | 5 V |
| Flash | 32 KB | 32 KB |
| SRAM | 2.5 KB | 2.5 KB |
| EEPROM | 1 KB | 1 KB |
| Native USB | Yes | Yes |
| PWM | 7 | 7 |
| Analog inputs | 12 | 12 |
| Size | 48 × 18 mm | Large UNO-style board |
| Breadboard friendly | Yes | No |
| SPI edge pins | D14-D16 exposed | Primarily ICSP header |
| RX_LED / SS pin | Exposed | Not exposed the same way |
Micro vs Leonardo Software Compatibility
Because they share the same MCU and Arduino AVR pin variant, most code behaves almost identically.
Examples include:
- Keyboard library;
- Mouse library;
- Serial / Serial1 behaviour;
- PWM;
- ADC;
- Wire;
- SPI.
The biggest differences are:
|
1 2 3 4 5 6 7 |
physical layout power connector arrangement breadboard use SPI pin accessibility |
Micro vs UNO R3 Pinout Traps
| Function | Arduino Micro | UNO R3 |
|---|---|---|
| USB | Native ATmega32U4 | Separate USB interface MCU |
| USB serial | Serial | Serial via hardware UART bridge |
| Physical UART | Serial1 on D0/D1 | Serial on D0/D1 |
| I2C | D2/D3 | A4/A5 / SDA-SCL |
| SPI | D14-D16 / ICSP | D11-D13 / ICSP |
| PWM outputs | 7 | 6 |
| Analog inputs | 12 | 6 |
| USB keyboard/mouse | Native | Not directly from ATmega328P |
Quick Digital Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
D0 RX / INT2 D1 TX / INT3 D2 SDA / INT1 D3 PWM / SCL / INT0 D4 A6 D5 PWM D6 PWM / A7 D7 INT6 D8 A8 D9 PWM / A9 D10 PWM / A10 D11 PWM D12 A11 D13 PWM / LED_BUILTIN D14 CIPO / MISO D15 SCK D16 COPI / MOSI D17 SS / RX_LED |
Quick Analog Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
A0 = D18 = ADC7 A1 = D19 = ADC6 A2 = D20 = ADC5 A3 = D21 = ADC4 A4 = D22 = ADC1 A5 = D23 = ADC0 A6 = D4 = ADC8 A7 = D6 = ADC10 A8 = D8 = ADC11 A9 = D9 = ADC12 A10 = D10 = ADC13 A11 = D12 = ADC9 |
Quick Communications Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
USB Serial: Serial Hardware UART: Serial1 D0 RX D1 TX I2C: D2 SDA D3 SCL SPI: D14 CIPO/MISO D15 SCK D16 COPI/MOSI D17 SS SPI also available: ICSP header |
When Arduino Micro Still Makes Sense
The Micro remains useful when you want:
- native USB HID;
- 5 V AVR logic;
- small size;
- breadboard compatibility;
- simple keyboard/mouse emulation;
- a mature AVR ecosystem.
It is not ideal when you need:
- Wi-Fi;
- Bluetooth;
- large RAM;
- high CPU performance;
- 32-bit peripherals;
- large graphical interfaces.
Final Thoughts
The Arduino Micro is best understood as:
|
1 2 3 4 5 |
Leonardo-class ATmega32U4 functionality in a compact breadboard-friendly board |
The most important pinout rules are:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Serial → native USB CDC Serial1 → D0/D1 UART I2C → D2/D3 SPI → D14/D15/D16 → plus ICSP D17 → SS / RX_LED PWM → D3, D5, D6, D9, D10, D11, D13 A0-A5 → digital aliases D18-D23 A6-A11 → reuse D4, D6, D8, D9, D10, D12 logic → 5 V USB HID → native ATmega32U4 feature |
If you understand those differences from UNO-style AVR boards, the Micro is straightforward to use and remains one of the simplest choices for compact native-USB Arduino projects.
For the larger board using the same MCU, see our Arduino Leonardo pinout guide.