Skip to content
Guide
13 min read
October 17, 2026

Arduino Uno R4 WiFi Pinout: Every GPIO, ADC, DAC, and ESP32-S3 Pin Explained

A complete Arduino Uno R4 WiFi pinout reference — digital I/O, ADC, DAC, op-amp, CAN, dual UART, plus the Qwiic bus, LED matrix, ESP header, and OFF/VRTC pins exclusive to this variant.

If you've moved to an Arduino Uno R4 WiFi straight from an R3, the shield header looks identical -- same 14 digital pins, same 6 analog pins, same physical footprint -- so it's tempting to wire it up exactly like the old board and assume everything just carries over. Most of it does. A few things genuinely don't, and they're not obvious from the silkscreen.

The R4 WiFi replaces the old 8-bit ATmega328P with a 32-bit Arm Cortex-M4 (the Renesas RA4M1), and that swap changes more than raw speed -- the per-pin current budget is meaningfully lower, the ADC can run at higher resolution, and there's now a DAC and a built-in op-amp the R3 never had. On top of that core chip, the WiFi variant adds a second one entirely -- an ESP32-S3 coprocessor -- for wireless, plus a Qwiic connector, a 12x8 LED matrix, and a couple of power-management pins the plain R3 and the R4 Minima don't carry.

Full Arduino Uno R4 WiFi pinout — digital, analog, DAC, op-amp, and ESP32-S3-specific pins

Digital I/O Pins and Current Limits

Fourteen digital pins, D0 through D13, each configurable as input or output with pinMode() exactly like the R3.

pinMode(13, OUTPUT);
digitalWrite(13, HIGH);

This is the single biggest migration gotcha. These pins run 5V logic like the R3, but each one is only rated for 8mA, with a 60mA ceiling across every digital pin combined. The ATmega328P on the R3 could push 20-40mA per pin. A wiring pattern that worked fine driving an LED or a small relay coil directly off an R3 pin can brown out or damage the R4's output driver at the same current. Anything beyond a single LED with a sensible resistor should go through a transistor or driver IC, not straight off the pin.

Every digital pin also has a built-in pull-up resistor (around 20kΩ), enabled with pinMode(pin, INPUT_PULLUP) -- unchanged from the R3.

PWM Pins

Six pins support PWM: D3, D5, D6, D9, D10, D11, marked with a tilde on the silkscreen, same count and same pins as the R3.

analogWrite(9, 128); // ~50% duty cycle

PWM resolution defaults to 8-bit (0-255) for backward compatibility, but the board can go up to 12-bit via analogWriteResolution(12) -- a range from 0-255 up to 0-4095, for finer control when dimming or driving analog-style outputs.

Interrupt Pins

D2 and D3 are the two pins the Arduino API exposes for attachInterrupt(), matching the R3's interrupt pins exactly, even though the underlying Cortex-M4 hardware (via its NVIC) can technically handle interrupts on nearly every pin.

ADC Pins

Six analog input pins, A0 through A5, same as the R3.

int reading = analogRead(A0);

The default resolution is 10-bit (0-1023) for compatibility with existing R3 code, but the ADC can be pushed to 12-bit or 14-bit with analogReadResolution(14) -- at 14-bit, it resolves voltage changes as small as roughly 0.3mV against a 5V reference, versus the R3's fixed ~4.9mV steps. Every analog pin can also double as a plain digital I/O pin if a project runs out of digital ones.

By default the ADC reference is the board's 5V rail. For sensors that top out at 3.3V, analogReference(AR_EXTERNAL) with a voltage applied to the AREF pin gives more usable resolution across that narrower range than reading a 3.3V signal against a 5V reference.

DAC Pin

A0 doubles as a true Digital-to-Analog Converter -- something the R3 never had at all. It uses the same analogWrite(pin, value) call as PWM, but outputs a real smoothed analog voltage rather than a switched square wave.

analogWrite(A0, 127); // roughly 2.5V at 8-bit default resolution

Default resolution is 8-bit (0-255), raisable to 12-bit (0-4095) with analogWriteResolution(12). Using A0 as a DAC output and as an analog input at the same time isn't possible -- it's one role or the other.

Op-Amp Pins

Another R3-first: the RA4M1 has four internal op-amps, and one is broken out to the header -- A1 as the non-inverting (+) input, A2 as the inverting (-) input, and A3 as the output. Wiring A2 directly to A3 turns it into a simple voltage-follower buffer; adding two resistors between A2/A3 and A2/GND turns it into a basic voltage amplifier. It needs the OPAMP.h library and an explicit OPAMP.begin() call before use.

Capacitive-Touch Pins

Eleven GPIOs double as capacitive touch inputs: D0, D1, D2, D3, D8, D9, D11, D13, A1, A2, plus a heart-shaped touch pad on the board's underside. Wiring aluminum foil or conductive fabric to one of these turns it into a custom touch button, using the Arduino_CapacitiveTouch library's isTouched() and setThreshold() calls.

I2C Pins

This is a genuine WiFi-variant upgrade over the R3 and the Minima. The board carries two separate I2C buses to solve the classic 5V/3.3V mixing problem:

  • The legacy 5V bus on A4 (SDA) / A5 (SCL) -- same location as the R3, accessed with the standard Wire object. No built-in pull-ups on this bus by default, though solder pads exist to add them.
  • A second, dedicated 3.3V bus wired to the onboard Qwiic/STEMMA QT connector, accessed via Wire1 instead of Wire. This keeps 3.3V-only sensor breakouts electrically isolated from anything wired to the 5V bus, so both can be used safely at once without a level shifter.

