Awesome MicroPython
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
- Raspberry Pi A/B/Zero bare-metal
- Based on @naums's fork
- RISC-V LoFive
- MediaTek MT6260
- Infeneon XMC
- NXP i.MX RT/LPC546
- many more to be listed
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:
- Telnet - available for some ports (e.g. CC3200), 3rd-party libraries for other ports.
- WebREPL - REPL in your browser using Websockets! Official client: http://micropython.org/webrepl/ . Can be deployed locally.
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
- Thonny has MicroPython suport
- PyCharm/IntelliJ IDEA has MicroPython support
- Mu Editor
- many more
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)
- micropython-nano-gui -
lightweight MicroPython GUI library for display drivers based on
framebuf
class - LittlevGL bindings - Bindings for LittlevGL GUI library (C).
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
-
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
- Templating
- utemplate - Micro template engine with low memory usage, based on generators.
Sciences
- uMath - Symbolic computer algebra system (CAS)
Learning MicroPython
Sites
Books
- Programming with MicroPython: Embedded Programming with Microcontrollers and Python, Nicholas H. Tollervey, 2017
- MicroPython for the Internet of Things: A Beginnerβs Guide to Programming with Python on Microcontrollers, Charles Bell, 2017
Academia
- University of California, Berkeley. EE 49: Electronics for IoT.