Micropython-一种用于微控制器和受限系统的精简而高效的Python实现

MicroPython项目

这是MicroPython项目,旨在将Python3.x的实现放在微控制器和小型嵌入式系统上。您可以在以下位置找到官方网站micropython.org

警告:此项目处于测试阶段,可能会更改代码库,包括项目范围的名称更改和API更改

MicroPython实现整个Python3.4语法(包括异常,withyield from等,并且另外async/await来自Python3.5的关键字)。提供以下核心数据类型:str(包括基本Unicode支持)、bytesbytearraytuplelistdictsetfrozensetarray.arraycollections.namedtuple、类和实例。内置模块包括systime,以及struct等。部分端口支持_thread模块(多线程)。请注意,仅为数据类型和模块实现了Python 3功能的子集

MicroPython可以执行文本源代码形式的脚本或从预编译字节码执行脚本,在这两种情况下,都可以从设备上的文件系统执行脚本,也可以将脚本“冻结”到MicroPython可执行文件中

查看存储库http://github.com/micropython/pyboard对于MicroPython电路板(PyBoard),官方支持的参考电子电路板

此存储库中的主要组件:

  • py/–核心Python实现,包括编译器、运行时和核心库
  • mpy-cross/–用于将脚本转换为预编译字节码的MicroPython交叉编译器
  • ports/unix/–在Unix上运行的MicroPython版本
  • ports/STM32/-在PyBoard和类似的STM32板上运行的MicroPython版本(使用ST‘s Cube HAL驱动程序)
  • ports/Minimal/–最小的MicroPython端口。如果您想要将MicroPython移植到另一个微控制器,请从这个开始
  • 测试/–测试框架和测试脚本
  • docs/–Sphinx reStrucureText格式的用户文档。呈现的HTML文档位于http://docs.micropython.org

其他组件:

  • ports/Bare-ARM/–用于ARM MCU的MicroPython的最低版本。主要用于控制代码大小
  • ports/teensy/–运行在teensy3.1上的MicroPython版本(初步版本,但功能正常)
  • ports/pic16bit/-用于16位PIC微控制器的MicroPython版本
  • ports/cc3200/-TI在CC3200上运行的MicroPython版本
  • ports/ESP8266/-在Espressif的ESP8266 SoC上运行的MicroPython版本
  • ports/esp32/-在Espressif的ESP32 SoC上运行的MicroPython版本
  • ports/nrf/-在北欧的nRF51和nRF52 MCU上运行的MicroPython版本
  • extmod/–用C++实现的附加(非核心)模块
  • tools/–各种工具,包括pyboard.py模块
  • Examples/–几个Python脚本示例

上列子目录可能包括带有附加信息的自述文件

“make”用于构建组件,或者在基于BSD的系统上使用“gmake”。您还需要bash、GCC和Python3.3+作为命令python3(如果您的系统只有Python 2.7,则使用附加选项调用makePYTHON=python2)

MicroPython交叉编译器mpy-Cross

大多数端口都需要首先构建MicroPython交叉编译器。该程序称为mpy-Cross,用于将Python脚本预编译为.mpy文件,然后可以将这些文件包含(冻结)到端口的固件/可执行文件中。要构建mpy交叉,请使用以下命令:

$ cd mpy-cross
$ make

Unix版本

“unix”端口需要一个带有GCC和GNU make的标准unix环境。支持x86和x64架构(即x86 32位和64位),以及ARM和MIPS。要将功能齐全的端口移植到另一种架构,需要编写一些用于异常处理和垃圾回收的汇编代码。或者,也可以使用基于setjmp/long jmp的后备实现

要构建(有关所需依赖项,请参阅下一节):

$ cd ports/unix
$ make submodules
$ make

那就试一试吧:

$ ./micropython -h

运行完整的测试套件:

$ make test

UNIX版本附带一个名为upip的内置包管理器,例如:

$ ./micropython -m upip install micropython-pystone
$ ./micropython -m pystone

浏览上的可用模块PyPI标准库模块来自micropython-lib项目

外部依赖项

构建MicroPython端口可能需要安装一些依赖项

对于Unix端口,libffi库和pkg-config工具是必需的。在Debian/Ubuntu/Mint派生Linux发行版上,安装build-essential(包括工具链和品牌),libffi-dev,以及pkg-config包裹

其他依赖项可以与MicroPython一起构建。这可能是启用额外特性或功能所必需的,在最新版本的MicroPython中,默认情况下可能会启用这些特性或功能。要构建这些附加依赖项,请在您感兴趣的端口目录中(例如ports/unix/)首先执行:

$ make submodules

这将获取端口需要的所有相关的git子模块(子存储库)。使用相同的命令获得子模块的最新版本,因为它们会不断更新。在执行之后:

$ make deplibs

这将构建所有可用的依赖项(无论是否使用它们)。如果您打算使用其他选项(如交叉编译)构建MicroPython,则应该将相同的选项集传递给make deplibs要实际启用/禁用依赖项的使用,请编辑ports/unix/mpconfigport.mk文件,其中包含选项的内联描述。例如,要构建SSL模块(需要upip如上所述的工具,因此在默认情况下启用),MICROPY_PY_USSL应设置为1

对于某些端口,构建所需的依赖项是透明的,并且是自动进行的。但是它们仍然需要用make submodules命令

STM32版本

“stm32”端口需要ARM编译器、arm-one-eabi-GCC和相关的bin-utils。对于那些使用Arch Linux的用户,您需要arm-one-eabi-binutils、arm-one-eabi-GCC和arm-one-eabi-newlib软件包。否则,请尝试此处:https://launchpad.net/gcc-arm-embedded

要构建,请执行以下操作:

$ cd ports/stm32
$ make submodules
$ make

然后,您需要将您的电路板设置为DFU模式。在写字板上,用导线将3v3引脚连接到P1/DFU引脚(在PYBv1.0上,它们相邻在电路板的左下角,倒数第二行)

然后通过USB DFU将代码刷新到您的设备:

$ make deploy

这将使用包含的tools/pydfu.py剧本。如果刷新固件不起作用,可能是因为您没有正确的权限,需要使用sudo make deploy有关详细信息,请参阅ports/stm32/目录中的readme.md文件

贡献

MicroPython是一个开放源码项目,欢迎贡献。为了提高工作效率,请务必遵循Contributors’ Guidelines以及Code Conventions请注意,MicroPython是在麻省理工学院许可下获得许可的,所有贡献内容都应遵循此许可