When you program an Arduino Uno in C or C++, the compiler takes the code you’ve written and turns it into chunks of machine code the microcontroller’s processor can execute. The firmware you upload to the microcontroller has direct control of the processor.

Python is different. It’s an interpreted language, meaning the processor runs a program that speaks Python. The code you write doesn’t have direct control of the processor, it’s more like an elaborate set of button-presses that tell the code actually controlling the processor what to do.

Interpreted languages have some strong advantages over compiled languages: you can enter code on the fly and see the interpreter process the instructions as you type, and they handle a lot of nitpicky details like memory management so you don’t have to.

There are always trade-offs though. An interpreted language might have to execute several hundred processor instructions for every line of code you type, and the behind-the-scenes stuff like memory management also takes work. You can assume that interpreted code will always be at least 10x slower than compiled code, and will require about 10x more programming resources like RAM and program storage.

The SAMD21G has enough RAM to run a simple Python interpreter, and we gave our Express boards a Flash chip where they can store code. The result is a set of boards you can program in Python on the fly.

The Circuit Playground Express:

The Circuit Playground Express is the flagship of our Python-programmable line.

It’s designed to be a lots-of-interesting-stuff-with-no-wiring-necessary learning tool like the Circuit Playground Classic, but it also has the microcontroller and external Flash that a Python interpreter needs.

We’ve written the low-level code that lets the Python interpreter talk to the hardware, and we’ve installed the UF2 bootloader (the program that lets a chip upload its own code). That makes getting Python code and libraries from your computer to the Flash chip as easy as dragging and dropping files on a USB thumb drive.

The Metro M0 Express:

All the Python in the Uno footprint.

The Metro M0 Express doesn’t have all the connected devices of a Circuit Playground Classic, but is more friendly to breadboarding on the workbench or existing projects that are already designed for an Uno.

The Feather M0 Express:

With this one, you can take your Python for a walk.

The Feather M0 Express is good for battery-powered projects and is compatible with all the boards in the Feather ecosystem.

The Trinket M0 and Gemma M0

Frankly, we designed these to replace the ATtiny85 Trinket and Gemma.


People would buy a Trinket or Gemma thinking it was a cheap and easy way to get started in microcontroller programming, not knowing that those boards were more of a challenge than a larger board like the Metro 328P. The result was an ongoing mismatch between expectations and experience.


The new M0 versions use a SAMD21E microcontroller, which is a bit smaller and more limited than the SAMD21G, but is far more capable than the ATtiny85. They handle their own USB communication and their GPIO pins are easier to work with.


They’re still special-purpose boards best suited to embedded projects where space is limited, but they do work as cheap and simple entry-level boards.

Note: The book Getting Started with Adafruit Trinket does not cover the Trinket M0 or the Gemma M0.

This guide was first published on Nov 07, 2018. It was last updated on Mar 08, 2024.

This page (CircuitPython Boards) was last updated on Mar 08, 2024.

Text editor powered by tinymce.