
Arduino MKR ZERO (I2S bus & SD for sound, music & digital audio data)
MKR ZERO has an on-board SD connector with dedicated SPI interfaces (SPI1) that allows you to play with MUSIC files with no extra hardware!
Watch out music makers, we’ve got some news for you! We have released two libraries for your enjoyment:
- Arduino Sound library – a simple way to play and analyze audio data using Arduino on SAM D21-based boards.
- I2S library – to use the I2S protocol on SAMD21-based boards. For those who don’t know, I2S (Inter-IC Sound) is an electrical serial bus interface standard for connecting digital audio devices.
Overview
The MKR ZERO brings you the power of a Zero in the smaller format established by the MKR form factor. The MKR ZERO board acts as a great educational tool for learning about 32-bit application development. It has an on-board SD connector with dedicated SPI interfaces (SPI1) that allows you to play with MUSIC files with no extra hardware! The board is powered by Atmel’s SAMD21 MCU, which features a 32-bit ARM® Cortex® M0+ core.
Warning: Unlike most Arduino & Genuino boards, the MKRZero runs at 3.3V. The maximum voltage that the I/O pins can tolerate is 3.3V. Applying voltages higher than 3.3V to any I/O pin could damage the board.
The board contains everything needed to support the microcontroller; simply connect it to a computer with a micro-USB cable or power it by a LiPo battery. The battery voltage can also be monitored since a connection between the battery and the analog converter of the board exists.
You can find here your board warranty informations.
Getting Started
In the Getting Started section, you can find all the information you need to configure your board, use the Arduino Software (IDE), and start to tinker with coding and electronics.
Need Help?
- On the Software on the Arduino Forum
- On Projects on the Arduino Forum
- On the Product itself through our Customer Support
Tech specs
Microcontroller | SAMD21 Cortex-M0+ 32bit low power ARM® MCU |
Board Power Supply (USB/VIN) | 5V |
Supported Battery(*) | Li-Po single cell, 3.7V, 700mAh minimum |
DC Current for 3.3V Pin | 600mA |
DC Current for 5V Pin | 600mA |
Circuit Operating Voltage | 3.3V |
Digital I/O Pins | 22 |
PWM Pins | 12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 10, A3 - or 18 -, A4 -or 19) |
UART | 1 |
SPI | 1 |
I2C | 1 |
Analog Input Pins | 7 (ADC 8/10/12 bit) |
Analog Output Pins | 1 (DAC 10 bit) |
External Interrupts | 10 (0, 1, 4, 5, 6, 7, 8, A1 -or 16-, A2 - or 17) |
DC Current per I/O Pin | 7 mA |
Flash Memory | 256 KB |
Flash Memory for Bootloader | 8 KB |
SRAM | 32 KB |
EEPROM | no |
Clock Speed | 32.768 kHz (RTC), 48 MHz |
LED_BUILTIN | 32 |
Full-Speed USB Device and embedded Host |
Conformities
Resources for Safety and Products
Manufacturer Information
The production information includes the address and related details of the product manufacturer.
Arduino S.r.l.
Via Andrea Appiani, 25
Monza, MB, IT, 20900
https://www.arduino.cc/
Responsible Person in the EU
An EU-based economic operator who ensures the product's compliance with the required regulations.
Arduino S.r.l.
Via Andrea Appiani, 25
Monza, MB, IT, 20900
Phone: +39 0113157477
Email: support@arduino.cc
Documentation
OSH: Schematics
The MKR ZERO is open-source hardware! You can build your own board using the following files:
EAGLE FILES IN .ZIP SCHEMATICS IN .PDF
Interactive Board Viewer
Li-Po batteries, Pins, SD and board LEDs
On-board SD
The onboard SD connector allows you to play with files without adding any extra hardware to the board. Furthermore, SD card is driven by a dedicated SPI interface (SPI1) and so any of the pins of the header is busy during SD usage. The SD library automatically recognizes the MKR ZERO and so any modification to the sketch is needed to use it apart from choosing the right SS pin (SDCARD_SS_PIN).
Battery capacity
Li-Po batteries are charged up to 4,2V with a current that is usually half of the nominal capacity (C/2). For Arduino MKR ZERO we use a specialized chip that has a preset charging current of 350mAh. This means that the MINIMUM capacity of the Li-Po battery should be 700 mAh. Smaller cells will be damaged by this current and may overheat, develop internal gasses and explode, setting on fire the surroundings. We strongly recommend that you select a Li-Po battery of at least 700mAh capacity. A bigger cell will take more time to charge, but won't be harmed or overheated. The chip is programmed with 4 hours of charging time, then it goes into automatic sleep mode. This will limit the amount of charge to max 1400 mAh per charging round.
Battery connector
If you want to connect a battery to your MKRZero be sure to search one with female 2 pin JST PHR2 Type connector. Polarity : looking at the board connector pins, polarity is Left = Positive, Right = GND Connector datasheet On the MKRZero, connector is a Male 2pin JST PH Type
Additional I2C Port
The MKRZero has an additional connector meant as an extension of the I2C bus. It's a small form factor 5-pin connector with 1.0mm pitch. The mechanical details of the connector can be found in the connector datasheet. The I2C port in addition to the SDA and SCL signals includes the GND and +5V power rails and a digital pin that might be useful when designing an expansion. The pinout is shown in the following image:
The connector we suggest for this additional I2C Port is the SHR-05V-S-B, also in the picture.
Vin
This pin can be used to power the board with a regulated 5V source. If the power is fed through this pin, the USB power source is disconnected. This is the only way you can supply 5v (range is 5V to maximum 6V) to the board not using USB. This pin is an INPUT.
5V
This pin outputs 5V from the the board when powered from the USB connector or from the VIN pin of the board. It is unregulated and the voltage is taken directly from the inputs. As an OUTPUT, it should not be used as an input pin to power the board.
VCC
This pin outputs 3.3V through the on-board voltage regulator. This voltage is the same regardless the power source used (USB, Vin and Battery).
LED ON
This LED is connected to the 5V input from either USB or VIN. It is not connected to the battery power. This means that it lits up when power is from USB or VIN, but stays off when the board is running on battery power. This maximizes the usage of the energy stored in the battery. It is therefore normal to have the board properly running on battery power without the LED ON being lit.
CHARGE LED
The CHARGE LED on the board is driven by the charger chip that monitors the current drawn by the Li-Po battery while charging. Usually, it will lit up when the board gets 5V from VIN or USB and the chip starts charging the Li-Po battery connected to the JST connector. There are several occasions where this LED will start to blink at a frequency of about 2Hz. This flashing is caused by the following conditions maintained for a long time (from 20 to 70 minutes): - No battery is connected to JST connector. - Overdischarged/damaged battery is connected. It can't be recharged. - A fully charged battery is put through another unnecessary charging cycle. This is done disconnecting and reconnecting either VIN or the battery itself while VIN is connected.
Onboard LED
On MKR ZERO the onboard LED is connected to a dedicated pin (32) and not to 13 as on other boards. It is so suggested to use the LED_BUILTIN define .
(*) Note : DO NOT CONNECT to the male JST connector present on the board anything else than a Li-Po battery whose characteristics are compliant with those indicated above. Please DO NOT POWER VIN with more than 5V.
Learn more
Get Inspired

