ScriptsMay 6, 2026·3 min read

MicroPython — Python for Microcontrollers

Run Python directly on ESP32, RP2040, STM32, and other microcontrollers with an interactive REPL, hardware APIs, and a minimal footprint.

Introduction

MicroPython is a lean implementation of Python 3 designed to run on microcontrollers with as little as 256 KB of flash and 16 KB of RAM. It provides an interactive REPL, standard Python syntax, and hardware-specific modules for GPIO, I2C, SPI, and networking — bringing rapid prototyping to embedded systems.

What MicroPython Does

  • Runs Python 3 on resource-constrained microcontrollers (ESP32, RP2040, STM32, nRF)
  • Provides an interactive REPL over serial or WebREPL for live coding on the device
  • Includes hardware abstraction modules for GPIO, ADC, PWM, I2C, SPI, and UART
  • Supports networking (Wi-Fi, Bluetooth) and filesystem access on flash storage
  • Enables rapid prototyping without a compile-flash-debug cycle

Architecture Overview

MicroPython compiles Python source to bytecode and executes it on a custom virtual machine written in C. The VM runs on bare metal or atop a minimal RTOS. A port layer adapts the VM to each microcontroller family. The frozen module mechanism pre-compiles Python files into the firmware image to save RAM. An internal filesystem (LittleFS or FAT) allows storing scripts on the device flash.

Self-Hosting & Configuration

  • Download the pre-built firmware for your board from micropython.org/download
  • Flash using esptool (ESP32), picotool (RP2040), or DFU (STM32)
  • Access the REPL over USB-serial with any terminal emulator
  • Upload scripts via mpremote, ampy, or WebREPL
  • Configure boot behavior via boot.py and main.py on the device filesystem

Key Features

  • Interactive REPL for live hardware debugging and experimentation
  • asyncio support for concurrent tasks on single-threaded MCUs
  • Native code emitter for performance-critical sections
  • WebREPL for wireless script upload and debugging
  • Frozen modules to reduce RAM usage by embedding bytecode in firmware

Comparison with Similar Tools

  • CircuitPython — Adafruit fork focused on beginner friendliness and USB mass storage workflow; MicroPython supports more boards and lower-level control
  • Arduino (C/C++) — Compiled to native code for maximum performance; MicroPython trades speed for development velocity and interactive debugging
  • Lua (NodeMCU) — Lightweight scripting alternative; MicroPython offers richer standard library and broader community
  • Rust (embedded) — Memory-safe compiled language; MicroPython prioritizes rapid iteration over runtime efficiency

FAQ

Q: Is MicroPython fast enough for real-time applications? A: For most sensor reading, display driving, and networking tasks it is sufficient. For tight timing loops, use the native code emitter or write critical sections as C modules.

Q: How much RAM does MicroPython need? A: The VM runs in as little as 16 KB of RAM, though 64-256 KB is recommended for practical applications with networking.

Q: Can I use pip packages with MicroPython? A: Not directly. MicroPython has its own package index (mip) with compatible libraries. Many popular Python libraries have MicroPython ports.

Q: Which board should I start with? A: The Raspberry Pi Pico (RP2040) or an ESP32-based board are the most popular starting points due to extensive documentation and community support.

Sources

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets