MicroPython & CircuitPython
Python on microcontrollers — MicroPython, CircuitPython, Thonny, Mu, ulab, supported chips and ports.
Python on a USB-serial REPL on a $5 chip. The shortest path from "I have a sensor" to "I have data on screen." Less efficient than embedded Rust or ESP-IDF, but iteration speed wins a lot of projects. For boards see MCU Dev Kits.
MicroPython (upstream)
- ★ MicroPython — open source (MIT); a lean Python 3.4-ish implementation by Damien George. Runs on ESP32 / ESP8266 / RP2040 / RP2350 / STM32 / nRF / SAMD / Renesas / Unix / WASM. The original, still the broadest-supported. 1.23+ in 2026 with regularly tighter Python 3.12 compatibility.
- MicroPython on the Pi Pico / Pico W / Pico 2 / Pico 2 W — Pi Foundation's primary supported language; first-class Wi-Fi, BLE, and PIO support.
- MicroPython on ESP32 / ESP32-S3 / ESP32-C3 / ESP32-C6 — full Wi-Fi / BLE / sockets /
urequests;mippackage manager; recent C6 / H2 ports include 802.15.4 work. - MicroPython on STM32 (
pyboard) — the reference port; PYBv1.1 / PYBD-SF2/SF6 are the official boards.
CircuitPython (Adafruit's friendly fork)
- ★ CircuitPython — Adafruit's MicroPython fork (MIT) tuned for "plug in a USB cable, edit
code.py, save, it runs."CIRCUITPYUSB drive auto-mount, automatic restart on save,BOOT_OUT.TXTID file, and a much friendlier sensor library set than upstream. The default for hobby / education on supported chips. - CircuitPython 9 / 10 — current branches; ESP32-S3 / -C3 / -C6 / RP2040 / RP2350 / nRF52840 / SAMD51 are the well-supported chips.
- Adafruit Bundle / Community Bundle — pre-built libraries (drivers for hundreds of sensors / displays); drop into
/lib. circup—pip-like CLI for managing libraries on a CircuitPython device.
MicroPython vs. CircuitPython — the short version
- MicroPython — broader chip coverage; ships radios sooner; more "Python" feel; smaller standard library; better for performance-tight or industrial.
- CircuitPython — friendlier; auto-mounts as a USB drive; richer sensor library; preinstalled bundle; better classroom UX. Pays a small RAM/perf tax.
If your chip is supported by both, pick CircuitPython for hobby/education projects, MicroPython for things that need the chip's full features (BLE on ESP32-C6, Wi-Fi reconnection edge cases, etc.).
IDEs / editors
- ★ Thonny — open source (MIT); the friendly Python IDE. Built-in MicroPython / CircuitPython support: device picker, REPL, file browser, package installer (
mip), variables view. The default for first-time users on Pi Pico. - ★ Mu Editor — open source (GPLv3); minimalist editor aimed at kids / beginners; CircuitPython, MicroPython, BBC micro:bit, and Adafruit-board "modes." Pair with classroom contexts.
- VS Code + MicroPico / RT-Thread / Pymakr — VS Code extensions for MicroPython workflows. Pymakr (Pycom origins) is the most mature; MicroPico is Pi-Pico-specific.
- uPyCraft — Chinese MicroPython IDE; popular in some regions; simpler than Thonny.
File-transfer / device tools
- ★
mpremote— official MicroPython CLI tool for connecting, copying files, running scripts, executing one-shot snippets. Replaces olderampy/rshell. Standard. ampy— Adafruit's older file copy tool; works, butmpremoteis preferred.rshell— older "shell to MicroPython" tool; legacy.circup— CircuitPython library manager (mentioned above).mip— MicroPython's built-in package manager (on-device or via mpremote).
Numerics / DSP / ML
- ★
ulab— NumPy / SciPy subset for MicroPython. FFT, linear algebra, filtering, vector ops. Compiled in to firmware (custom build often needed). micropython-math/umath— small math libs.- TensorFlow Lite for MicroPython — community ports of TFLM into MP firmware; works on ESP32 / RP2040 with sensible-sized models.
- OpenMV (separate firmware, MicroPython-based) — vision-focused MP firmware; runs on STM32H7-based OpenMV cams and on RT1062 / RP2350 cams. Ships TFLM and image processing kernels.
Storage / filesystems
- VFS /
littlefs2— default flash filesystem on most ports. - FATFS — for SD cards.
- Internal
/flash— appears as a USB mass-storage device on CircuitPython (CIRCUITPY drive); on MicroPython, accessible viampremote fs cp.
Networking convenience libs
urequests—requests-shaped HTTP client; included on Wi-Fi-enabled ports.umqtt.simple/umqtt.robust— MQTT clients.microdot— Flask-shaped web framework for MicroPython.- Adafruit MiniMQTT / Adafruit Requests — CircuitPython equivalents.
Specialty firmwares built on MP / CP
- OpenMV IDE + MicroPython firmware — vision platform; tightly integrated MP + camera + IDE.
- BBC micro:bit MicroPython — runs on the micro:bit V1/V2; classroom platform.
- Pycom (legacy) — sigfox / LoRa / cellular MP boards; company is gone, firmware lives on as community forks.
- LEGO SPIKE Prime / MINDSTORMS — runs MicroPython under the hood; replaceable with Pybricks (community open MP firmware for LEGO hubs).
Performance reality
- GC pauses are real. Not for hard real-time. Use static allocation patterns,
bytearraybuffers,@micropython.native/@micropython.viperdecorators when needed. - Frozen modules — bake
.pyfiles into the firmware to skip parsing on boot; needed once you have many libs. - Custom builds — both MP and CP support custom firmware builds with extra C modules baked in (ulab, your sensor driver, frozen libs).
Pick this if…
- First Python-on-MCU project, friendly experience: CircuitPython on a Pi Pico, Adafruit Feather, or Seeed XIAO.
- MicroPython, broad chip support: MicroPython on Pi Pico (W) or ESP32-S3.
- Default Python-on-Pi-Pico IDE: Thonny.
- Default classroom editor: Mu.
- Default device CLI:
mpremote. - Need NumPy on a chip: ulab (custom build of MicroPython).
- You want max perf or minimum binary size: drop to C (ESP-IDF / Arduino) or Rust (Embassy / esp-rs).