MicroPython库

警告

本节的重要概要

  • MicroPython 提供了内置模块,这些模块反映了 Python 标准库 (例如 ostime )的功能,以及 MicroPython 特定模块 (例如 bluetoothmachine )。

  • 大多数 Python 标准库模块实现了相应 Python 模块功能的一个子集,并在少数情况下提供了一些 MicroPython 特定的扩展(例如 arrayos

  • 由于资源限制或其他限制,某些移植版本或固件版本可能不包括此处记录的所有功能。

  • 为了允许扩展性,一些内置模块可以 从Python代码 扩展到设备文件系统。

本章描述了内置于 MicroPython 中的模块(函数和类库)。这份文档通常旨在描述 MicroPython 项目中实现的所有模块和函数/类。然而,MicroPython 是高度可配置的,每个移植到特定板/嵌入式系统的版本可能只包含可用 MicroPython 库的一个子集。

考虑到这一点,请注意,本文档中描述的模块中的一些函数/类(甚至整个模块)在特定系统上的 MicroPython 的特定构建中 可能不可用 。查找特定功能的可用性/不可用性的基本信息的最佳地方是包含特定 MicroPython 移植版本 相关信息的“基本信息”部分。

在一些移植版本上,您可以通过在 REPL 中输入以下内容来发现可以导入的可用内置库:

help('modules')

除了本文档中描述的内置库之外,还可以在 micropython-lib 中找到更多来自 Python 标准库的模块,以及对其的进一步 MicroPython 扩展。

Python标准库和微型库

以下标准 Python 库已被“微型化”,以符合 MicroPython 的理念。它们提供了该模块的核心功能,并旨在成为标准 Python 库的即插即用替代品。

MicroPython-特定库

以下库中的功能是 MicroPython 实现特有的。

特定于OpenMV Cam的库

以下库专门用于OpenMV Cam。

OpenMV Cam上的第三方库

以下第三方库内置到您的OpenMV Cam固件中:

ulab类似于numpy的数组操作库

pid比例/积分/微分控制

bno055IMU驱动

示例脚本位于OpenMV IDE的 IMU Shield 示例文件夹中。

ssd1306OLED驱动

tb6612步进电机驱动

示例脚本位于OpenMV IDE的 Motor Shield 示例文件夹中。

modbusmodbus协议库

示例脚本位于OpenMV IDE的 Modbus 示例文件夹中。

mqttmqtt协议库

示例脚本位于OpenMV IDE的 WiFi Shield 示例文件夹中。

vl53l1xToF距离传感器驱动

示例脚本位于OpenMV IDE的 Distance Shield 示例文件夹中。

从 Python 扩展内置库

Python代码可以通过在文件系统中提供同名模块来扩展内置模块的子集。这种扩展性适用于以下内置到固件中的 Python 标准库模块:arraybinasciicollectionserrnogziphashlibheapqiojsonosplatformrandomreselectsocketsslstructtime zlib,以及 MicroPython 特定的 machine 模块。所有其他内置模块不能从文件系统扩展。

这允许用户提供内置库的扩展实现(也许是为了提供额外的 CPython 兼容性或缺失的功能)。这在 micropython-lib 中被广泛使用,有关更多信息,请参见 包管理。文件系统模块通常会对内置模块进行通配符导入,以继承内置模块的所有全局变量(类、函数和变量)。

在 MicroPython v1.21.0 及更高版本中,为了防止文件系统模块导入自身,它可以通过在导入期间临时清除 sys.path 来强制导入内置模块。例如,要从 Python 扩展 time 模块,文件系统上名为 time.py 的文件将执行以下操作:

_path = sys.path
sys.path = ()
try:
  from time import *
finally:
  sys.path = _path
  del _path

def extra_method():
  pass

结果是 time.py 包含了内置 time 模块的所有全局变量,但添加了 extra_method

在 MicroPython 的早期版本中,您可以通过在其名称前添加 u 来强制导入内置模块。例如,使用 import utime 而不是 import time。例如,文件系统上的 time.py 可能看起来像这样:

from utime import *

def extra_method():
  pass

这种方式仍然受到支持,但现在更倾向于使用上述的 sys.path 方法,因为在 MicroPython 的未来版本中将从内置模块的名称中移除 u 前缀。

除了在特定需要强制使用内置模块的情况外,代码应该始终使用 import module 而不是 import umodule