Tooling

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; mip package 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." CIRCUITPY USB drive auto-mount, automatic restart on save, BOOT_OUT.TXT ID 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.
  • circuppip-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 older ampy / rshell. Standard.
  • ampy — Adafruit's older file copy tool; works, but mpremote is 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 via mpremote fs cp.

Networking convenience libs

  • urequestsrequests-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, bytearray buffers, @micropython.native / @micropython.viper decorators when needed.
  • Frozen modules — bake .py files 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).