这是 MicroPython 项目,旨在在微控制器和小型嵌入式系统上实现 Python 3.x。您可以在 micropython.org 上找到官方网站。
警告:该项目处于测试阶段,可能会发生代码库更改,包括项目范围的名称更改和 API 更改。
MicroPython 实现了整个 Python 3.4 语法(包括异常、 with
、 yield from
等,另外还有 Python 3.5 中的async
/ await
关键字以及更高版本中的一些精选功能)。提供了以下核心数据类型: str
(包括基本的Unicode支持)、 bytes
、 bytearray
、 tuple
、 list
、 dict
、 set
、 frozenset
、 array.array
、 collections.namedtuple
、类和实例。内置模块包括os
、 sys
、 time
、 re
和struct
等。一些端口支持_thread
模块(多线程)、用于网络的socket
和ssl
以及asyncio
。请注意,仅针对数据类型和模块实现了 Python 3 功能的子集。
MicroPython 可以以文本源形式(.py 文件)或预编译字节码(.mpy 文件)执行脚本,在这两种情况下都可以从设备上的文件系统或“冻结”到 MicroPython 可执行文件中。
MicroPython 还提供了一组 MicroPython 特定模块来访问特定于硬件的功能和外设,例如 GPIO、定时器、ADC、DAC、PWM、SPI、I2C、CAN、蓝牙和 USB。
请参阅在线文档以获取 API 参考、有关使用 MicroPython 的信息以及有关如何实现它的信息。
我们使用 GitHub Discussions 作为论坛,使用 Discord 进行聊天。这些是向社区提出问题和建议或讨论基于 MicroPython 的项目的好地方。
对于错误和功能请求,请提出问题并遵循那里的模板。
有关 MicroPython pyboard(原始 Kickstarter 活动中官方支持的开发板)的信息,请参阅原理图、引脚排列和文档。
MicroPython 是一个开源项目,欢迎贡献。为了提高工作效率,请务必遵循贡献者指南和代码约定。请注意,MicroPython 是根据 MIT 许可证获得许可的,所有贡献都应遵循此许可证。
该存储库包含以下组件:
py/——核心Python实现,包括编译器、运行时和核心库。
mpy-cross/ —— MicroPython 交叉编译器,用于将脚本转换为预编译的字节码。
ports/——MicroPython 运行的各种端口和架构的特定于平台的代码。
lib/ -- 外部依赖项的子模块。
测试/——测试框架和测试脚本。
docs/——Sphinx reStructuredText 格式的用户文档。这用于生成在线文档。
extmod/——用 C 实现的附加(非核心)模块。
tools/——各种工具,包括 pyboard.py 模块。
example/ -- 一些示例 Python 脚本。
“make”用于构建组件,或者在基于 BSD 的系统上使用“gmake”。您还需要 bash、gcc 和 Python 3.3+ 可用作命令python3
(如果您的系统只有 Python 2.7,则使用附加选项PYTHON=python2
调用 make)。某些端口(rp2 和 esp32)还使用 CMake。
MicroPython 可在各种微控制器以及类 Unix(包括 Linux、BSD、macOS、WSL)和 Windows 系统上运行。
微控制器目标可以小至 256kiB 闪存 + 16kiB RAM,但至少具有 512kiB 闪存 + 128kiB RAM 的设备可以提供更全面的功能体验。
Unix 和 Windows 端口允许开发和测试 MicroPython 本身,并在这些平台上(特别是在嵌入式 Linux 系统上)提供 CPython 的轻量级替代方案。
“最小”端口提供了一个非常基本的 MicroPython 端口的示例,可以编译为独立的 Linux 二进制文件,也可以编译为 ARM Cortex M4。如果您想将 MicroPython 移植到另一个微控制器,请从这里开始。此外,“裸臂”端口是绝对最小配置的示例,用于跟踪核心运行时和虚拟机的代码大小。
此外,该存储库中还提供了以下端口:
cc3200——德州仪器 CC3200(包括 PyCom WiPy)。
esp32——乐鑫 ESP32 SoC(包括 ESP32S2、ESP32S3、ESP32C3、ESP32C6)。
esp8266——乐鑫 ESP8266 SoC。
mimxrt——NXP m.iMX RT(包括 Teensy 4.x)。
nrf——Nordic Semiconductor nRF51 和 nRF52。
pic16bit——Microchip PIC 16 位。
powerpc——IBM PowerPC(包括 Microwatt)
qemu -- 基于 QEMU 的模拟目标(用于测试)
Renesas-ra——瑞萨 RA 系列。
rp2——Raspberry Pi RP2040(包括 Pico 和 Pico W)。
samd——Microchip(以前称为 Atmel)SAMD21 和 SAMD51。
stm32——意法半导体STM32系列(包括F0、F4、F7、G0、G4、H7、L0、L4、WB)
webassemble——Emscripten 端口针对浏览器和 NodeJS。
zephyr——Zephyr RTOS。
大多数移植需要首先构建 MicroPython 交叉编译器。 该程序称为 mpy-cross,用于将 Python 脚本预编译为 .mpy 文件,然后将其包含(冻结)到端口的固件/可执行文件中。 要构建 mpy-cross 使用:
$ cd mpy-cross $ make
核心 MicroPython VM 和运行时没有外部依赖项,但给定端口可能依赖于第三方驱动程序或供应商 HAL。该存储库包括链接到这些外部依赖项的多个子模块。在编译给定端口之前,使用
$ cd ports/name $ make submodules
以确保所有必需的子模块都已初始化。