MicroPython:让 Python 跑在单片机上
不需要操作系统,Python 直接跑在芯片上
写在前面
嵌入式开发一直有个矛盾:C 语言执行效率高,但调试一次要编译烧录重启,改一行代码等一分钟是常态;Python 写起来爽,但桌面版 CPython 装完就几百 MB,根本塞不进单片机。
MicroPython 的存在,就是来解决这个矛盾的。
它把整个 Python 3 解释器压缩到 256KB Flash + 16KB RAM(官方最低要求,能运行基础功能),直接跑在裸机上。不需要操作系统,不需要交叉编译工具链,串口插上去就能交互调试。
注意:256KB + 16KB 是官方公布的最低运行门槛,实际可用空间会因固件版本和平台差异而浮动。若要获得完整体验(如网络协议栈、蓝牙等),建议至少 512KB Flash + 128KB RAM。
01 一句话定义
MicroPython 是 Python 3 的精简实现,专门为微控制器(MCU)和受限环境设计。
它让你能用 Python 代码直接控制硬件——点亮 LED、读取传感器、驱动电机、连接 Wi-Fi——而不必编写 C 语言或处理复杂的编译工具链。
官网:micropython.org[1]
02 为什么需要它
传统嵌入式开发的主流语言是 C/C++,性能强但门槛高:
- 改一行代码 → 编译 → 烧录 → 重启,调试周期长
MicroPython 的核心价值在于:用高级语言的开发效率,做底层硬件的控制。
03 它能做什么
硬件控制
通过内置的 machine 模块,直接操作 MCU 外设:
from machine import Pin, ADC, PWM, UART, SPI, I2C
# GPIO 控制
led = Pin(2, Pin.OUT)
led.value(1)
# 读取模拟量
adc = ADC(Pin(34))
voltage = adc.read()
# PWM 调光
pwm = PWM(Pin(5))
pwm.duty(512)
# 串口通信
uart = UART(1, baudrate=9600)
uart.write("Hello")
物联网节点
支持网络协议栈,可直接开发联网设备:
import network
import socket
# 连接 Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.connect("SSID", "password")
# 创建 TCP 服务端
s = socket.socket()
s.bind(("0.0.0.0", 8080))
s.listen(5)
传感器与执行器驱动
借助社区库,可驱动绝大多数常见模块:DHT 温湿度、BMP 气压、MPU6050 六轴、OLED 显示屏、WS2812B 灯带等。
04 核心优势
1. 开发效率极高
- 无需编译:Python 代码直接上传运行,改完即生效
- 交互式调试:REPL(Read-Eval-Print Loop)环境下逐行执行、实时查看硬件状态
- 代码量显著减少:同样的功能,Python 代码通常比 C 少 50%~80%
2. 资源占用极低
- 最低要求:256KB Flash + 16KB RAM(官方文档,可运行基础 REPL 和简单脚本)
- 建议配置:512KB Flash + 128KB RAM(支持完整网络协议、文件系统等)
- 作为对比:CPython(桌面版 Python)安装包超过 100MB
这意味着一块售价 15 元左右的 ESP32,或一块 20 元的树莓派 Pico,都能完整运行 MicroPython。
3. 与标准 Python 高度兼容
MicroPython 实现了 Python 3.4 语法,并部分支持 Python 3.5+ 特性(如 async/await)。代码在桌面 CPython 环境验证后,可平滑迁移到嵌入式设备。
支持的核心特性包括:
| 特性 |
说明 |
| 数据类型 |
str、bytes、list、dict、set、tuple |
| 语法结构 |
列表推导式、生成器、闭包、异常处理、类与继承 |
| 协程 |
async / await(异步编程) |
| 标准库 |
sys、time、math、json、re、socket、struct |
| 多线程 |
_thread 模块(部分平台支持) |
4. 跨平台移植能力强
MicroPython 官方将支持平台分为三个层级:
Tier 1(核心支持):
| 平台 |
目标芯片 |
特点 |
| esp32 |
ESP32/ESP32-S2/S3/C3/C6 |
双核 + Wi-Fi + 蓝牙,物联网首选 |
| rp2 |
RP2040 / RP2350 |
树莓派 Pico 系列,性价比极高 |
| stm32 |
STM32 F0/F4/F7/G0/G4/H5/H7 等 |
工业级 MCU |
| samd |
SAMD21 / SAMD51 |
Adafruit 等教育板卡 |
| mimxrt |
NXP i.MX RT |
高性能实时控制 |
| unix |
Linux / macOS / WSL |
桌面端测试与开发 |
Tier 2(完全支持):nRF52/53、Renesas RA、Zephyr RTOS、WebAssembly 等
Tier 3(社区维护):ESP8266、CC3200、PIC16 等
5. 开源可商用
05 技术实现原理
MicroPython 不是 CPython 的裁剪版,而是一个完全重写的 Python 解释器,用 C99 编写。
执行流程:
- 编译:AST → MicroPython 字节码(自定义指令集,非 CPython 字节码)
- 执行:字节码在 MicroPython VM 中逐条解释,调用底层 C 函数完成硬件操作
整个 VM 运行在裸机上,不依赖操作系统。这种"编译 + 解释"的混合机制,兼顾了代码紧凑性与执行灵活性。
预编译优化(mpy-cross)
MicroPython 提供 mpy-cross 交叉编译器,可将 .py 文件预编译为 .mpy 字节码文件:
# 在 PC 端预编译
mpy-cross -march=armv6m myscript.py # 生成 myscript.mpy
# 将 .mpy 上传到开发板直接运行
06 与 C 开发的对比
| 维度 |
C/C++ |
MicroPython |
| 开发周期 |
长(编译、烧录、重启) |
短(解释执行,即时生效) |
| 运行性能 |
高(原生机器码) |
低(字节码解释,约慢 10~100 倍) |
| 内存管理 |
手动/静态分配 |
自动垃圾回收 |
| 学习门槛 |
高(需掌握指针、内存模型) |
低(Python 语法) |
| 实时性 |
强(确定性延迟) |
弱(GC 可能导致抖动) |
| 适用场景 |
电机控制、实时系统、高性能信号处理 |
原型验证、IoT 节点、教育、快速迭代 |
选择原则:需要硬实时或高频采样的场景用 C;需要快速验证、联网交互、逻辑控制为主的场景用 MicroPython。
07 MicroPython vs CircuitPython
CircuitPython 是 Adafruit 基于 MicroPython 开发的分支,两者核心差异:
| 维度 |
MicroPython |
CircuitPython |
| 开发者 |
Damien George |
Adafruit |
| 设计理念 |
通用、高效、灵活 |
易用、教育优先 |
| 文件上传 |
串口/IDE 传输 |
U 盘模式,拖放即传 |
| 代码执行 |
需手动触发或复位 |
保存即自动运行 |
| 硬件支持 |
广泛,20+ 平台 |
聚焦 Adafruit 生态 |
| 库生态 |
社区驱动,风格多样 |
官方维护,285+ 库 |
| 双核支持 |
支持(ESP32、RP2040) |
不支持 |
| 中断支持 |
完整中断支持 |
仅保留异步,无中断 |
选择建议:
- 教学、快速原型、Adafruit 硬件 → CircuitPython
- 多平台移植、生产部署、底层控制 → MicroPython
08 如何开始
硬件选择(推荐)
| 开发板 |
价格区间 |
适用场景 |
| ESP32-DevKitC |
¥15~25 |
物联网、Wi-Fi/蓝牙项目 |
| 树莓派 Pico / Pico 2 |
¥15~25 |
通用学习、PIO 实验 |
| STM32F4 系列 |
¥30~80 |
工业控制、高性能需求 |
| ESP32-C6 |
¥20~30 |
Wi-Fi 6 + 蓝牙 5.3 |
开发环境
| 工具 |
作用 |
| Thonny |
内置 MicroPython 支持,最适合入门 |
| VS Code + Pymakr |
专业开发,支持文件同步和 REPL |
| mpremote |
官方命令行工具,上传文件、进入 REPL |
典型工作流
- 用
esptool.py(ESP 系列)或 UF2 拖拽(Pico)刷入固件
09 适用场景总结
推荐使用的场景:
- 物联网传感器节点(温湿度、气压、光照采集 + Wi-Fi 上报)
- 快速原型验证(48 小时内需要可运行的 Demo)
不适合的场景:
10 生态新动向
MicroPythonOS
基于 MicroPython 构建的轻量级操作系统,支持:
嵌入式 AI 推理
- uTensor:轻量级神经网络框架,可在 MicroPython 上运行 TensorFlow Lite Micro 模型
- ulab:NumPy 子集,用于数值计算和简单 ML 推理
- OpenMV:基于 MicroPython 的机器视觉平台,支持手势识别、物体检测
Arduino 官方支持
Arduino 已推出官方 MicroPython 安装工具,兼容 Arduino IDE 生态,进一步降低入门门槛。
结语
MicroPython 的定位不是取代 C,而是在资源允许的场景下,用开发效率换取运行时开销。它的价值在于降低嵌入式开发的试错成本——让想法更快落地,让调试更加直观,让 Python 开发者无需切换语言栈就能进入硬件领域。
对于需要快速迭代、频繁交互的项目,它是一个务实的选择。
参考链接
- MicroPython 官网:micropython.org[2]
- 官方文档:docs.micropython.org[3]
- GitHub 仓库:github.com/micropython/micropython[4]
- CircuitPython(教育分支):circuitpython.org[5]
- MicroPythonOS:micropythonos.com[6]
引用链接
[1]micropython.org: https://micropython.org
[2]micropython.org: https://micropython.org
[3]docs.micropython.org: https://docs.micropython.org
[4]github.com/micropython/micropython: https://github.com/micropython/micropython
[5]circuitpython.org: https://circuitpython.org
[6]micropythonos.com: https://micropythonos.com