I'm excited to share the details of my BT Arduino Tank project, which incorporates some impressive 3D-printed components. While the main chassis of the tank was not 3D-printed, I utilized this technology to create two crucial parts: the enclosure for the motor driver and the compartment housing the remaining electronics. Additionally, I 3D-printed a cannon for an added touch of customization. The enclosure for the motor driver served as a protective housing, ensuring that the L298N motor driver module was securely mounted and shielded from external elements. By designing and 3D-printing this part, I could precisely fit it to the tank's specifications, providing a neat and organized arrangement of the electronics. In the same vein, the compartment for the remaining electronics, such as the Arduino Nano Every and the HC-05 Bluetooth module, was also 3D-printed. This enclosure offered a clean and organized solution for housing these components, safeguarding them while maintaining easy access for maintenance or modifications. Lastly, to enhance the tank's appearance and add a touch of personalization, I designed and 3D-printed a cannon. This custom-printed cannon perfectly complemented the overall design, making the tank even more visually appealing. By strategically incorporating 3D printing into specific parts of the project, I achieved a balance between functionality and customization. The precision and versatility of 3D printing allowed me to create tailored enclosures and a unique cannon, elevating the overall aesthetic and practicality of my BT Arduino Tank project.

When you want to paint the walls in your bedroom that very specific shade of Misty Irish Green, all you have to do is head to your local hardware store and have them scan the corresponding card. The paint-mixing machine will then add the pigment to a white base and, a few minutes later, you have that exact color. So, shouldn’t you be able to do the same thing with acrylic paint for hobby purposes? Now you can, thanks to the “Color By Code” machine designed by Caltech students Frida Moreno and Asmat Kaur Taunque. Moreno and Taunque built Color By Code for a class project and it is, essentially, a hobby version of those hardware store paint-mixers intended for acrylic paint. As is the standard across many industries that deal with pigments, paint, and printing, this works using CMYK (cyan, magenta, yellow, key) color mixing. Here, the key is black and the machine takes an input color value for each component, then dispenses the paint in those ratios to achieve the desired hue. That all happens under the control of an Arduino Nano Every board. That operates peristaltic pumps, via L298N motor drivers, that dispense each color. Afterwards, a flushing procedure clears the lines before the next mix. The pumps fit into a 3D-printed stand, with the hoses dropping below to a waiting container. At this time, the user must set the color values through serial commands. But the team hopes to create a Bluetooth app in the future. They also plan to add a weight sensor, which would improve the machine’s accuracy.
FAQs
Q: I plugged the board to my PC / MAC but I cannot see the serial port listed on the IDE, I cannot upload sketch to the board!
A: The first thing to try is manually put the CPU into bootloader mode, this is accomplished by pressing quickly twice the reset button (you need a pencil to actually push the button). Another try is to change the USB cable: some micro-USB cables are "power only", you'll see the board powered but no data connection to the PC.
Q: I plugged the board, I can see the serial port but I cannot upload sketch
A: If still on, remove the conductive foam that protects the pins.
Q: What's the pin number of the onboard LED? Pin 13 seems to not work...
A: The LED is connected to a dedicated pin. Use the LED_BUILTIN constant instead of declaring the pin number.
Q: What does the CHRG LED blinking indicate?
A: Indicates that the board is charging the LiPo battery connected to the white JST connector. Please note that the charger use a constant current of 350mA, this means that you must use a LiPo battery with a minimum capacity of 700mAh otherwise you risk unpleasant side-effects like flames and/or explosions.
Q: After some time the Charge LED starts blinking even if no battery is attached to the JST connector
A: The CHARGE LED on the board is driven by the charger chip. This LED starts to blink at a frequency of about 2Hz (slow blink) if a defective or no battery is connected to the JST connector.
Q: I see that A0 is marked as DAC0. There is a DAC on that pin? is usable?
A: Yes, there is a DAC and it's usable, you can control the pin with analogWrite(..).
Q: Which is the VIN range voltage value?
A: VIN Nominal voltage value is 5V, range is from 5V to 6V (6V is the Maximum)
Q: Which is the polarity of the battery?
A: Looking at the connector pins: Left = Positive, Right = GND
Q: How can I use the on-board SD?
A: The on-board is connected to a dedicated SPI interface. The SD library deals with it, so you use the library as usual. Use SD.begin() without specify any pin number, the number will fallback to the right one.
Q: What Vin, 5V and VCC means?
A: Vin. This pin can be used to power the board with a regulated 5V source. If the power is fed through this pin, the USB power source is disconnected. This is the only way you can supply 5v (range is 5V to maximum 6V) to the board not using USB. This pin is an INPUT. 5V. This pin outputs 5V from the board when powered from the USB connector or from the VIN pin of the board. It is unregulated and the voltage is taken directly from the inputs. When powered from the battery it supplies around 3.7 V. As an OUTPUT, it should not be used as an input pin to power the board. VCC. This pin outputs 3.3V through the onboard voltage regulator. This voltage is the same regardless the power source used (USB, Vin and Battery).