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 库的即插即用替代品。
array
– 数组asyncio
— 异步 I/O 调度器binascii
– 二进制/ASCII 转换builtins
– 内置模块和异常cmath
– 复数的数学函数collections
– 集合和容器类型errno
– 系统错误代码gc
– 控制垃圾收集器gzip
– gzip 压缩与解压缩hashlib
– 散列算法heapq
– 堆队列算法io
– 输入/输出流json
– JSON 编码与解码math
– 数学函数os
– 基本的“操作系统”服务platform
– 访问底层平台的识别数据random
– 生成随机数re
– 简单的正则表达式select
– 等待一组流上的事件socket
– socket模块ssl
– SSL/TLS 模块struct
– 打包和解压原始数据类型sys
— 系统特定函数time
– 时间相关函数zlib
– zlib 压缩与解压缩_thread
– 多线程支持
MicroPython-特定库¶
以下库中的功能是 MicroPython 实现特有的。
特定于OpenMV Cam的库¶
以下库专门用于OpenMV Cam。
pyb
— 与板子相关的函数stm
— 特定于STM32微控制器的功能sensor
— 相机传感器image
— 机器视觉ml
— 机器学习gif
— GIF 录制mjpeg
— mjpeg 录音audio
— Audio 模块display
— 显示驱动fir
— 热传感器驱动程序(fir == 远红外)tv
— 图传扩展板板驱动程序cpufreq
— CPU频率控制buzzer
— 蜂鸣器驱动程序imu
— IMU 传感器rpc
— rpc 库rtsp
— rtsp库omv
— OpenMV Cam 信息gt911
— 触摸屏驱动ft5x06
— 触摸屏驱动tfp410
— DVI/HDMI 控制器
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
。