277 lines
13 KiB
ReStructuredText
277 lines
13 KiB
ReStructuredText
Adafruit CircuitPython
|
|
======================
|
|
|
|
.. image:: https://github.com/adafruit/circuitpython/blob/master/logo/CircuitPython_Repo_header_logo.png
|
|
|
|
|Build Status| |Doc Status| |License| |Discord|
|
|
|
|
`Status <#status>`__ \| `Supported Boards <#supported-boards>`__
|
|
\| `Download <#download>`__ \|
|
|
`Documentation <#documentation>`__ \|
|
|
`Contributing <#contributing>`__ \| `Differences from
|
|
Micropython <#differences-from-micropython>`__ \| `Project
|
|
Structure <#project-structure>`__
|
|
|
|
**CircuitPython** is an *education friendly* open source derivative of
|
|
`MicroPython <https://micropython.org>`_. CircuitPython supports use
|
|
on educational development boards designed and sold by
|
|
`Adafruit <https://adafruit.com>`_. Adafruit CircuitPython features
|
|
unified Python core APIs and a growing list of Adafruit libraries and
|
|
drivers of that work with it.
|
|
|
|
Status
|
|
------
|
|
|
|
This project is stable. Most APIs should be stable going forward. Those
|
|
that change will change on major version numbers such as 2.0.0 and
|
|
3.0.0.
|
|
|
|
Supported Boards
|
|
----------------
|
|
|
|
Designed for CircuitPython
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
**M0 Boards**
|
|
|
|
- `Adafruit CircuitPlayground Express <https://www.adafruit.com/product/3333>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-circuit-playground-express/circuitpython-quickstart>`__)
|
|
- `Adafruit Feather M0 Express <https://www.adafruit.com/product/3403>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-feather-m0-express-designed-for-circuit-python-circuitpython/kattni-circuitpython>`__)
|
|
- `Adafruit Gemma M0 <https://www.adafruit.com/product/3501>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-gemma-m0/circuitpython>`__)
|
|
- `Adafruit Hallowing M0 Express <https://www.adafruit.com/product/3900>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-hallowing/circuitpython>`__)
|
|
- `Adafruit ItsyBitsy M0 Express <https://www.adafruit.com/product/3727>`_ (`CircuitPython Guide <https://learn.adafruit.com/introducing-itsy-bitsy-m0/circuitpython>`__)
|
|
- `Adafruit Metro M0 Express <https://www.adafruit.com/product/3505>`_ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m0-express-designed-for-circuitpython/circuitpython>`__)
|
|
- `Adafruit Trinket M0 <https://www.adafruit.com/product/3500>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-trinket-m0-circuitpython-arduino/circuitpython>`__)
|
|
|
|
**M4 Boards**
|
|
|
|
- `Adafruit Feather M4 Express <https://www.adafruit.com/product/3857>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/circuitpython>`__)
|
|
- `Adafruit ItsyBitsy M4 Express <https://www.adafruit.com/product/3800>`__ (`CircuitPython Guide <https://learn.adafruit.com/introducing-adafruit-itsybitsy-m4/circuitpython>`__)
|
|
- `Adafruit Metro M4 Express <https://www.adafruit.com/product/3382>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m4-express-featuring-atsamd51/circuitpython>`__)
|
|
|
|
Other
|
|
~~~~~
|
|
|
|
- `Adafruit Feather HUZZAH <https://www.adafruit.com/products/2821>`__
|
|
- `Adafruit Feather M0
|
|
Basic <https://www.adafruit.com/products/2772>`__
|
|
- `Adafruit Feather M0 Bluefruit
|
|
LE <https://www.adafruit.com/products/2995>`__ (uses M0 Basic
|
|
binaries)
|
|
- `Adafruit Feather M0
|
|
Adalogger <https://www.adafruit.com/product/2796>`__ (MicroSD card
|
|
supported using the `Adafruit CircuitPython SD
|
|
library <https://github.com/adafruit/Adafruit_CircuitPython_SD>`__)
|
|
- `Arduino Zero <https://www.arduino.cc/en/Main/ArduinoBoardZero>`__
|
|
- `Arduino MKR Zero <https://store.arduino.cc/arduino-mkrzero>`__ (MicroSD card
|
|
supported using the `Adafruit CircuitPython SD
|
|
library <https://github.com/adafruit/Adafruit_CircuitPython_SD>`__)
|
|
|
|
"Third-party" or "non-Adafruit" boards
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
- `Electronic Cats Meow Meow <https://electroniccats.com/gomeow/>`__
|
|
- `Electronic Cats CatWAN USB Stick <https://electroniccats.com/producto/catwan_usb_stick/>`__
|
|
|
|
Download
|
|
--------
|
|
|
|
Official binaries are available through the `latest GitHub
|
|
releases <https://github.com/adafruit/circuitpython/releases>`__.
|
|
Continuous (one per commit) builds are available
|
|
`here <https://adafruit-circuit-python.s3.amazonaws.com/index.html?prefix=bin>`__
|
|
and includes experimental hardware support.
|
|
|
|
Documentation
|
|
-------------
|
|
|
|
Guides and videos are available through the `Adafruit Learning
|
|
System <https://learn.adafruit.com/>`__ under the `CircuitPython
|
|
category <https://learn.adafruit.com/category/circuitpython>`__ and
|
|
`MicroPython
|
|
category <https://learn.adafruit.com/category/micropython>`__. An API
|
|
reference is also available on `Read the Docs
|
|
<http://circuitpython.readthedocs.io/en/latest/?>`__. A collection of awesome
|
|
resources can be found at `Awesome CircuitPython <https://github.com/adafruit/awesome-circuitpython>`__.
|
|
|
|
Specifically useful documentation when starting out:
|
|
|
|
- `Welcome to CircuitPython <https://learn.adafruit.com/welcome-to-circuitpython>`__
|
|
- `CircuitPython Essentials <https://learn.adafruit.com/circuitpython-essentials>`__
|
|
- `Example Code <https://github.com/adafruit/Adafruit_Learning_System_Guides/tree/master/CircuitPython_Essentials>`__
|
|
|
|
Contributing
|
|
------------
|
|
|
|
See
|
|
`CONTRIBUTING.md <https://github.com/adafruit/circuitpython/blob/master/CONTRIBUTING.md>`__
|
|
for full guidelines but please be aware that by contributing to this
|
|
project you are agreeing to the `Code of
|
|
Conduct <https://github.com/adafruit/circuitpython/blob/master/CODE_OF_CONDUCT.md>`__.
|
|
Contributors who follow the `Code of
|
|
Conduct <https://github.com/adafruit/circuitpython/blob/master/CODE_OF_CONDUCT.md>`__
|
|
are welcome to submit pull requests and they will be promptly reviewed
|
|
by project admins. Please join the
|
|
`Discord <https://discord.gg/nBQh6qu>`__ too.
|
|
|
|
--------------
|
|
|
|
Differences from `MicroPython <https://github.com/micropython/micropython>`__
|
|
-----------------------------------------------------------------------------
|
|
|
|
CircuitPython:
|
|
|
|
- includes a ports for MicroChip SAMD21 (Commonly known as M0 in Adafruit
|
|
product names) and SAMD51 (M4).
|
|
- supports only SAMD21, SAMD51, and ESP8266 ports. An nRF port is under
|
|
development.
|
|
- tracks MicroPython's releases (not master).
|
|
- Longints (arbitrary-length integers) are enabled for most M0
|
|
Express boards (those boards with SPI flash chips external
|
|
to the microcontroller), and for all M4 builds.
|
|
Longints are disabled on other boards due to lack of flash space.
|
|
|
|
Behavior
|
|
~~~~~~~~
|
|
|
|
- The order that files are run and the state that is shared between
|
|
them. CircuitPython's goal is to clarify the role of each file and
|
|
make each file independent from each other.
|
|
- ``boot.py`` (or ``settings.py``) runs only once on start up before
|
|
USB is initialized. This lays the ground work for configuring USB at
|
|
startup rather than it being fixed. Since serial is not available,
|
|
output is written to ``boot_out.txt``.
|
|
- ``code.py`` (or ``main.py``) is run after every reload until it
|
|
finishes or is interrupted. After it is done running, the vm and
|
|
hardware is reinitialized. **This means you cannot read state from
|
|
``code.py`` in the REPL anymore.** CircuitPython's goal for this
|
|
change includes reduce confusion about pins and memory being used.
|
|
- After ``code.py`` the REPL can be entered by pressing any key. It no
|
|
longer shares state with ``code.py`` so it is a fresh vm.
|
|
- Autoreload state will be maintained across reload.
|
|
- Adds a safe mode that does not run user code after a hard crash or
|
|
brown out. The hope is that this will make it easier to fix code that
|
|
causes nasty crashes by making it available through mass storage
|
|
after the crash. A reset (the button) is needed after its fixed to
|
|
get back into normal mode.
|
|
|
|
API
|
|
~~~
|
|
|
|
- Unified hardware APIs: `audioio <https://circuitpython.readthedocs.io/en/latest/shared-bindings/audioio/__init__.html>`_, `analogio <https://circuitpython.readthedocs.io/en/latest/shared-bindings/analogio/__init__.html>`_, `bleio <https://circuitpython.readthedocs.io/en/latest/shared-bindings/bleio/__init__.html>`_, `busio <https://circuitpython.readthedocs.io/en/latest/shared-bindings/busio/__init__.html>`_, `digitalio <https://circuitpython.readthedocs.io/en/latest/shared-bindings/digitalio/__init__.html>`_, `pulseio <https://circuitpython.readthedocs.io/en/latest/shared-bindings/pulseio/__init__.html>`_, `touchio <https://circuitpython.readthedocs.io/en/latest/shared-bindings/touchio/__init__.html>`_, `microcontroller <https://circuitpython.readthedocs.io/en/latest/shared-bindings/microcontroller/__init__.html>`_, `board <https://circuitpython.readthedocs.io/en/latest/shared-bindings/board/__init__.html>`_, `bitbangio <https://circuitpython.readthedocs.io/en/latest/shared-bindings/bitbangio/__init__.html>`_
|
|
- No ``machine`` API on Atmel SAMD21 port.
|
|
|
|
Modules
|
|
~~~~~~~
|
|
|
|
- No module aliasing. (``uos`` and ``utime`` are not available as
|
|
``os`` and ``time`` respectively.) Instead ``os``, ``time``, and
|
|
``random`` are CPython compatible.
|
|
- New ``storage`` module which manages file system mounts.
|
|
(Functionality from ``uos`` in MicroPython.)
|
|
- Modules with a CPython counterpart, such as ``time``, ``os`` and
|
|
``random``, are strict
|
|
`subsets <https://circuitpython.readthedocs.io/en/latest/shared-bindings/time/__init__.html>`__
|
|
of their `CPython
|
|
version <https://docs.python.org/3.4/library/time.html?highlight=time#module-time>`__.
|
|
Therefore, code from CircuitPython is runnable on CPython but not
|
|
necessarily the reverse.
|
|
- tick count is available as
|
|
`time.monotonic() <https://circuitpython.readthedocs.io/en/latest/shared-bindings/time/__init__.html#time.monotonic>`__
|
|
|
|
atmel-samd21 features
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
- RGB status LED
|
|
- Auto-reload after file write over mass storage. (Disable with
|
|
``samd.disable_autoreload()``)
|
|
- Wait state after boot and main run, before REPL.
|
|
- Main is one of these: ``code.txt``, ``code.py``, ``main.py``,
|
|
``main.txt``
|
|
- Boot is one of these: ``settings.txt``, ``settings.py``, ``boot.py``,
|
|
``boot.txt``
|
|
|
|
--------------
|
|
|
|
Project Structure
|
|
-----------------
|
|
|
|
Here is an overview of the top-level source code directories.
|
|
|
|
Core
|
|
~~~~
|
|
|
|
The core code of
|
|
`MicroPython <https://github.com/micropython/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 CircuitPython 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 pyboard.py 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 <https://www.arduino.cc/en/Main/ArduinoBoardZero>`__, `Adafruit
|
|
Feather M0 Basic <https://www.adafruit.com/products/2772>`__, and
|
|
`Adafruit Feather M0 Bluefruit
|
|
LE <https://www.adafruit.com/products/2995>`__.
|
|
- ``bare-arm`` A bare minimum version of MicroPython for ARM MCUs.
|
|
- ``cc3200`` Support for boards based
|
|
`CC3200 <http://www.ti.com/product/CC3200>`__ from TI such as the
|
|
`WiPy 1.0 <https://www.pycom.io/solutions/py-boards/wipy1/>`__.
|
|
- ``esp8266`` Support for boards based on ESP8266 WiFi modules such as
|
|
the `Adafruit Feather
|
|
HUZZAH <https://www.adafruit.com/products/2821>`__.
|
|
- ``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 <https://qemu.org>`__.
|
|
- ``stmhal`` Support for boards based on STM32 microcontrollers
|
|
including the MicroPython flagship
|
|
`PyBoard <https://store.micropython.org/store/#/products/PYBv1_1>`__.
|
|
- ``teensy`` Support for the Teensy line of boards such as the `Teensy
|
|
3.1 <https://www.pjrc.com/teensy/teensy31.html>`__.
|
|
- ``unix`` Support for UNIX.
|
|
- ``windows`` Support for
|
|
`Windows <https://www.microsoft.com/en-us/windows/>`__.
|
|
- ``zephyr`` Support for `Zephyr <https://www.zephyrproject.org/>`__, 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 <https://github.com/micropython/micropython>`__ parent
|
|
project.
|
|
|
|
`⬆ back to top <#adafruit-circuitpython>`__
|
|
|
|
.. |Build Status| image:: https://travis-ci.com/adafruit/circuitpython.svg?branch=master
|
|
:target: https://travis-ci.org/adafruit/circuitpython
|
|
.. |Doc Status| image:: https://readthedocs.org/projects/circuitpython/badge/?version=latest
|
|
:target: http://circuitpython.readthedocs.io/
|
|
.. |Discord| image:: https://img.shields.io/discord/327254708534116352.svg
|
|
:target: https://adafru.it/discord
|
|
.. |License| image:: https://github.com/adafruit/circuitpython/blob/master/logo/license-MIT-brightgreen.svg
|
|
:target: https://opensource.org/licenses/MIT
|