/awesome-micropython

Curated list of awesome MicroPython resources

Creative Commons Attribution Share Alike 4.0 InternationalCC-BY-SA-4.0

Awesome MicroPython

MicroPython Powered

MicroPython came known as a "Python for microcontrollers". It's far more than that.

MicroPython is a full-stack language, which, unlike many other languages, is concerned not only with scaling up, but also with scaling down. This means it can run on your laptop, desktop, on a supercomputer (sure, why not), but also inside your Internet router, fridge, clock, smartwatch, temperature sensor, microcontroller development board, inside your new game or productivity app, and in gazillion of other applications and devices. Familiar, easy to use, expressive language everywhere, with the ability to optimize your software based on the hardware needs.

Summing this all up with the (unoffical) motto: MicroPython runs everywhere!

MicroPython is created and maintained by Damien George, @dpgeorge.

This list is not directly affiliated with, or endorsed by, the "official" MicroPython and/or forks owned by other parties. Opinions here are solely those of the list author and agreeing contributors. The list is intended to capture breadth and pluralism of the MicroPython community, but may be subjective nonetheless.

This list is compiled and maintained by Paul Sokolovsky, @pfalcon. This list is licensed under Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA 4.0): you are free to share and reuse contents of this list, as long as you give credit to the original author and allow other people to share/reuse it under the same terms.

Forks and Variants

Notable Forks

There are more than 2000 forks of MicroPython on Github, and here are a few notable ones:

  • Pycopy - by @pfalcon, 2nd largest (~35%) contributor to MicroPython. Dedicated to further developing all the great features which were initially contributed to the mainline - stream I/O interface, async support, memory-saving APIs, etc. Also to optimizations, bugfixes and improved documentation. Synced with the mainline.
  • Pycom MicroPython - by @pycom. Support for modern communication standards like LoRa, Sigfox, etc.
  • CircuitPython - by @adafruit. Education friendly MicroPython fork, concentrating on microcontroller boards of a particular vendor. Wealth of online tutorials and educational resources.
  • OpenMV - by @openmv. MicroPython fork for machine vision boards.
  • Loboris ESP32 fork - by @loboris. Concentrates on ESP32. A number of C libraries are wrapped.

OS/RTOS Ports/Forks

  • POSIX/Unix - part of the mainline. The POSIX port is the biggest and most important MicroPython target, alone supporting thousands of diverse computer and device types, ranging from supercomputers to a few-dollar appliances.
  • Windows - part of the mainline. Runs on different Windows variants, from Server down to Windows IoT.
  • DOS/DJGPP - part of the mainline. Runs on DOS versions with support of x86 extended mode.
  • Zephyr port - Modern advanced RTOS, more than 100 boards supported.
  • FreeRTOS port - part of the mainline (as CC3200 port).
  • mbedOS port - RTOS for ARM microcontrollers, dozens of boards supported.
  • FrostedOS port - POSIX-compatible RTOS.
  • UEFI port - port to UEFI (BIOS replacement framework) by Intel (ANN).

Hardware-specific Forks

Documentation

  • README - Never to miss the project README, it's an entry to the MicroPython universe.
  • Pycopy docs are more complete - Online searchable documentation for language aspects and builtin modules.
  • Mainline docs lag in updates.
  • CPython 3.5 docs - MicroPython is an implementation of the Python language, so main Python docs provide the relevant background information (MicroPython's own docs concentrate on differences with CPython and new features added.)

Tools

Accessing MicroPython Prompt (REPL)

  • Local access: MicroPython comes with REPL (read-evaluate print loop, interactive prompt), which you can access right in your terminal, or by connecting over UART (serial) or USB to another device.
  • Remote access:

Shells

There're shells which run directly on a MicroPython device (or in a MicroPython process), and ones whict run on a host and connect to a device:

On device:

  • upysh - very minimal file shell using Python syntax, suitable for devices even with little memory. Part of pycopy-lib.
  • upy-shell - simple command line based shell.

On host:

  • rshell - remote shell for MicroPython.
  • mpfshell - simple shell based file explorer for Micropython based devices.
  • ampy - utility to interact with a MicroPython board over a serial connection.

Package Management

  • Packages are distributed via Python Package Index (PyPI), like packages for any other Python implementation.
  • Installable using upip package manager (built into Unix port and some other ports with networking capabilities, part of pycopy-lib otherwise).
  • Documentation of MicroPython package usage
    • For non-networked ports, packages can be "cross-installed" on a host, and copied to device (manually or using host-side shells above).
    • For ultimate RAM efficiency, packages can be "frozen" into MicroPython binary.

IDEs

Libraries

Standard Libraries

  • pycopy-lib - Standard library of the Pycopy project. Dozens of modules ported from CPython, dozens developed specifically for Pycopy.
  • Backports of Pycopy API modules to CPython - Allows to run software written for MicroPython using CPython (WIP). Part of pycopy-lib.

Asynchronous Scheduling and I/O

  • uasyncio (micro-asyncio) - Pycopy’s asynchronous scheduling library, roughly modeled after CPython’s asyncio. Part of pycopy-lib.

Graphics

  • framebuf - builtin module for simple device-independent graphics.

Graphical User Interfaces (GUI)

Text User Interfaces (TUI)

  • picotui - Lightweight TUI widget toolkit with minimal dependencies. Works both in MicroPython and CPython.
  • FBConsole - MicroPython terminal (dupterm) over framebuffer.

Databases

  • btree - builtin module, simple "NoSQL" database with dictionary-like interface, based on well-known BerkeleyDB 1.xx library. Available in both bare-metal and OS ports.
  • sqlite3 - Reimplementation of CPython's sqlite3 module for Pycopy (Unix port). Part of pycopy-lib.
  • micropython-redis - Redis client.
  • picoredis - Another Redis client.
  • uPyMySQL - MySQL client.

Protocols

  • HTTP

    • urequests (micro-requests) - implements a subset of API of well-known "requests" module. Part of pycopy-lib.
  • DNS

  • Websocket

    • websocket - builtin provisional module (i.e. details of API is subject to change).

Web Frameworks

  • picoweb - Really minimal web application framework based on "uasyncio" module.

Interfacing with Other Languages

  • ffi - Foreign Function Interface module for MicroPython. Call C, etc. functions from dynamic libraries or just in memory.
  • uctypes - "Foreign Data" interface for MicroPython. Access binary data structures with the expressiveness of C language. "ffi" and "uctypes" modules commonly used together.
  • jni - Module for JavaVM integration (using JNI).
  • pycopy-ffigen - Automatically generate bindings for ffi/uctypes modules from C header files.
  • micropython-wrap - C++ wrapper to interface C++ code with MicroPython easily.
  • ullvm - Bindings for LLVM C API.

Textual Data Processing

  • Regular expressions
    • ure (micro-re) - builtin module which implements subset of regular expression syntax.
    • re-pcre - more complete regular expression implementation, based on PCRE library, largely compatible with full CPython re syntax.
  • Templating
    • utemplate - Micro template engine with low memory usage, based on generators.

Sciences

  • uMath - Symbolic computer algebra system (CAS)

Learning MicroPython

Sites

Books

Academia