The Arduino Nano RP2040 Connect combines Raspberry Pi’s RP2040 microcontroller with Arduino’s Nano form factor and a separate u-blox NINA-W102 wireless module.
It is an unusual dual-processor board:
- the RP2040 runs your main Arduino sketch;
- the NINA-W102, based on an ESP32, provides Wi-Fi and Bluetooth connectivity;
- the NINA module also extends the board’s analog-input capability and controls the onboard RGB LED.
The board also includes:
- an LSM6DSOX 6-axis IMU;
- an MP34DT06J digital MEMS microphone;
- an ATECC608A secure element;
- 16 MB external QSPI Flash;
- native RP2040 USB;
- RP2040 PIO programmable-I/O hardware.
Arduino currently marks Nano RP2040 Connect as End of Life, but it remains an important reference design because it shows how RP2040 can be paired with a separate ESP32-class radio module while preserving the compact Nano footprint.
Arduino Nano RP2040 Connect Specifications
| Feature | Nano RP2040 Connect |
|---|---|
| Main MCU | Raspberry Pi RP2040 |
| CPU | Dual-core Arm Cortex-M0+ |
| Maximum clock | 133 MHz |
| SRAM | 264 kB |
| External Flash | 16 MB QSPI |
| Logic voltage | 3.3 V |
| RP2040 ADC | 4 channels, 12 bit |
| Nano analog labels | A0-A7 |
| UART | D0 RX, D1 TX |
| SPI | D10-D13 |
| I²C | A4 SDA, A5 SCL |
| Wi-Fi | 2.4 GHz through NINA-W102 |
| Bluetooth | Through NINA-W102 |
| IMU | LSM6DSOX 6-axis |
| Microphone | MP34DT06JTR PDM microphone |
| Crypto | ATECC608A |
| USB | Native RP2040 USB 1.1 host/device hardware |
| PIO | 2 PIO blocks, 8 state machines total |
Complete Arduino-to-RP2040 Pin Mapping
| Arduino pin | RP2040 GPIO | Main functions |
|---|---|---|
| D0 / RX | GPIO1 | UART RX, digital I/O, PWM, PIO |
| D1 / TX | GPIO0 | UART TX, digital I/O, PWM, PIO |
| D2 | GPIO25 | Digital I/O, PWM, PIO |
| D3 | GPIO15 | Digital I/O, PWM, PIO |
| D4 | GPIO16 | Digital I/O, PWM, PIO |
| D5 | GPIO17 | Digital I/O, PWM, PIO |
| D6 | GPIO18 | Digital I/O, PWM, PIO |
| D7 | GPIO19 | Digital I/O, PWM, PIO |
| D8 | GPIO20 | Digital I/O, PWM, PIO |
| D9 | GPIO21 | Digital I/O, PWM, PIO |
| D10 | GPIO5 | SPI SS/CS, digital I/O, PWM |
| D11 | GPIO7 | SPI COPI/MOSI, digital I/O, PWM |
| D12 | GPIO4 | SPI CIPO/MISO, digital I/O, PWM |
| D13 | GPIO6 | SPI SCK, LED_BUILTIN, digital I/O, PWM |
| A0 / D14 | GPIO26 | RP2040 ADC0, digital I/O, PWM |
| A1 / D15 | GPIO27 | RP2040 ADC1, digital I/O, PWM |
| A2 / D16 | GPIO28 | RP2040 ADC2, digital I/O, PWM |
| A3 / D17 | GPIO29 | RP2040 ADC3, digital I/O, PWM |
| A4 / D18 | GPIO12 + NINA ADC | I²C SDA, NINA-assisted analog input |
| A5 / D19 | GPIO13 + NINA ADC | I²C SCL, NINA-assisted analog input |
| A6 / D20 | NINA-W102 path | Analog input via NINA |
| A7 / D21 | NINA-W102 path | Analog input via NINA |
Physical Header Layout
With the Micro-USB connector at the top, Nano RP2040 Connect follows the familiar Nano dual-row format:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Left side Right side D13 / SCK D12 / CIPO 3V3 D11 / COPI AREF D10 / SS A0 D9 A1 D8 A2 D7 A3 D6 A4 / SDA D5 A5 / SCL D4 A6 D3 A7 D2 5V / VUSB GND REC / BOOTSEL RESET GND D0 / RX VIN D1 / TX |
3.3 V Logic Only
Nano RP2040 Connect is a 3.3 V logic board.
Arduino’s pinout warns that the maximum GPIO input voltage is:
|
1 2 3 4 |
3.3 V |
and the maximum I/O supply voltage is approximately:
|
1 2 3 4 |
3.63 V |
Do not connect 5 V logic directly to RP2040 GPIO.
GPIO Current Limits
Arduino documents a maximum combined current of approximately:
|
1 2 3 4 |
50 mA |
being sunk through GPIO and QSPI pins.
That is a total-device limit, not a sensible per-pin operating target.
Use external drivers for relays, motors, solenoids and high-power LEDs.
UART: D0 and D1
The default external UART is:
|
1 2 3 4 5 |
D0 = RX = GPIO1 D1 = TX = GPIO0 |
Use:
|
1 2 3 4 |
Serial1.begin(115200); |
for external serial hardware.
USB Serial Is Separate
The RP2040 includes native USB.
So:
|
1 2 3 4 5 6 7 8 |
Serial → USB virtual serial Serial1 → D0 / D1 UART |
This lets an external UART device remain connected while Serial Monitor uses USB independently.
SPI Pins
The default external SPI interface uses:
|
1 2 3 4 5 6 7 |
D10 = SS / CS D11 = COPI / MOSI D12 = CIPO / MISO D13 = SCK |
Mapped to RP2040 GPIO:
|
1 2 3 4 5 6 7 |
D10 → GPIO5 D11 → GPIO7 D12 → GPIO4 D13 → GPIO6 |
Basic SPI Example
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <SPI.h> const int chipSelect = D10; void setup() { pinMode(chipSelect, OUTPUT); digitalWrite(chipSelect, HIGH); SPI.begin(); } |
D13 Is Also LED_BUILTIN
The standard onboard user LED is:
|
1 2 3 4 5 |
D13 → GPIO6 |
Because D13 is also SPI SCK, the LED can flicker during SPI activity.
I²C Pins
The default user I²C bus is:
|
1 2 3 4 5 |
A4 = SDA = GPIO12 A5 = SCL = GPIO13 |
Use:
|
1 2 3 4 5 6 7 8 |
#include <Wire.h> void setup() { Wire.begin(); } |
A4 and A5 Are Shared with Onboard I²C
Arduino’s documentation notes that A4/A5 are used as the RP2040 I²C bus and have onboard pull-up resistors.
They are therefore best treated primarily as I²C pins when the onboard peripherals are in use.
Eight Analog Labels, but Only Four Native RP2040 ADC Inputs
This is one of the most important Nano RP2040 Connect quirks.
The RP2040 itself provides native ADC access on:
|
1 2 3 4 5 6 7 |
A0 A1 A2 A3 |
These map directly to:
|
1 2 3 4 5 6 7 |
A0 → GPIO26 / ADC0 A1 → GPIO27 / ADC1 A2 → GPIO28 / ADC2 A3 → GPIO29 / ADC3 |
A0-A3: Native RP2040 ADC
These are the best analog inputs when you want direct and predictable RP2040 ADC behaviour.
Example:
|
1 2 3 4 5 6 |
analogReadResolution(12); int value = analogRead(A0); |
The RP2040 hardware ADC is 12 bit, so a native result spans:
|
1 2 3 4 |
0 to 4095 |
Arduino may use a lower compatibility default unless you change the resolution explicitly.
A4-A7: NINA-Assisted Analog Inputs
A4-A7 are not all connected to the RP2040 ADC in the same way as A0-A3.
The NINA-W102 module provides extra ADC capability that Arduino uses for these additional Nano-style analog inputs.
Conceptually:
|
1 2 3 4 5 6 7 8 |
A0-A3 → RP2040 ADC A4-A7 → NINA-W102 ADC path |
This means all eight analog-labelled pins are not electrically identical.
A4 and A5 Are Also the I²C Bus
A4/A5 are particularly multifunctional:
|
1 2 3 4 5 6 7 8 9 10 |
A4 → I2C SDA → NINA-assisted analog input A5 → I2C SCL → NINA-assisted analog input |
If I²C is active, do not expect A4/A5 to behave as independent analog inputs.
A6 and A7 Are Not Normal RP2040 GPIO
A6/A7 should be treated primarily as analog inputs through the NINA path.
They are not equivalent to A0-A3 as ordinary RP2040 GPIO/ADC pins.
ADC Input Range Differences
Arduino has documented a lower analog range for the NINA-assisted inputs than for A0-A3.
With current NINA firmware, A4-A7 can reach approximately the mid-2 V range rather than the full 3.3 V native RP2040 range.
Older NINA firmware had an even lower range.
If you rely on A4-A7:
- update NINA firmware;
- verify the actual input range on your board;
- calibrate against a known voltage source.
RP2040 ADC Linearity
The RP2040 ADC is useful for sensors but should not be treated as a precision instrumentation ADC.
RP2040 has documented ADC differential-nonlinearity behaviour that can produce small code irregularities.
For precision measurement:
- average samples;
- calibrate gain/offset;
- use a stable reference/supply;
- consider an external precision ADC.
No True DAC
RP2040 does not include a normal voltage DAC.
If you need analog output, use:
- PWM plus a low-pass filter;
- an external DAC;
- a specialised PIO/audio solution.
PWM
RP2040 provides eight PWM slices, each with two channels.
Most exposed RP2040 GPIO can be used for PWM.
The main exception in the Nano mapping is that A4-A7 are not ordinary RP2040 PWM outputs.
Example:
|
1 2 3 4 |
analogWrite(D5, 128); |
PIO: Programmable I/O
The RP2040 contains two Programmable I/O blocks:
|
1 2 3 4 5 |
PIO0 PIO1 |
with four state machines each, giving:
|
1 2 3 4 |
8 PIO state machines total |
PIO is one of the RP2040’s defining features.
It can implement timing-sensitive protocols such as:
- WS2812/NeoPixel output;
- custom serial protocols;
- quadrature encoders;
- additional UARTs;
- custom SPI;
- specialised pulse generation;
- I²S-like digital audio interfaces.
Why PIO Matters
PIO runs independently from the two CPU cores and can transfer data through FIFOs and DMA.
This allows the RP2040 to handle strange or timing-critical I/O protocols without constantly interrupting application code.
Dual-Core RP2040
RP2040 has two Cortex-M0+ cores running from the same memory system.
The Arduino Mbed core presents the familiar setup()/loop() model by default, but advanced software can use the second core for:
- signal processing;
- communications;
- control loops;
- background acquisition.
16 MB External Flash
Nano RP2040 Connect includes:
|
1 2 3 4 |
16 MB QSPI Flash |
This is far larger than the 2 MB Flash found on the original Raspberry Pi Pico.
It provides useful space for:
- larger applications;
- filesystems;
- MicroPython;
- machine-learning models;
- web assets.
NINA-W102 Wireless Module
The NINA-W102 is an ESP32-based wireless module.
It provides:
- 2.4 GHz 802.11 b/g/n Wi-Fi;
- Bluetooth 4.2-class radio capability;
- its own dual-core Xtensa processor;
- its own SRAM and Flash;
- extra ADC channels;
- control of the onboard RGB LED.
Your normal Arduino sketch still runs on the RP2040.
WiFiNINA Architecture
The normal software model is:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Arduino sketch ↓ RP2040 ↓ WiFiNINA protocol ↓ NINA-W102 ↓ Wi-Fi radio |
This is different from Nano ESP32, where the ESP32-S3 is both the application MCU and the wireless processor.
Basic Wi-Fi Example
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <WiFiNINA.h> char ssid[] = "YOUR_SSID"; char pass[] = "YOUR_PASSWORD"; void setup() { Serial.begin(115200); while (WiFi.begin(ssid, pass) != WL_CONNECTED) { delay(3000); } Serial.println(WiFi.localIP()); } void loop() { } |
Bluetooth Support
The NINA-W102 also provides Bluetooth/BLE capability.
ArduinoBLE can use the NINA radio for BLE applications such as:
- phone-connected sensor nodes;
- BLE peripherals;
- BLE central devices;
- beacons.
NINA Firmware Version Matters
The NINA module firmware affects:
- Wi-Fi behaviour;
- Bluetooth support;
- the A4-A7 analog path;
- module communication.
If Wi-Fi or the extra analog inputs behave strangely, update the NINA firmware before debugging obscure hardware faults.
RGB LED Is Controlled Through NINA
The onboard RGB LED is connected to NINA GPIO rather than the main RP2040 header pins.
Arduino exposes symbolic names for the RGB channels.
The LED is active-low/common-anode style, so:
|
1 2 3 4 5 6 7 8 |
LOW → LED channel on HIGH → LED channel off |
LSM6DSOX 6-Axis IMU
The onboard LSM6DSOX contains:
- 3-axis accelerometer;
- 3-axis gyroscope;
- embedded temperature sensing;
- event/gesture functions;
- a machine-learning core.
This makes the board useful for:
- motion detection;
- wearables;
- gesture recognition;
- orientation sensing;
- TinyML projects.
MP34DT06J Digital Microphone
The onboard MP34DT06JTR is a digital PDM microphone.
It can be used for:
- sound-level analysis;
- keyword spotting;
- audio classification;
- voice-triggered interfaces.
The Arduino PDM library converts the high-rate one-bit microphone stream into PCM samples for application code.
ATECC608A Secure Element
The ATECC608A stores cryptographic secrets in protected hardware.
It can support:
- secure device identity;
- private-key storage;
- certificate-based authentication;
- hardware random-number generation.
This is useful for Arduino Cloud and other authenticated IoT designs.
Native USB
The RP2040 includes USB 1.1 hardware with host and device capability.
On Nano RP2040 Connect the USB interface is used for:
- programming;
- USB serial;
- bootloader recovery;
- native USB applications supported by the core.
REC / BOOTSEL Pin
The board exposes a recovery pin labelled:
|
1 2 3 4 |
REC |
which is associated with RP2040 BOOTSEL/recovery operation.
This is useful if a bad sketch prevents normal USB programming.
Double-Reset Recovery
Arduino also supports the common double-reset bootloader sequence:
- power the board;
- double-tap RESET quickly;
- wait for bootloader mode;
- select the temporary bootloader port;
- upload a known-good sketch.
Powering Nano RP2040 Connect
The board can be powered through:
- Micro-USB;
- VIN;
- the regulated 3.3 V rail in specialised configurations.
As with other modern Nano boards, the 5 V/VUSB position is tied to the USB power path rather than behaving exactly like the classic Nano’s general-purpose regulated 5 V rail.
Nano RP2040 Connect vs Raspberry Pi Pico
| Feature | Nano RP2040 Connect | Raspberry Pi Pico |
|---|---|---|
| MCU | RP2040 | RP2040 |
| CPU | Dual Cortex-M0+ 133 MHz | Dual Cortex-M0+ 133 MHz |
| RAM | 264 kB | 264 kB |
| Flash | 16 MB | 2 MB on original Pico |
| Wi-Fi/BLE | Yes, NINA-W102 | No on original Pico |
| IMU | Yes | No |
| Microphone | Yes | No |
| Secure element | Yes | No |
| Nano form factor | Yes | No |
Nano RP2040 Connect vs Nano ESP32
Nano ESP32 is a very different architecture:
|
1 2 3 4 5 6 7 8 9 10 |
Nano RP2040 Connect → RP2040 main MCU → NINA-W102 wireless coprocessor Nano ESP32 → ESP32-S3 main MCU → Wi-Fi/BLE on same processor |
Nano ESP32 is faster and has much more RAM/PSRAM, while Nano RP2040 Connect gives you RP2040 PIO, dual-core Cortex-M0+ behaviour and a separate wireless subsystem.
See our Arduino Nano ESP32 pinout guide for the ESP32-S3 alternative.
Quick Pin Reference
|
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
UART D0 = RX = GPIO1 D1 = TX = GPIO0 SPI D10 = SS D11 = COPI / MOSI D12 = CIPO / MISO D13 = SCK / LED_BUILTIN I2C A4 = SDA = GPIO12 A5 = SCL = GPIO13 Native RP2040 ADC A0 = GPIO26 A1 = GPIO27 A2 = GPIO28 A3 = GPIO29 NINA-assisted analog A4-A7 ADC resolution 12 bit DAC none PIO 2 blocks 8 state machines Wi-Fi / BLE NINA-W102 IMU LSM6DSOX Microphone MP34DT06JTR USB native RP2040 USB Logic 3.3 V |
Best Practices
- Use A0-A3 for the cleanest direct RP2040 analog measurements.
- Treat A4-A7 as a separate NINA-assisted analog subsystem rather than assuming they match A0-A3.
- Do not use A4/A5 as analog inputs while the I²C bus is active.
- Keep GPIO at 3.3 V; the board is not 5 V tolerant.
- Use D10-D13 for the standard external SPI bus.
- Use
Serialfor USB andSerial1for D0/D1 UART. - Keep NINA firmware current if Wi-Fi/BLE or A4-A7 behave unexpectedly.
- Use PIO when a protocol requires exact timing or more serial interfaces.
- Do not treat the RP2040 ADC as a precision instrumentation converter without calibration.
- Use the onboard IMU, microphone and secure element before adding duplicate external modules.
Final Thoughts
Nano RP2040 Connect is best understood as an RP2040 development board with a separate ESP32-based wireless coprocessor.
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 |
D0 / D1 → UART RX / TX D10-D13 → SPI A4 / A5 → I2C A0-A3 → native RP2040 12-bit ADC A4-A7 → NINA-assisted analog inputs most RP2040 GPIO → flexible PWM and PIO USB → native RP2040 USB |
Its defining strengths are RP2040 PIO, 16 MB Flash, Wi-Fi/BLE through NINA, an onboard IMU and microphone, and the compact Nano footprint.
The main trap is assuming all eight analog-labelled pins behave the same. They do not: A0-A3 are direct RP2040 ADC inputs, while A4-A7 depend on the NINA subsystem.
Once that distinction is understood, the board becomes much easier to use reliably for connected RP2040 projects.