当前位置:首页>python>MicroPython:让 Python 跑在单片机上

MicroPython:让 Python 跑在单片机上

  • 2026-09-10 17:23:56
MicroPython:让 Python 跑在单片机上

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. 开源可商用

  • 许可证:MIT
  • 源码托管:GitHub 公开维护
  • 社区活跃:全球开发者贡献超过 5000 个开源库

05 技术实现原理

MicroPython 不是 CPython 的裁剪版,而是一个完全重写的 Python 解释器,用 C99 编写。

执行流程:

  1. 解析:.py 源码 → AST(抽象语法树)
  2. 编译:AST → MicroPython 字节码(自定义指令集,非 CPython 字节码)
  3. 执行:字节码在 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

典型工作流

  1. 下载对应平台的 .bin / .uf2 固件
  2. 用 esptool.py(ESP 系列)或 UF2 拖拽(Pico)刷入固件
  3. 串口连接,打开 REPL 验证环境
  4. 编写 main.py,保存到开发板
  5. 软重启,观察运行结果

09 适用场景总结

推荐使用的场景:

  • 物联网传感器节点(温湿度、气压、光照采集 + Wi-Fi 上报)
  • 智能家居原型(远程控制继电器、读取状态)
  • 教育培训(降低嵌入式入门门槛)
  • 快速原型验证(48 小时内需要可运行的 Demo)
  • 脚本化配置工具(替代复杂的 AT 指令交互)

不适合的场景:

  • 硬实时控制(电机 FOC、高速 PWM 同步)
  • 高频信号处理(音频采样率 > 100kHz)
  • 内存极度受限的系统(< 16KB RAM)
  • 超低功耗长期休眠节点

10 生态新动向

MicroPythonOS

基于 MicroPython 构建的轻量级操作系统,支持:

  • Android 样式触摸屏 UI
  • App Store 应用分发
  • OTA 在线更新
  • 运行 on ESP32-S3 等带屏开发板

嵌入式 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

最新文章

随机文章