Source code browser

# Adafruit CircuitPython

[![Build Status](]( [![Doc Status](]( [![Gitter](](

This is an open source derivative of [MicroPython](
for use on educational development boards designed and sold by [Adafruit](

As a MicroPython derivative, this implements Python 3.x on microcontrollers such
as the SAMD21 and ESP8266.

## Project Status
This project is in beta. Most APIs should be stable going forward.

### Supported boards

#### Designed for CircuitPython
* [Adafruit Feather M0 Express](

#### Other
* [Adafruit Feather HUZZAH](
* [Adafruit Feather M0 Basic](
* [Adafruit Feather M0 Bluefruit LE]( (uses M0 Basic binaries)
* [Adafruit Feather M0 Adalogger]( (MicroSD card not supported yet.)
* [Arduino Zero](

## Download

Official binaries are available through the [latest GitHub releases](
Continuous (one per commit) builds are available [here](
which includes experimental hardware support.

## Documentation

Guides and videos are available through the [Adafruit Learning System]( under the [CircuitPython category]( and [MicroPython category]( An API reference is also available on [Read the Docs](

## Contributing
See [](
for full guidelines but please be aware that by contributing to this project you
are agreeing to the
[Code of Conduct](
Contributors who follow the
[Code of Conduct](
are welcome to submit pull requests and they will be promptly reviewed by
project admins. Please join the [Gitter chat]( too.

## Differences from [MicroPython](

* Port for Atmel SAMD21 (Commonly known as M0 in product names.)
* No `machine` API on Atmel SAMD21 port.
* Only supports Atmel SAMD21 and ESP8266 ports.
* Unified hardware APIs: [`analogio`](, [`busio`](, [`digitalio`](, [`pulseio`](, [`touchio`](, [`microcontroller`](, [`board`](, [`bitbangio`]( (Only available on atmel-samd21 and ESP8266 currently.)
* Tracks MicroPython's releases (not master).
* No module aliasing. (`uos` and `utime` are not available as `os` and `time` respectively.)
* Modules with a CPython counterpart, such as `time`, are strict [subsets]( of their [CPython version]( Therefore, code from CircuitPython is runnable on CPython but not necessarily the reverse.
* tick count is available as [`time.monotonic()`](
* `os` only available as `uos`
* atmel-samd21 features
    * RGB status LED
    * Auto-reset after file write over mass storage. (Disable with `samd.disable_autoreset()`)
    * Wait state after boot and main run, before REPL.
    * Main is one of these: code.txt,,, main.txt
    * Boot is one of these: settings.txt,,, boot.txt

## Project Structure
Here is an overview of the top-level directories.

### Core
The core code of MicroPython is shared amongst ports including CircuitPython:
- `docs` High level user documentation in Sphinx reStructuredText format.
- `drivers` External device drivers written in Python.
- `examples` A few example Python scripts.
- `extmod` Shared C code used in multiple ports' modules.
- `lib` Shared core C code including externally developed libraries such as FATFS.
- `logo` The MicroPython logo.
- `mpy-cross` A cross compiler that converts Python files to byte code prior to being run in MicroPython. Useful for reducing library size.
- `py` Core Python implementation, including compiler, runtime, and
  core library.
- `shared-bindings` Shared definition of Python modules, their docs and backing C APIs. Ports must implement the C API to support the corresponding module.
- `shared-module` Shared implementation of Python modules that may be based on `common-hal`.
- `tests` Test framework and test scripts.
- `tools` Various tools, including the module.

### Ports
Ports include the code unique to a microcontroller line and also variations
based on the board.
- `atmel-samd` Support for SAMD21 based boards such as [Arduino Zero](, [Adafruit Feather M0 Basic](,  and
[Adafruit Feather M0 Bluefruit LE](
- `bare-arm` A bare minimum version of MicroPython for ARM MCUs.
- `cc3200` Support for boards based [CC3200]( from TI such as the [WiPy 1.0](
- `esp8266` Support for boards based on ESP8266 WiFi modules such as the [Adafruit Feather HUZZAH](
- `minimal` A minimal MicroPython port. Start with this if you want
  to port MicroPython to another microcontroller.
- `pic16bit` Support for 16-bit PIC microcontrollers.
- `qemu-arm` Support for ARM emulation through [QEMU](
- `stmhal` Support for boards based on STM32 microcontrollers including the MicroPython flagship [PyBoard](
- `teensy` Support for the Teensy line of boards such as the [Teensy 3.1](
- `unix` Support for UNIX.
- `windows` Support for [Windows](
- `zephyr` Support for [Zephyr](, a real-time operating system by the Linux Foundation.

CircuitPython only maintains the `atmel-samd` and `esp8266` ports. The rest are here to maintain compatibility with the [MicroPython]( parent project.