Provides comprehensive pinout reference, board specifications, and TinyGo development guide for the Arduino Uno R4 WiFi (Renesas RA4M1 + ESP32-S3) microcontroller. Use when writing TinyGo firmware for the Arduino Uno R4 WiFi, wiring peripherals, or configuring pins. Keywords: Arduino, Uno, R4, WiFi, RA4M1, ESP32-S3, Renesas, Cortex-M4, TinyGo, pinout, GPIO, I2C, SPI, UART, DAC, CAN, WiFi, BLE, Bluetooth, LED matrix, Qwiic, analog, digital, PWM, 5V, 32-bit, USB-C.
Provides comprehensive reference for developing TinyGo firmware for the Arduino Uno R4 WiFi (Renesas RA4M1 + ESP32-S3).
Arduino-UnoR4WiFi-Arduino skillArduino-UnoR4Minima-TinyGo skillArduino-UnoR3-TinyGo skillArduino-Nano-TinyGo skill| Parameter | Value |
|---|
| Main MCU | Renesas RA4M1 (Arm Cortex-M4) |
| Radio Module | ESP32-S3-MINI-1-N8 |
| Architecture | 32-bit Arm Cortex-M4 (RA4M1) + Xtensa LX7 (ESP32-S3) |
| Clock Speed | 48 MHz (RA4M1) / up to 240 MHz (ESP32-S3) |
| RA4M1 Flash | 256 kB |
| RA4M1 SRAM | 32 kB |
| ESP32-S3 ROM | 384 kB |
| ESP32-S3 SRAM | 512 kB |
| USB | USB-C (native USB) |
| Operating Voltage | 5V (RA4M1) / 3.3V (ESP32-S3) |
| Input Voltage (VIN) | 6–24V |
| DC Current per I/O Pin | 8 mA |
| WiFi | 802.11 b/g/n (2.4 GHz) via ESP32-S3 |
| Bluetooth | BLE 5.0 via ESP32-S3 |
| LED Matrix | 12×8 (96 LEDs) built-in |
| Dimensions | 68.85 × 53.34 mm |
| Digital I/O | 14 (D0–D13) |
| PWM Outputs | 6 (D3, D5, D6, D9, D10, D11) |
| Analog Inputs | 6 (A0–A5, up to 14-bit ADC) |
| DAC Output | 1 (A0) |
| CAN Bus | 1 (requires external transceiver) |
| Qwiic/STEMMA QT | 1 (secondary I2C, 3.3V) |
| Built-in LED | D13 |
[USB-C] [Barrel Jack]
┌──────────────────────────────┐
│ RESET IOREF 5V GND VIN │ ← Power Header
│ 3.3V AREF GND │
├──────────────────────────────┤
SCL/A5 ──┤ A5 D13 ├── SCK / Built-in LED
SDA/A4 ──┤ A4 D12 ├── CIPO (MISO)
A3 ──┤ A3 ~D11 ├── COPI (MOSI) / PWM
A2 ──┤ A2 ~D10 ├── CS (SS) / PWM
A1 ──┤ A1 ~D9 ├── PWM
DAC/A0 ──┤ A0 D8 ├──
│ │
│ [RA4M1] [12×8 LED Matrix] │
│ [ESP32-S3] [Qwiic I2C] │
│ │
│ D7 ├──
│ ~D6 ├── PWM
│ ~D5 ├── PWM
│ D4 ├──
│ ~D3 ├── PWM / INT1
│ D2 ├── INT0
TX ─────┤ D1 D1 ├── TX
RX ─────┤ D0 D0 ├── RX
├──────────────────────────────┤
│ [ICSP] [ESP32 Header] │
└──────────────────────────────┘
~ = PWM capable INT = External interrupt
CAN TX/RX on dedicated header Qwiic = secondary I2C (3.3V)
⚠ ESP32 header near USB-C is 3.3V only
| Pin | Digital | Analog | PWM | Interrupt | SPI | I2C | UART | Other |
|---|---|---|---|---|---|---|---|---|
| D0 | ✓ | — | — | — | — | — | RX | — |
| D1 | ✓ | — | — | — | — | — | TX | — |
| D2 | ✓ | — | — | INT0 | — | — | — | — |
| D3 | ✓ | — | ✓ | INT1 | — | — | — | — |
| D4 | ✓ | — | — | — | — | — | — | — |
| D5 | ✓ | — | ✓ | — | — | — | — | — |
| D6 | ✓ | — | ✓ | — | — | — | — | — |
| D7 | ✓ | — | — | — | — | — | — | — |
| D8 | ✓ | — | — | — | — | — | — | — |
| D9 | ✓ | — | ✓ | — | — | — | — | — |
| D10 | ✓ | — | ✓ | — | CS | — | — | — |
| D11 | ✓ | — | ✓ | — | COPI | — | — | — |
| D12 | ✓ | — | — | — | CIPO | — | — | — |
| D13 | ✓ | — | — | — | SCK | — | — | Built-in LED |
| A0 | ✓ | ADC0 | — | — | — | — | — | DAC |
| A1 | ✓ | ADC1 | — | — | — | — | — | — |
| A2 | ✓ | ADC2 | — | — | — | — | — | — |
| A3 | ✓ | ADC3 | — | — | — | — | — | — |
| A4 | ✓ | ADC4 | — | — | — | SDA | — | — |
| A5 | ✓ | ADC5 | — | — | — | SCL | — | — |
| Interface | Pins / Notes |
|---|---|
| Qwiic I2C | Secondary I2C bus (IIC0) — 3.3V only — use Wire1 |
| CAN Bus | CAN TX/RX on dedicated header (requires external transceiver) |
| LED Matrix | 12×8 (96 LEDs) — controlled via internal I2C to LED driver |
| ESP32-S3 Header | Near USB-C — 3.3V only, do NOT connect 5V |
| Pin | Function |
|---|---|
| VIN | Input voltage (6–24V) |
| 5V | Regulated 5V output |
| 3.3V | Regulated 3.3V output |
| GND | Ground |
| AREF | Analog reference voltage |
| IOREF | I/O reference voltage |
| RESET | Reset (active LOW) |
⚠ TinyGo support for the Arduino Uno R4 WiFi may not be available yet. The RA4M1 MCU target exists (
arduino-uno-r4-minima), but the WiFi variant with ESP32-S3 co-processor may not have a dedicated TinyGo target. Check the latest TinyGo release notes.
arduino-uno-r4-minima
Note: You may be able to use the
arduino-uno-r4-minimatarget for basic GPIO/I2C/SPI/UART on the RA4M1, but WiFi, BLE, and LED matrix features (which require the ESP32-S3) will NOT be available through TinyGo.
tinygo info -target=arduino-uno-r4-minima
# Build only (using the R4 Minima target)
tinygo build -target=arduino-uno-r4-minima -o firmware.bin ./main.go
# Build and flash
tinygo flash -target=arduino-uno-r4-minima ./main.go
# Monitor serial output
tinygo monitor -target=arduino-uno-r4-minima
Note: If the board is not detected, double-tap the reset button to enter bootloader mode.
machine.I2C0) — main bus on A4/A5machine.SPI0)machine.UART0)machine.I2C1 — check TinyGo supportArduino-UnoR4WiFi-Arduino skill)package main
import (
"machine"
"time"
)
func main() {
led := machine.D13 // Built-in LED
led.Configure(machine.PinConfig{Mode: machine.PinOutput})
for {
led.High()
time.Sleep(500 * time.Millisecond)
led.Low()
time.Sleep(500 * time.Millisecond)
}
}
machine.I2C0i2c := machine.I2C0
err := i2c.Configure(machine.I2CConfig{
SDA: machine.SDA_PIN, // A4
SCL: machine.SCL_PIN, // A5
Frequency: 400000, // 400 kHz fast mode
})
if err != nil {
println("I2C init failed:", err)
}
// Write to device
data := []byte{0x00, 0x01}
i2c.Tx(0x3C, data, nil)
// Read from device
buf := make([]byte, 2)
i2c.Tx(0x3C, []byte{0x00}, buf)
machine.I2C1 (if supported)⚠ Warning: The Qwiic connector operates at 3.3V. Do NOT connect 5V I2C devices to the Qwiic port. TinyGo support for the secondary I2C bus may be limited.
machine.SPI0spi := machine.SPI0
err := spi.Configure(machine.SPIConfig{
SCK: machine.D13,
SDO: machine.D11, // COPI (MOSI)
SDI: machine.D12, // CIPO (MISO)
Frequency: 4000000, // 4 MHz
})
if err != nil {
println("SPI init failed:", err)
}
cs := machine.D10
cs.Configure(machine.PinConfig{Mode: machine.PinOutput})
cs.High()
cs.Low()
result := make([]byte, 1)
spi.Tx([]byte{0x00}, result)
cs.High()
machine.UART0uart := machine.UART0
uart.Configure(machine.UARTConfig{
TX: machine.UART_TX_PIN, // D1
RX: machine.UART_RX_PIN, // D0
BaudRate: 9600,
})
uart.Write([]byte("Hello from Uno R4 WiFi\r\n"))
adc := machine.ADC{Pin: machine.ADC0} // A0
adc.Configure(machine.ADCConfig{
Resolution: 14, // Up to 14-bit on RA4M1
})
value := adc.Get() // Returns 16-bit scaled value
println("ADC:", value)
The Uno R4 WiFi has two voltage domains:
Do NOT connect 5V signals to the ESP32-S3 header or Qwiic connector — this will damage the ESP32-S3.
The Uno R4 WiFi has a maximum of 8 mA per GPIO pin:
For WiFi, BLE, and LED matrix features, use the Arduino/C++ framework — these require the ESP32-S3 co-processor which TinyGo cannot access.
arduino-uno-r4-minima target; WiFi-specific target may not exist