Adafruit Gemma M0


The Gemma M0 is a super small microcontroller board, with just enough to build many simple projects. It may look small and cute: round, about the size of a quarter, with friendly alligator-clip sew pads. But do not be fooled! The Gemma M0 is incredibly powerful! We've taken the same form factor we used for the original ATtiny85-based Gemma and gave it a power up. The Gemma M0 has swapped out the lightweight ATtiny85 for a ATSAMD21E18 powerhouse.
It will super-charge your wearables! It's just as small, and it's easier to use, so you can do more.
The most exciting part of the Gemma M0 is that while you can use it with the Arduino IDE, we are shipping it with CircuitPython on board. When you plug it in, it will show up as a very small disk drive with on it. Edit with your favorite text editor to build your project using Python, the most popular programming language. No installs, IDE or compiler needed, so you can use it on any computer, even ChromeBooks or computers you can't install software on. When you're done, unplug the Gemma M0 and your code will go with you.
Here are some of the updates you can look forward to when using Gemma M0:
  • Same size, form-factor, and pinout as classic Gemma
  • Updating ATtiny85 8-bit AVR for ATSAMD21E18 32-bit Cortex M0+
  • 256KB Flash - 8x as much as 8 KB on ATtiny85
  • 32 KB RAM - 64x as much as 512 bytes on ATtiny85
  • 48 MHz 32 bit processor - 6x as fast as ATtiny85 (not even taking into account 32-bit speedups)
  • Native USB supported by every OS - can be used in Arduino or CircuitPython as USB serial console, Keyboard/Mouse HID, even a little disk drive for storing Python scripts. (ATtiny85 does not have native USB)
  • Can be used with Arduino IDE or CircuitPython
  • Built in RGB DotStar LED
  • Three big-hole sew-pads can be used for conductive thread or alligator-clips for fast prototyping
    • Each I/O pad can be used for 12-bit analog input, or digital input/output with internally connected pullups or pulldowns
    • We gave the M0 pads the exact same names as the original Gemma so all your existing Arduino code will work exactly the same as-is without changes
    • True analog output on one I/O pad - can be used to play 10-bit quality audio clips
    • Two high speed PWM outputs on other two I/O Pads - for servos, LEDs, etc
    • All three pads can also be used as hardware capacitive touch sensors with no additional components required
    • Can drive NeoPixels or DotStars on any pins, with enough memory to drive 8000+ pixels. DMA-NeoPixel support on one pin so you can drive pixels without having to spend any processor time on it.
    • Native hardware I2C or Serial available on two pads so you can connect to any I2C or Serial device with true hardware support (no annoying bit-banging)
  • Same Reset switch for starting your project code over
  • On/Off switch built in
  • JST battery connector for plugging in AAA's or LiPoly battery (no built-in LiPoly charging so it is safe to use with NiMH/Alkalines)
Each order comes with one fully assembled and tested Gemma M0 with CircuitPython & example code programmed in.
So what are you waiting for? Pick up a Gemma M0 today and be amazed at how easy and fast it is to get started with Gemma and CircuitPython!

Guided Tour

Let me take you on a tour of your Gemma M0! Each Gemma M0 is assembled here at Adafruit and comes chock-full of good design to make it a joy to use.
  • Micro B USB connector - We went with the tried and true micro-B USB connector for power and/or USB communication (bootloader, serial, HID, etc). Use with any computer with a standard data/sync cable.
  • RGB DotStar LED - Instead of an always-on green LED we provide a full RGB LED. You can set it to any color in the rainbow. It will also help you know when the bootloader is running (it will turn green) or if it failed to initialize USB when connected to a computer (it will turn red). By default after you boot up the Gemma M0 it will turn a lovely violet color.
  • Red #13 LED - this LED does double duty. Its connected with a series resistor to the digital #13 GPIO pin. It pulses nicely when the Gemma is in bootloader mode, and its also handy for when you want an indicator LED.
  • JST Battery Input - take your Gemma anywhere and power it from an external battery. This pin can take up 6V DC input, and has reverse-polarity, over-current and thermal protections. The circuitry inside will use either the battery or USB power, safely switching from one to the other. If both are connected, it will use whichever has the higher voltage. Works great with a Lithium Polymer battery or our 3xAAA battery packs with a JST connector on the end. There is no built in battery charging (so that you can use Alkaline or Lithium batteries safely)
  • Vout (Voltage Output) - This pin will give you either the battery power or USB power, whichever has a higher voltage. Its great when you want to power something like NeoPixels, that might use more than the 500mA available from the onboard regulator
  • 3V Regulator - The on-board voltage regulator can supply up to 500mA at a steady 3.3V from up to 6VDC
  • Sewing and Alligator clip friendly pads - You can easily sew to these pads, and they're gold plated so they wont corrode (oxidize). You can also use alligator clips or solder directly to them.
  • 3 General Purpose I/O (GPIO) Pads! - 3 GPIO pins, at 3V logic, check the next section for a detailed pinout guide
  • Reset Button - an onboard reset button will launch the bootloader when pressed and the Gemma is plugged into a computer. If it is not connected to a computer, it's smart enough to go straight to the program.
  • On/Off switch - Lets you turn on/off your project, it will control both the Gemma and the Vout pad. This switch can switch up to about 500mA of current, so if you are driving a huge number of servos or NeoPixels, connect power to those power-greedy parts externally.


JST Battery Input

