The adoption of Python as a language of choice for hobby-embedded hardware is good news for everyone. It makes the basics of coding easier to grasp, with less confusing syntax and more readability. Noone has taken on Python on microcontrollers quite as wholeheartedly as Adafruit, who started the CircuitPython project, a subset of MicroPython - the offshoot of Python designed for embedded hardware.
It's not surprising then, that Adafruit has a variety of boards that are Python-compatible, but the Feather M0 Express is special - it's the first board ever that is specifically designed for coding using CircuitPython.
What is the Adafruit Feather M0 Express?
At its core, the Adafruit Feather M0 Express (hereafter M0 Express) is an evaluation board for the ATSAMD21G18 microcontroller (MCU). It's a 32-bit Cortex M0+ chip running at 48 MHz and uses 3.3v logic and power. It's a simple but powerful MCU, and the 256K of Flash and 32K or RAM make it a significant upgrade from the Arduino Uno and Micro.
The M0 Express shares this MCU with the Arduino Zero, which makes both cross-compatible - you can easily use the M0 Express with the Arduino IDE, and the Arduino Zero with CircuitPython.
You get a full complement of general-purpose input/output (GPIO) pins too. There are 20 in total, which all support PWM output, Serial, I2C, and SPI. There are also 6 12-bit analog inputs and a 10-bit DAC output. One nice feature of the MCU is the ability to work with capacitive touch natively, any pin can use it without any further hardware.
Two other notable features are the ability to emulate a keyboard or mouse as a USB HID, and it has a 100mA LiPo charging chip for battery operation.
This little board fits a lot in, and at just $19.99 it offers a lot more for not much more cash than similar development boards.
Adafruit Feather M0 Express Specs
- Dimensions: 2.0" x 0.9" x 0.28" (51mm x 23mm x 8mm) w/out headers
- Weight: 5 grams
- CPU: ATSAMD21G18 @ 48MHz with 3.3V logic/power
- Flash: 256KB of FLASH + 32KB of RAM
- EEPROM: No
- Timing: 32.768 kHz crystal for clock generation & RTC
- Power: 3.3V regulator with 500mA peak current output
- USB: USB native support, comes with USB bootloader and serial port debugging
- 20 GPIO pins
- Hardware Serial
- Hardware I2C
- Hardware SPI support
- PWM outputs on all pins
- 6 x 12-bit analog inputs
- 1 x 10-bit analog output (DAC)
- Built-in 100mA lipoly charger with charging status indicator LED
- Pin #13 red LED for general purpose blinking
- Power/enable pin
- 4 mounting holes
- Reset button
What can You do with the Adafruit Feather M0 Express?
As a small, fast development board, there's a lot you could do with the M0 Express. Luckily, Adafruit have put together a fantastic getting started guide which not only tells you how to get setup with both the Arduino IDE and CircuitPython, but gives many examples of how to use the board for controlling Neopixel LEDs, emulating a Keyboard and Mouse via HID, and setting up I2C devices.
What is CircuitPython?
So far, this article has talked about CircuitPython a lot, but what is it?
In short, CircuitPython is an offshoot of MicroPython, which in turn is an offshoot of the Python programming language. Adafruit was behind the development of CircuitPython, designing it to be easy to understand and easy to teach. It's completely open-source, constantly being expanded upon, and exists primarily for educational purposes.
That said, the wide range of supported devices and helper functions for a vast array of components make it more than sufficient for almost all hobby home DIY electronics and Internet of Things (IoT) devices.
CircuitPython doesn't just work with Adafruit boards either, and there is a continuously growing list of supported development boards on the official CircuitPython website.
What is MicroPython?
Before there was CircuitPython, there was MicroPython. Both work on similar principles, but where CircuitPython was designed to simplify the Python experience, MicroPython was the original project that brought Python 3 to microcontrollers in the first place.
The pyboard was the original Python hardware development board, and the more recent D-series are among the most powerful and well-equipped Python-based development boards available.
While CircuitPython is a little easier for beginners to understand, MicroPython is the most feature-complete implementation of Python for microcontrollers out there and is the language advised for the Raspberry Pi Pico according to the official documentation.
MicroPython vs. CircuitPython - What’s the Difference?
When put head to head, the main difference between CircuitPython and MicroPython is ease of use. CircuitPython is designed to be easy to use and easy to read for beginners. It may be missing a few bleeding edge modules in terms of support, but what is there is well explained and rarely broken.
MicroPython feels much closer to the kind of language you'd find in regular embedded programming. While it's still easier than C for beginners, there is a steeper learning curve. That said, you get a wider range of support for boards and peripherals, they just might take a little more work to implement.
For almost all users, CircuitPython is a good place to start with any project. If you hit the limits, porting to MicroPython shouldn't be hard - or you could contribute to the CircuitPython project and add your functionality to the community effort!
Arduino IDE Compatible
This board was designed with CircuitPython in mind, but many folks have a history with the Arduino IDE, me included. The ability to quickly test something out in an environment you are comfortable with is a valuable thing, and the Arduino IDE support for the M0 Express is a nice touch.
Adding the M0 Express to the boards list of the Arduino IDE is similar to most other third-party boards, and Adafruit provides a step by step guide to getting set up. One neat feature of using the M0 Express with the Arduino IDE is that you can use the onboard SPI flash memory as storage by using Adafruit's SPI Memory Library, details of which are outlined later in the same tutorial.
MakeCode Block-Based Coding
While CircuitPython is a great way to introduce children and beginners to Python and microcontrollers, it can still be a bit intimidating. Luckily, Microsoft MakeCode is compatible with the Feather M0 Express, and eliminates the need to remember syntax altogether. Best of all? It works in the browser and is completely free!
As well as learning about code logic with visual blocks, there's a handy digital mockup of the M0 express too, and every digital circuit you make is downloadable as a handy step-by-step guide. It's one of the best tools for learning the basics out there and a really welcome addition to the Feather M0 Express.
Adafruit Feather M0 Variants
The Feather M0 Express may have been the first Adafruit board for CircuitPython, but hot on it's heels were several similar boards for different use cases.
The Adalogger is a feature M0 board with an added Micro SD card slot, making it perfect for battery-powered sensor logging projects. If you are looking for a specific kind of connectivity there is the Bluetooth Low Energy (BLE) Adafruit Feather M0 Bluefruit LE and the Long Range Radiofruit M0 - which has a 900MHz radio chip built in to the same form factor.
Alternatively, if you are looking for the same power and accessibility but in a tiny form factor, the Trinket M0 costs half as much, and is just 27 x 15 mm in size. You lose a lot of GPIO, but you gain one of the smallest Python boards available!
Who Should Use the Adafruit Feather M0 Express?
The Adafruit Feather M0 Express is a great board for beginners and educators due to its simplicity to use, wide range of functions, and battery charging capabilities. What it lacks in connectivity it makes up for in its wide range of GPIO options, and USB HID/Host options make it a great way to interface with computers. The fact that every input pin can work with capacitive touch is another bonus. Combine those two things and you are well on your way to a melon synthesizer:
Another place where this board could shine is in wearable and costume design in general. The combination of easy programming with effortless battery power makes it great for quick design iteration.
Is the Adafruit Feather M0 Express Worth it?
At $19.99 the Feather M0 is cheaper than an official Arduino Uno, and while CircuitPython is still relatively young compared to the Arduino IDE, it's easier to pick up for complete beginners. For the money, there are few boards that are so easy to get started with, and much of what you are paying for in the Feather M0 Express is the work the CircuitPython team is putting in to make it accessible to all.
Adafruit Feather M0 Express Final Thoughts
There may be cheaper dev boards out there for working with CircuitPython, but none with the unique set of characteristics the ATSAMD21G18 MCU brings to the table. For a battery powerable, easy to program hobby board that'll work in almost any beginner DIY project, the Adafruit Feather M0 Express is a fantastic choice.