Adafruit Feather M0 Express

The courier showed up today, with a really neat new board from Adafruit – the Feather M0 Express. It is essentially a break out board for the Microchip (formerly Atmel) ATSAMD21G18, which is the same ARM M0+ micro used in the Arduino Zero, plus a 2MB flash memory, RGB LED, and a LiPoly charger. It’s not too expensive at $20USD, nice and tiny, and I think could be a real hit.

Using the Feather M0 Express from Arduino IDE almost couldn’t be easier – just add the Adafruit Board Manager URL to your Arduino IDE settings, then install the “Adafruit SAMD Boards” – instructions at .

However, the really exciting new option available with this new board, is CircuitPython – Adafruit’s implementation of MicroPython. Getting setup for CircuitPython is super easy, though the documentation is still under development so it might seem a bit intimidating at first read. Here’s what I did:

  1. Download the latest CircuitPython uf2 file for your board from
  2. Connect the Feather to your computer via USB
  3. Put the Feather in to bootloader mode by “double clicking” the reset button. You’ll know it works when the #13 LED starts fading on and off.
  4. Copy the uf2 file from step 2, on to the FEATHERBOOT USB drive that should have appeared in step 3.  Wait a few seconds.

There should now be a USB drive available called CIRCUITPY, and a virtual serial port available.

Using your favourite serial console with the virtual serial port gives an interactive terminal, aka REPL, which can be used directly as below. Or, just save a source file as in the CIRCUITPY drive to get your program to run at boot.

Adafruit CircuitPython 0.9.5 on 2017-04-14; Adafruit Feather M0 Express with samd21g18
>>> print("hi")
>>> help()
Welcome to Adafruit CircuitPython 0.9.5!

Please visit for project guides.

Built in modules:
(list continues)

Let’s make the “hello world” of embedded programming (but this time, done on-target using tab completion!):

>>> import digitalio
>>> import board
>>> import time
>>> with digitalio.DigitalInOut(board.D13) as led:
...     led.switch_to_output()
...     while True:
...         led.value = 1
...         time.sleep(0.5)
...         led.value = 0
...         time.sleep(0.5)

Author: ian.rees

Easily distracted by magnets. And shiny things. Shiny magnets eliminate any chance of productivity.