Arduino MKR ZERO: A Powerful 32-bit Board for Advanced Projects
The Arduino MKR ZERO is a compact, powerful microcontroller board featuring a SAMD21 Cortex-M0+ processor, designed for IoT and advanced embedded applications requiring significant processing power and low energy consumption.

The Arduino MKR ZERO is a member of the Arduino MKR family, a series of boards designed for the Internet of Things (IoT). It stands out with its 32-bit ARM Cortex-M0+ microcontroller, the Microchip (formerly Atmel) SAMD21, offering a substantial leap in processing power and efficiency compared to many 8-bit Arduino boards. This makes it suitable for more demanding applications, such as audio processing, complex sensor fusion, or running sophisticated algorithms that would overwhelm simpler microcontrollers.
At the heart of the MKR ZERO is the Microchip SAMD21G18A. This SoC is built on a low-power ARM Cortex-M0+ processor, running at a clock speed of up to 48MHz. It features 256KB of Flash memory for program storage and 32KB of SRAM for data. The SAMD21 is known for its rich peripheral set, including multiple timers, analog-to-digital converters (ADCs), digital-to-analog converters (DACs), and communication interfaces like I2C, SPI, and UART. The 'ZERO' in its name signifies its position as a more advanced, zero-compromise board within the MKR lineup, often favored for projects where performance and flexibility are key.
This board is an excellent choice for makers, students, and embedded engineers looking to move beyond basic blinking LEDs and simple sensor readings. Its capabilities are well-suited for projects involving real-time audio playback and recording (hence the 'ZERO' designation, hinting at 'audio zero'), machine learning inference on edge devices, complex control systems, or building sophisticated IoT nodes that require local data processing before transmission. Its small form factor and low power consumption also make it ideal for battery-powered applications.
Released around 2017, the MKR ZERO was designed to bridge the gap between hobbyist-level boards and more professional embedded development platforms. It provides a robust hardware foundation with a familiar Arduino programming environment, making it accessible to those already comfortable with the Arduino ecosystem while offering the performance needed for more advanced tasks. Its support for various communication protocols and its powerful microcontroller make it a versatile tool for a wide range of innovative projects.
Watch
Related video, embedded from YouTube.
Specifications
| Microcontroller / SoC | Microchip SAMD21G18A |
| Architecture | 32-bit ARM Cortex-M0+ |
| Clock speed | 48 MHz |
| Flash / Storage | 256 KB |
| RAM / SRAM | 32 KB |
| Operating voltage | 3.3V |
| Digital I/O pins | 22 |
| Analog / ADC | 6 (10-bit) |
| PWM | 12 (on most digital pins) |
| Connectivity | I2C, SPI, UART |
| USB | Micro-USB connector (for programming and power) |
| Power input | 5V via Micro-USB or VIN pin, 3.3V via 3.3V pin |
| Dimensions | 67.64mm x 25mm |
Pinout & pin functions
| Pin | Function |
|---|---|
| 3.3V | Power output (regulated 3.3V) |
| GND | Ground |
| VIN | Power input (typically 5V from USB or external supply) |
| RESET | Reset pin |
| D0 (RX) | Digital I/O, UART receive |
| D1 (TX) | Digital I/O, UART transmit |
| D2 | Digital I/O |
| D3 | Digital I/O, PWM capable |
| D4 | Digital I/O |
| D5 | Digital I/O, PWM capable |
| D6 | Digital I/O, PWM capable |
| D7 | Digital I/O |
| D8 | Digital I/O |
| D9 | Digital I/O, PWM capable |
| D10 (CS) | Digital I/O, SPI chip select |
| D11 (MOSI) | Digital I/O, SPI Master Out Slave In |
| D12 (MISO) | Digital I/O, SPI Master In Slave Out |
| D13 (SCK) | Digital I/O, SPI clock |
| D14 (SCL) | Digital I/O, I2C clock |
| D15 (SDA) | Digital I/O, I2C data |
| A0 | Analog input, ADC capable |
| A1 | Analog input, ADC capable |
| A2 | Analog input, ADC capable |
| A3 | Analog input, ADC capable |
| A4 | Analog input, ADC capable |
| A5 | Analog input, ADC capable |
| A6 | Analog input, ADC capable |
| A7 | Analog input, ADC capable |
| AREF | Analog Reference voltage |
| GND | Ground |
Wiring & circuit basics
The Arduino MKR ZERO operates at a logic level of 3.3V. This means that digital inputs and outputs are designed to work with signals between 0V (LOW) and 3.3V (HIGH). Connecting 5V logic devices directly to the MKR ZERO's digital pins can damage the microcontroller. If you need to interface with 5V devices, use a logic level shifter. Power can be supplied via the Micro-USB port or the VIN pin. The VIN pin can accept a voltage range typically from 5V to 12V, which is then regulated down to 3.3V by an onboard voltage regulator. Ensure your power supply can provide sufficient current, especially if powering multiple components or motors; a 5V supply capable of at least 500mA is a good starting point.
When connecting components, always connect to the appropriate pins. For example, to blink an LED, connect the anode (longer leg) of the LED to a digital pin (e.g., D5) and the cathode (shorter leg) to a current-limiting resistor (e.g., 220-330 Ohm), which is then connected to a GND pin. The resistor is crucial to prevent excessive current from flowing through the LED and the microcontroller's pin, which could cause damage.
For I2C communication, which is common for sensors like accelerometers, gyroscopes, and displays, use the dedicated SDA (D15) and SCL (D14) pins. These pins also function as digital I/O pins. Remember that I2C communication typically requires pull-up resistors on both the SDA and SCL lines to function correctly; these are often built into sensors or can be added externally. Always consult the datasheet of your sensor for specific wiring and voltage requirements.
Programming & getting started
The primary toolchain for the Arduino MKR ZERO is the Arduino IDE, which supports C/C++ programming. You can install the necessary board support package for the SAMD21 microcontroller via the IDE's Board Manager. This enables you to write, compile, and upload sketches to the board. For a quick start, connect the MKR ZERO via its Micro-USB port to your computer. Select 'Arduino MKR ZERO' from the 'Tools > Board' menu and choose the correct COM port. Then, upload the 'Blink' example sketch to verify your setup.
For those interested in Python, CircuitPython (from Adafruit) and MicroPython are excellent alternatives. These environments offer a more high-level programming experience and are often easier for beginners. Flashing CircuitPython or MicroPython onto the MKR ZERO typically involves downloading the appropriate firmware file and following specific instructions for putting the board into bootloader mode, often by double-tapping the reset button, then dragging and dropping the firmware file onto the board when it appears as a USB drive.