MicroPython库

警告

本节的重要概要

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

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

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

  • 为了允许扩展性,一些内置模块可以 从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 — 比例/积分/微分控制

bno055 — IMU驱动

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

ssd1306 — OLED驱动

tb6612 — 步进电机驱动

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

modbus — modbus协议库

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

mqtt — mqtt协议库

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

vl53l1x — ToF距离传感器驱动

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

从 Python 扩展内置库

Python代码可以通过在文件系统中提供同名模块来扩展内置模块的子集。这种扩展性适用于以下内置到固件中的 Python 标准库模块:array、binascii、collections、errno、gzip、hashlib、heapq、io、json、os、platform、random、re、select、socket、ssl、struct、time 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。