There is no battery INPUT pin on the Gemma. You can connect a battery via the JST jack. We have found that Lipoly batteries, coin-cells, and AAA's work great. You can also make your own battery input pack using a plain JST cable. And use a JST extension cable if necessary.

You can plug anything from around 4 VDC up to 6 VDC. That means any single-cell LiPoly, or 3-4 AAA or AA batteries. This input is polarity protected. Gemma and DotStar LED light up, you're good to go. You can turn off the battery with the on/off switch, which will completely disconnect power on the Gemma M0.

Power Pads

Half of the pads on the Gemma M0 are related to power in and out: 3Vo , Vout and GND
  • Vout - This is a voltage OUTPUT pin, it will be connected to either the USB power or the battery input, whichever has the higher voltage. This output does not connect to the regulator so you can draw as much current as your USB port / Battery can provide (in general, thats about 500mA)
  • 3Vo - This is the 3.3V OUTPUT pad from the voltage regulator. It can provide up to 500mA at a steady 3.3V. Good for sensors or small LEDs or other 3V devices.
  • GND is the common ground pin, used for logic and power. It is connected to the USB ground and the power regulator, etc. This is the pin you'll want to use for any and all ground connections

Input/Output Pads

Next we will cover the 3 GPIO (General Purpose Input Ouput) pins! For reference you may want to also check out the datasheet-reference in the downloads section for the core ATSAMD21E18 pin. We picked pins that have a lot of capabilities.

Common to all pads

All the GPIO pads can be used as digital inputs, digital outputs, for LEDs, buttons and switches. In additon, all can be used as analog inputs (12-bit ADC) or hardware capacitive touch. All pads can also be used as hardware interrupts inputs.
Each pad can provide up to ~7mA of current. Don't connect a motor or other high-power component directly to the pins! Instead, use a transistor to power the DC motor on/off

On a Gemma M0, the GPIO are 3.3V output level, and should not be used with 5V inputs. In general, most 5V devices are OK with 3.3V output though.

The three pads are completely 'free' pins, they are not used by the USB connection, LEDs, DotStar, etc so you never have to worry about the USB interface interfering with them when programming

Unique pad capabilities

  • Pad #0 / A2  - this is connected to PA04 on the ATSAMD21. This pin can be used as a digital I/O with selectable pullup or pulldown, capacitive touch, analog input (use 'A2'),  PWM output, and is also used for I2C data (SDA), and hardware Serial RX.
  • Pad #1 / A0  - this is connected to PA02 on the ATSAMD21. This pin can be used as a digital I/O with selectable pullup or pulldown, capacitive touch, analog input (use 'A0'),  and true analog (10-bit DAC) output. It cannot be used as PWM output.
  • Pad #2 / A1  - this is connected to PA05 on the ATSAMD21. This pin can be used as a digital I/O with selectable pullup or pulldown, capacitive touch, analog input (use 'A1'),  PWM output, and is also used for I2C clock (SCL), and hardware Serial TX.

Secret SWD and Reset Pads

On the bottom of the Gemma M0 you will see three small pads. These are used for our programming/test but you can use them too.
Starting from the pad closest to the edge there is:
  • Reset
On the off chance you want to reprogram your Gemma M0 or debug it using a Cortex M0 debug/programmer, you will need to solder/connect to these pads. We use them for testing and you will likely never need it but they are there if you do!

Windows Driver Installation

Mac and Linux do not require drivers, only Windows folks need to do this step
Before you plug in your board, you'll need to possibly install a driver!

Click below to download our Driver Installer.
Download and run the installer.
Run the installer! Since we bundle the SiLabs and FTDI drivers as well, you'll need to click through the license
Select which drivers you want to install, we suggest selecting all of them so you don't have to do this again!
On Windows 7, by default, we install a single driver for most of Adafruit's boards, including the Feather 32u4, the Feather M0, Feather M0, Express, Circuit Playground, Circuit Playground Express, Gemma M0, Trinket M0, Metro M0 Express. On Windows 10 that driver is not necessary (it's built in to Windows) and it will not be listed.
The Trinket / Pro Trinket / Gemma / USBtinyISP drivers are also installed by default.
You can also, optionally, install the Arduino Gemma (different than the Adafruit Gemma!), Huzzah and Metro 328 drivers.
Click Install to do the installin'.
Note that on Windows 10, support for many boards is built in. If you end up not checking any boxes, you don't need to run the installer at all!

Manual Driver Installation

If windows needs the driver files (inf/cat) for some reason you can get all the drivers by downloading the source code zip file from this link:
And point windows to the Drivers folder when it asks for the driver location

What is CircuitPython?

CircuitPython is a programming language designed to simplify experimenting and learning to program on low-cost microcontroller boards. It makes getting started easier than ever with no upfront desktop downloads needed. Once you get your board set up, open any text editor, and get started editing code. It's that simple.

CircuitPython is based on Python

Python is the fastest growing programming language. It's taught in schools and universities. It's a high-level programming language which means it's designed to be easier to read, write and maintain. It supports modules and packages which means it's easy to reuse your code for other projects. It has a built in interpreter which means there are no extra steps, like compiling, to get your code to work. And of course, Python is Open Source Software which means it's free for anyone to use, modify or improve upon.
CircuitPython adds hardware support to all of these amazing features. If you already have Python knowledge, you can easily apply that to using CircuitPython. If you have no previous experience, it's really simple to get started!


Popular posts from this blog

Third Eye using Arduino

Build a Cloud-Connected ESP8266 Power Meter

DIY Arduino & Bluetooth Controlled Robotic Arm