The R4 Minima and the R3 only have the single 5V bus -- no Qwiic connector, no Wire1.

SPI Pins

SPI uses the modern Controller/Peripheral naming in R4 documentation, but the pins and function are unchanged from the R3: D11 (COPI/MOSI), D12 (CIPO/MISO), D13 (SCK), D10 (CS), also accessible through the 6-pin ICSP header for shields that connect there instead.

UART Pins

Another real upgrade versus the R3: two independent hardware serial ports. The USB-C port connects to Serial, while pins D0 (RX) and D1 (TX) connect to a completely separate Serial1. On the R3, the USB connection and pins 0/1 share the same UART, so using an external serial device on those pins conflicts with the Serial Monitor. On the R4, both can run at once -- debug over USB while a GPS or Bluetooth module talks on Serial1.

Serial1.begin(9600);
Serial1.println("Hello from Serial1");

CAN Pins

Also new versus the R3: a built-in CAN controller, with CAN TX on D4 and CAN RX on D5, using the Arduino_CAN library. This is the controller only, not a transceiver -- an external transceiver module (an MCP2551 or TJA1050) is still needed to actually put signals on a CAN bus.

ICSP Header

The 6-pin ICSP header is physically present, same as the R3, but its job has changed. On the R3, it's commonly used to flash a bootloader with an external ISP programmer. The RA4M1 doesn't support programming over SPI at all, so on the R4 the ICSP header exists purely for SPI-based shields expecting the signals there -- it's not a bootloader-flashing header anymore.

ESP Header

A small 2x3 header near the reset button gives direct access to the onboard ESP32-S3 module for reprogramming it independently of the main RA4M1 chip: GPIO42 (debug), GPIO41 (debug), GPIO43/TXD0 (UART TX), GPIO0 (boot), GPIO44/RXD0 (UART RX), and GND. Every signal here runs at 3.3V -- the ESP32-S3 is not 5V tolerant, and feeding any of these pins a 5V signal can damage it permanently. This header doesn't exist on the Minima, which has no ESP32-S3 to access.

LED Matrix

A built-in 12x8 Charlieplexed LED matrix (96 LEDs total) sits on the board, controlled through the Arduino_LED_Matrix library by defining an 8x12 bitmap array and calling renderBitmap(). Not present on the Minima.

#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;

void setup() {
  matrix.begin();
}

Power Pins

PinFunctionNotes
VINExternal power input (6-24V)Regulated down to 5V by an onboard buck converter; also tied to the barrel jack
5VRegulated 5V output~1.2A available when powered via VIN/barrel jack; up to ~2A when powered via USB-C (bypasses the buck converter). Runs closer to 4.7V on USB power due to a protection diode drop
3.3VRegulated 3.3V outputPowers the onboard ESP32-S3 and the Qwiic connector; avoid loading it heavily while WiFi is active, since the radio draws bursts of current from the same rail
GNDGroundMultiple ground pins broken out

High-current loads like servo motors should still be powered separately rather than off the board's 5V pin, same advice as on the R3.

OFF and VRTC Pins

Two pins the R3 and the Minima don't have. OFF is an active-low shutdown pin -- pulling it to GND turns off the onboard 5V buck converter and shuts the board down, useful for a low-power timer circuit that wakes the board only to take a reading and send it over WiFi. It only works when the board is powered via VIN or the barrel jack; on USB power, the 5V rail bypasses the buck converter entirely and OFF has no effect. VRTC backs up the board's internal Real Time Clock with a small external source (a CR2032 coin cell or a supercapacitor, 1.6-3.6V) so the RTC keeps time even with main power disconnected, and can also help keep the ESP32-S3 module's low-power state alive to maintain a WiFi connection.

Quick Answers to Common Uno R4 WiFi Pin Questions

Will my R3 shields still work on the R4 WiFi? Physically, yes -- the header layout is unchanged. Electrically, check the shield's current draw per pin against the R4's 8mA/60mA budget before assuming it'll behave identically.

Do I need the WiFi variant, or is the Minima enough? If a project doesn't need wireless, the second I2C bus, or the LED matrix, the Minima has the identical core pinout for less money -- there's no pin-count or capability loss on the digital/analog/PWM/DAC/CAN side.

Can I use 5V sensors with the R4 WiFi? Yes, on the main RA4M1 pins -- they're 5V logic like the R3. The one exception is the ESP header, which is strictly 3.3V.

Why does analogRead() still return 0-1023 by default? For backward compatibility with existing R3 code. Call analogReadResolution(12) or (14) explicitly to use the R4's higher native ADC resolution.

What's the DAC pin actually useful for? Generating a real analog voltage -- smooth waveforms, a variable reference voltage, or driving a VCO in a simple synth circuit -- something PWM alone can only approximate.


Where to Go From Here

Once the lower current budget and the dual-UART setup feel like second nature, the second Wire1 I2C bus and the Qwiic connector are worth exploring next for any 3.3V sensor breakout, without touching a level shifter. From there, the ESP header covered above is the natural next step for anyone who wants to flash the ESP32-S3 side independently -- for custom wireless firmware or advanced networking beyond what the standard WiFi library exposes.

Signal In

Built from what makers search for

The lookups piling up in SolderHub's search bar every day shape what we publish next — new component pages, board guides, and firmware notes, sent out as they go live.

By subscribing you agree to our Privacy Policy. Unsubscribe anytime.