The Arduino MKR WiFi 1010 is a compact IoT board built around the SAMD21 Cortex-M0+ processor and a separate u-blox NINA-W102 wireless module.
Its main architecture is:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
SAMD21 → 48 MHz Cortex-M0+ → runs your Arduino sketch → handles GPIO, ADC, DAC, timers, USB and serial buses NINA-W102 → 2.4 GHz Wi-Fi → Bluetooth / BLE → wireless co-processor |
The board also includes:
- 3.3 V logic;
- native USB;
- single-cell Li-Po charging;
- ATECC508 secure element;
- 7 external analogue inputs;
- one true 10-bit DAC output;
- 13 PWM-capable header pins;
- UART, SPI and I2C;
- an additional Eslov I2C connector.
Quick MKR WiFi 1010 Specifications
| Feature | MKR WiFi 1010 |
|---|---|
| Main MCU | SAMD21 Cortex-M0+ |
| Clock | 48 MHz |
| Logic voltage | 3.3 V |
| Flash | 256 KB |
| SRAM | 32 KB |
| EEPROM | No dedicated EEPROM |
| Digital-labelled header pins | D0-D14 |
| Analog inputs | A0-A6 |
| ADC resolution | 8/10/12-bit selectable |
| DAC | A0, 10-bit |
| PWM-capable header pins | 13 |
| UART | 1 external hardware UART |
| SPI | 1 external SPI bus |
| I2C | 1 external I2C bus |
| Wi-Fi | 2.4 GHz 802.11 b/g/n via NINA-W102 |
| Bluetooth | Bluetooth / BLE via NINA-W102 |
| USB | Full-Speed USB device and embedded host capability |
| Secure element | ATECC508 |
| Battery | Single-cell 3.7 V Li-Po |
| GPIO current | 7 mA maximum per pin |
| Size | 61.5 × 25 mm |
Important: MKR WiFi 1010 Uses 3.3 V Logic
The most important electrical rule is:
|
1 2 3 4 |
GPIO HIGH ≈ 3.3 V |
The SAMD21 is not a 5 V AVR device.
Do not assume a sensor, shield or module designed for UNO/Mega 5 V logic can be connected directly.
Before connecting a 5 V peripheral, check:
- its input HIGH threshold;
- its output voltage;
- I2C pull-up voltage;
- SPI/UART signal voltage;
- whether level shifting is required.
GPIO Current Limit
The official MKR WiFi 1010 pinout gives a maximum of:
|
1 2 3 4 |
7 mA per I/O pin |
with group-level source/sink limits as well.
This is much lower than the current figures users may remember from older AVR boards.
Do not directly drive:
- relays;
- motors;
- solenoids;
- high-power LEDs;
- large buzzers.
Use a transistor, MOSFET or dedicated driver.
Digital Pin Mapping
The board edge exposes digital labels:
|
1 2 3 4 |
D0-D14 |
with the following main SAMD21 mappings:
| Arduino pin | SAMD21 pin | Main alternate functions |
|---|---|---|
| D0 | PA22 | PWM |
| D1 | PA23 | PWM |
| D2 | PA10 | PWM |
| D3 | PA11 | PWM |
| D4 | PB10 | PWM |
| D5 | PB11 | PWM |
| D6 | PA20 | PWM / LED_BUILTIN |
| D7 | PA21 | PWM |
| D8 | PA16 | PWM / SPI COPI |
| D9 | PA17 | SPI SCK |
| D10 | PA19 | PWM / SPI CIPO |
| D11 | PA08 | I2C SDA |
| D12 | PA09 | PWM / I2C SCL |
| D13 | PB23 | UART RX |
| D14 | PB22 | UART TX |
Why Arduino’s Store Says “8 Digital I/O Pins”
The current Arduino store specification lists:
|
1 2 3 4 |
Digital I/O Pins: 8 |
but the physical pinout clearly labels:
|
1 2 3 4 |
D0-D14 |
because several communication and analogue-capable pins can also be used as normal digital GPIO.
For practical wiring, the full pinout map is more useful than treating the headline “8” as the total number of usable digital-labelled pins.
LED_BUILTIN
The onboard user LED is:
|
1 2 3 4 5 |
D6 → PA20 |
so the normal Blink sketch works with:
|
1 2 3 4 |
LED_BUILTIN |
PWM Pins
The official pinout marks 13 PWM-capable header positions:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
D0 D1 D2 D3 D4 D5 D6 D7 D8 D10 D12 A3 / D18 A4 / D19 |
Notice that:
|
1 2 3 4 5 6 7 |
D9 D11 D13 D14 |
are not marked as default PWM outputs in the board pinout.
PWM Example
|
1 2 3 4 5 6 7 8 9 10 |
void setup() { pinMode(6, OUTPUT); } void loop() { analogWrite(6, 128); } |
On most pins this generates PWM.
A0 is different because it can provide a true DAC output.
Analog Inputs A0-A6
The MKR WiFi 1010 exposes seven analogue inputs:
|
1 2 3 4 5 6 7 8 9 10 |
A0 A1 A2 A3 A4 A5 A6 |
| Analog pin | Digital alias | SAMD21 pin | ADC channel |
|---|---|---|---|
| A0 | D15 | PA02 | AIN0 / DAC0 |
| A1 | D16 | PB02 | AIN10 |
| A2 | D17 | PB03 | AIN11 |
| A3 | D18 | PA04 | AIN4 |
| A4 | D19 | PA05 | AIN5 |
| A5 | D20 | PA06 | AIN6 |
| A6 | D21 | PA07 | AIN7 |
Analog Pins Can Also Be Digital GPIO
The analogue pins have digital aliases:
|
1 2 3 4 5 6 7 8 9 10 |
A0 = D15 A1 = D16 A2 = D17 A3 = D18 A4 = D19 A5 = D20 A6 = D21 |
So a pin such as A5 can also be used with:
|
1 2 3 4 5 |
pinMode(A5, OUTPUT); digitalWrite(A5, HIGH); |
ADC Resolution
The official specification lists ADC operation at:
|
1 2 3 4 5 6 |
8-bit 10-bit 12-bit |
The SAMD core supports changing read resolution with:
|
1 2 3 4 |
analogReadResolution(12); |
For example:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void setup() { Serial.begin(115200); analogReadResolution(12); } void loop() { int value = analogRead(A1); Serial.println(value); delay(100); } |
At 12-bit resolution, the normal range is:
|
1 2 3 4 |
0-4095 |
A0 Is a True DAC Output
A0 is special:
|
1 2 3 4 5 6 |
A0 / D15 → PA02 → DAC0 |
The official board specification describes the analogue output as:
|
1 2 3 4 |
10-bit DAC |
This is a genuine analogue output, not just PWM.
DAC Example
|
1 2 3 4 5 6 7 8 9 10 |
void setup() { analogWriteResolution(10); } void loop() { analogWrite(A0, 512); } |
This targets approximately mid-scale output.
Do Not Treat A0 Like an UNO PWM Pin
On the MKR WiFi 1010:
|
1 2 3 4 5 |
A0 → true DAC-capable output |
whereas on many classic Arduino boards:
|
1 2 3 4 5 |
analogWrite() → PWM only |
AREF
The board exposes:
|
1 2 3 4 5 |
AREF → PA03 |
for analogue-reference use.
Follow the SAMD21 and Arduino reference-voltage rules when applying an external AREF.
Hardware UART
The external hardware UART is:
|
1 2 3 4 5 6 7 8 9 10 |
D13 → RX → PB23 D14 → TX → PB22 |
Use:
|
1 2 3 4 |
Serial1 |
for those pins.
USB Serial vs Serial1
Because the SAMD21 has native USB:
|
1 2 3 4 5 6 7 8 |
Serial → USB CDC serial Serial1 → D13/D14 hardware UART |
This allows the board to communicate with a PC over USB while simultaneously talking to a GPS, modem or another MCU over the hardware UART.
UART Example
|
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() ); } } |
I2C Pins
The main I2C bus is:
|
1 2 3 4 5 6 7 8 9 10 |
D11 → SDA → PA08 D12 → SCL → PA09 |
Use:
|
1 2 3 4 |
#include <Wire.h> |
I2C Example
|
1 2 3 4 5 6 7 8 9 10 11 |
#include <Wire.h> void setup() { Wire.begin(); } void loop() { } |
Additional Eslov I2C Connector
The MKR WiFi 1010 also includes a small 5-pin:
|
1 2 3 4 |
Eslov |
connector carrying:
- SDA;
- SCL;
- GND;
- +5 V;
- WK / wake-alarm signal.
The SDA/SCL signals are the same I2C bus rather than a completely independent second I2C controller.
Be Careful with the Eslov 5 V Pin
The connector includes:
|
1 2 3 4 |
+5 V |
power, but the SAMD21 communication signals remain:
|
1 2 3 4 |
3.3 V logic |
Do not assume the presence of 5 V power means the I2C pins are 5 V logic.
SPI Pins
The main external SPI mapping is:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
D8 → COPI / MOSI → PA16 D9 → SCK → PA17 D10 → CIPO / MISO → PA19 |
Use:
|
1 2 3 4 |
#include <SPI.h> |
SPI Example
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <SPI.h> const int csPin = 4; void setup() { pinMode(csPin, OUTPUT); digitalWrite(csPin, HIGH); SPI.begin(); } void loop() { } |
Chip select can generally be assigned to a suitable free GPIO unless a library or peripheral requires a specific pin.
Native USB
The SAMD21 provides native:
|
1 2 3 4 |
Full-Speed USB |
and the board supports USB device operation as well as embedded-host capability.
This enables projects such as:
- USB serial devices;
- keyboard/mouse HID;
- custom USB peripherals.
Micro-USB Connector
The MKR WiFi 1010 uses a:
|
1 2 3 4 |
Micro-USB |
connector for normal:
- programming;
- power;
- USB data.
Wi-Fi Hardware
Wireless networking is handled by the:
|
1 2 3 4 |
u-blox NINA-W102 |
module.
Its wireless hardware supports:
|
1 2 3 4 5 6 7 |
2.4 GHz 802.11b 802.11g 802.11n |
with up to 72 Mbit/s PHY rate for 802.11n according to Arduino’s current datasheet.
The NINA-W102 Contains Its Own Processor
The wireless module contains a:
|
1 2 3 4 5 |
dual-core Tensilica LX6 up to 240 MHz |
processor.
However, in normal MKR WiFi 1010 use:
|
1 2 3 4 5 6 7 8 |
SAMD21 → runs your Arduino sketch NINA-W102 → operates as wireless co-processor |
You do not normally write the main Arduino application to the NINA module.
WiFiNINA Library
The standard Wi-Fi software path is:
|
1 2 3 4 |
#include <WiFiNINA.h> |
For example:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <WiFiNINA.h> char ssid[] = "YOUR_WIFI"; char pass[] = "YOUR_PASSWORD"; void setup() { Serial.begin(115200); WiFi.begin(ssid, pass); } void loop() { } |
Bluetooth and BLE
Arduino’s current NINA-W102 datasheet lists:
- Bluetooth BR/EDR;
- Bluetooth Low Energy;
- Bluetooth 5.0 dual-mode radio capability.
Arduino projects normally use the supported Arduino Bluetooth libraries and firmware interfaces rather than programming the radio stack directly.
ATECC508 Secure Element
The board includes a:
|
1 2 3 4 |
Microchip ATECC508 |
secure element.
This is useful for:
- secure key storage;
- device identity;
- TLS authentication;
- Arduino Cloud provisioning.
Li-Po Battery Connector
The MKR family was designed for portable IoT applications.
The MKR WiFi 1010 therefore includes a connector for a:
|
1 2 3 4 |
3.7 V single-cell Li-Po |
and onboard charging circuitry.
Arduino’s current store specification recommends a battery of at least:
|
1 2 3 4 |
1024 mAh |
Battery Charging
When USB power is connected, the onboard charger can recharge the attached Li-Po battery.
This makes the board suitable for:
- portable sensors;
- remote data loggers;
- battery-backed IoT nodes;
- mobile BLE devices.
VIN Is Not the Same as UNO VIN
This is an important MKR difference.
Arduino documents VIN as a regulated input in approximately the:
|
1 2 3 4 |
5-6 V |
range.
Do not connect:
|
1 2 3 4 5 |
9 V 12 V |
to MKR VIN just because a classic UNO or Mega can accept those voltages.
5 V Pin
The board exposes:
|
1 2 3 4 |
+5V |
which is derived from USB/VIN under normal powered operation.
Again:
|
1 2 3 4 5 6 |
5 V power rail ≠ 5 V GPIO |
3.3 V Pin
The:
|
1 2 3 4 |
+3V3 |
pin provides the board’s regulated 3.3 V supply.
This is the natural power rail for most external logic connected directly to SAMD21 GPIO.
RTC Clock
The SAMD21 includes an RTC subsystem and the board specification lists:
|
1 2 3 4 |
32.768 kHz RTC |
alongside the:
|
1 2 3 4 |
48 MHz CPU clock |
No Dedicated EEPROM
The MKR WiFi 1010 does not include classic AVR-style onboard EEPROM in the main SAMD21 specification.
If your application needs persistent settings, use an appropriate Flash-emulation or external-storage approach.
External Interrupts
Arduino’s current store specification lists external interrupts on:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
D0 D1 D4 D5 D6 D7 D8 D9 A1 / D16 A2 / D17 |
for a total of:
|
1 2 3 4 |
10 documented external-interrupt pins |
External Interrupt Example
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
volatile bool triggered = false; void onInput() { triggered = true; } void setup() { pinMode(4, INPUT_PULLUP); attachInterrupt( digitalPinToInterrupt(4), onInput, FALLING ); } void loop() { if (triggered) { triggered = false; } } |
SWD Debug Pins
The bottom of the board exposes SWD programming/debug signals including:
|
1 2 3 4 5 6 7 |
SWDIO SWCLK GND 3.3 V |
These allow advanced debugging and low-level programming of the SAMD21 with suitable tools.
Pin Conflicts with the Wireless Module
Several internal SAMD21 pins are reserved for communication with the NINA-W102.
The SAMD21 and NINA communicate through internal:
- SPI;
- UART/control signals;
- reset/acknowledge lines.
Those internal connections are separate from the normal user-facing SPI/UART pins, but they consume SAMD21 SERCOM/peripheral resources.
Common Mistake 1: Applying 5 V to GPIO
The board is a:
|
1 2 3 4 |
3.3 V logic platform |
Do not assume 5 V tolerance.
Common Mistake 2: Feeding 9-12 V into VIN
MKR VIN is not a classic UNO VIN input.
Use the documented:
|
1 2 3 4 |
5-6 V regulated input range |
or USB/battery power.
Common Mistake 3: Assuming A0 Is Only an ADC
A0 is also:
|
1 2 3 4 |
DAC0 |
and can generate a genuine analogue output.
Common Mistake 4: Assuming D9 Is PWM
The official pinout does not mark:
|
1 2 3 4 |
D9 |
as a default PWM pin, even though it is the SPI clock.
Common Mistake 5: Confusing Serial and Serial1
Use:
|
1 2 3 4 5 6 7 8 |
Serial → USB Serial1 → D13/D14 UART |
Common Mistake 6: Powering a Heavy Load from GPIO
The official pinout gives:
|
1 2 3 4 |
7 mA maximum per pin |
so external load drivers are important.
Quick Digital Reference
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
D0 PA22 PWM D1 PA23 PWM D2 PA10 PWM D3 PA11 PWM D4 PB10 PWM D5 PB11 PWM D6 PA20 PWM / LED D7 PA21 PWM D8 PA16 PWM / COPI D9 PA17 SCK D10 PA19 PWM / CIPO D11 PA08 SDA D12 PA09 PWM / SCL D13 PB23 RX D14 PB22 TX |
Quick Analog 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 |
A0 / D15 PA02 AIN0 DAC0 A1 / D16 PB02 AIN10 A2 / D17 PB03 AIN11 A3 / D18 PA04 AIN4 PWM A4 / D19 PA05 AIN5 PWM A5 / D20 PA06 AIN6 A6 / D21 PA07 AIN7 |
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 24 |
USB serial: Serial Hardware UART: D13 RX D14 TX Serial1 I2C: D11 SDA D12 SCL SPI: D8 COPI / MOSI D9 SCK D10 CIPO / MISO Wireless: NINA-W102 2.4 GHz Wi-Fi Bluetooth / BLE |
Final Thoughts
The Arduino MKR WiFi 1010 remains a useful compact IoT board because it combines:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SAMD21 48 MHz Cortex-M0+ 256 KB Flash 32 KB SRAM native USB true DAC Wi-Fi Bluetooth secure element Li-Po charging |
in a narrow MKR form factor.
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 |
logic voltage → 3.3 V UART → D13 RX / D14 TX I2C → D11 SDA / D12 SCL SPI → D8 COPI / D9 SCK / D10 CIPO analog → A0-A6 DAC → A0 LED_BUILTIN → D6 maximum GPIO current → 7 mA per pin |
The two biggest electrical traps are applying 5 V to the GPIO and treating MKR VIN like an UNO’s wide-range VIN input.
For IoT applications, the combination of the SAMD21, NINA-W102 radio, secure element and onboard Li-Po charging is what makes the MKR WiFi 1010 distinct from a simple Wi-Fi development board.