OpenMV MicroPython 库¶
警告
本节内容重要摘要
MicroPython 提供了一些内置模块,它们镜像了 Python 标准库 的功能(例如
os、time),同时也提供了 MicroPython 专属模块(例如bluetooth、machine)。大多数 Python 标准库模块实现了对应 Python 模块功能的一个子集,并且在少数情况下提供了一些 MicroPython 专属的扩展(例如
array、os)由于资源限制或其他原因,某些移植版本或固件版本可能不包含这里记录的全部功能。
为了便于扩展,某些内置模块可以 通过加载到设备文件系统上的 Python 代码进行扩展。
本章描述内置于 MicroPython 中的模块(函数库和类库)。本文档总体上力求描述 MicroPython 项目中实现的所有模块以及函数/类。然而,MicroPython 具有高度可配置性,针对某个特定主板/嵌入式系统的每个移植版本可能只包含可用 MicroPython 库的一个子集。
鉴于此,请注意本文档中描述的某个模块中的部分函数/类(甚至整个模块)可能在特定系统上的特定 MicroPython 构建版本中不可用。要查找某个特定功能是否可用的一般信息,最佳位置是“General Information”一节,其中包含与特定 MicroPython port 相关的信息。
在某些移植版本上,你可以通过在 REPL 中输入以下内容来发现可导入的、可用的内置库:
help('modules')
除了本文档中描述的内置库之外,更多来自 Python 标准库的模块以及对其的更多 MicroPython 扩展,都可以在 micropython-lib 中找到。
Python 标准库与微型库¶
以下标准 Python 库已被“微型化”,以契合 MicroPython 的理念。它们提供了相应模块的核心功能,旨在作为标准 Python 库的直接替代品。
array--- 数值数据数组asyncio--- 异步 I/O 调度器binascii--- 二进制/ASCII 转换builtins--- 内置函数和异常cmath--- 复数数学函数collections--- 集合与容器类型errno--- 系统错误码gc--- 控制垃圾回收器gzip--- gzip 压缩与解压缩hashlib--- 哈希算法heapq--- 堆队列算法io--- 输入/输出流json--- JSON 编码与解码marshal--- Python 对象序列化math--- 数学函数os--- 基本的“操作系统”服务platform--- 访问底层平台的标识数据random--- 生成随机数re--- 简单正则表达式select--- 等待一组流上的事件socket--- socket 模块ssl--- SSL/TLS 模块string.templatelib--- 模板字符串支持struct--- 打包和解包基本数据类型sys--- 系统相关函数time--- 时间相关函数types--- 内置类型的名称zlib--- zlib 压缩与解压缩
OpenMV Cam 库¶
以下各节描述了每个 OpenMV 支持的主板上可用的库,既包括 MicroPython 专属的内置模块,也包括 OpenMV 自有的扩展。
通用模块¶
内置于每块 OpenMV 摄像头主板的固件中。
bluetooth--- 底层蓝牙cryptolib--- 加密算法deflate--- deflate 压缩与解压缩framebuf--- 帧缓冲区操作machine--- 与硬件相关的函数micropython--- 访问和控制 MicroPython 内部机制network--- 网络配置openamp--- 提供标准的非对称多处理(AMP)支持uctypes--- 以结构化方式访问二进制数据vfs--- 虚拟文件系统控制csi--- 摄像头传感器sensor--- 摄像头传感器image--- 机器视觉gif--- gif 录制mjpeg--- mjpeg 录制audio--- 音频模块display--- 显示驱动fir--- 热成像传感器驱动(fir == 远红外)tof--- 飞行时间传感器驱动imu--- imu 传感器omv--- OpenMV Cam 信息crc--- CRC 计算ml--- 机器学习ulab--- 与 numpy 兼容的数组库protocol--- OpenMV 协议通道logging--- 事件日志senml--- 传感器标记语言(Sensor Markup Language)
在大多数 OpenMV 摄像头主板上随附的固化 Python 辅助模块(驱动、网络和实用工具):
网络辅助模块(需要可用的网络接口):
Web 框架¶
Web 服务器框架模块。关于哪些主板包含每个模块,请参阅下方的各主板章节。
移植专属模块¶
与特定 MCU 系列绑定的模块。关于哪些主板包含每个模块,请参阅下方的各主板章节。
硬件驱动¶
用于一块或多块 OpenMV 支持主板上随附的传感器、显示屏及其他外设的驱动。关于哪些主板包含每个模块,请参阅下方的各主板章节。
dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动程序neopixel--- 控制 WS2812 / NeoPixel LEDlsm6dsox--- LSM6DSOX 6 轴 IMUbmi270--- BMI270 六轴 IMUbmm150--- BMM150 三轴磁力计lsm9ds1--- LSM9DS1 9 轴 IMUhts221--- HTS221 湿度/温度传感器lps22h--- LPS22HB/HH 压力传感器hs3003--- HS3003 湿度/温度传感器espflash--- ESP32 ROM 引导加载程序固件烧录工具imu--- 用于 Arduino Nano 33 BLE Sense 的 IMU 辅助模块ssd1306--- OLED 驱动tb6612--- TB6612 电机驱动pca9674a--- I2C 扩展器驱动tfp410--- DVI/HDMI 控制器ft5x06--- 触摸屏驱动gt911--- GT911 五点电容式触摸控制器lora--- LoRa 调制解调器驱动apds9960--- 接近、手势和颜色传感器驱动romfs--- ROMFS 辅助工具
各主板可用情况¶
下面的列表显示了每块主板上随附的移植专属模块和驱动模块。除非另有说明,通用、固化 Python 辅助模块 和 网络辅助模块(见上文)中的所有模块在每块摄像头主板上均可用。
OpenMV N6
STM32N657(Cortex-M55 @ 800 MHz),配备 1 GHz 片上 NPU,INT8 算力达 600 GOPS。该 NPU 与 PAG7936 100 万像素全局快门传感器搭配使用。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能ssd1306--- OLED 驱动tb6612--- TB6612 电机驱动jwt--- JSON Web 令牌microdot--- 极简 HTTP 框架
OpenMV AE3
Alif Ensemble E3 双核 SoC:Cortex-M55 @ 400 MHz(HP)加 Cortex-M55 @ 160 MHz(HE),配备两个片上 NPU(400 MHz / 204 GOPS HP NPU + 160 MHz / 46 GOPS HE NPU)。
alif--- Alif Ensemble SoC 功能romfs--- ROMFS 辅助工具pca9674a--- PCA9674A I2C 扩展器驱动jwt--- JSON Web 令牌microdot--- 极简 HTTP 框架
OpenMV Cam RT1062
围绕 NXP i.MX RT1062(Cortex-M7 @ 600 MHz)构建的低功耗机器视觉主板。集成了 USB-C 高速网络、Wi-Fi / 蓝牙以及 10/100 以太网。
mimxrt--- NXP i.MX RT 专属功能dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动neopixel--- 控制 WS2812 / NeoPixel LEDssd1306--- OLED 驱动tb6612--- TB6612 电机驱动pca9674a--- PCA9674A I2C 扩展器驱动jwt--- JSON Web 令牌microdot--- 极简 HTTP 框架
OpenMV Pure Thermal
围绕 STM32H743(Cortex-M7 @ 480 MHz)构建的全系统热成像主板,配备 64 MB 外部 SDRAM、32 MB QSPI 闪存、硬件 JPEG 编解码器以及 DVI/HDMI 输出。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能tfp410--- DVI/HDMI 串行器ft5x06--- 电容式触摸屏驱动dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动neopixel--- 控制 WS2812 / NeoPixel LEDssd1306--- OLED 驱动tb6612--- TB6612 电机驱动
OpenMV Cam H7 Plus
STM32H743(Cortex-M7 @ 480 MHz),配备 32 MB 外部 SDRAM、32 MB QSPI 闪存、硬件 JPEG 编解码器以及 OV5640 500 万像素摄像头模块。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动neopixel--- 控制 WS2812 / NeoPixel LEDssd1306--- OLED 驱动tb6612--- TB6612 电机驱动
OpenMV Cam H7
STM32H743(Cortex-M7 @ 480 MHz),配备 1 MB 内部 SRAM、2 MB 内部闪存以及硬件 JPEG 编解码器。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动neopixel--- 控制 WS2812 / NeoPixel LEDssd1306--- OLED 驱动tb6612--- TB6612 电机驱动
OpenMV Cam M7
STM32F765(Cortex-M7 @ 216 MHz),配备 512 KB 内部 SRAM 和 2 MB 内部闪存。随附 OV7725 传感器。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动neopixel--- 控制 WS2812 / NeoPixel LEDssd1306--- OLED 驱动tb6612--- TB6612 电机驱动
OpenMV Cam M4
STM32F427(Cortex-M4 @ 180 MHz),配备 256 KB 内部 SRAM 和 1 MB 内部闪存。随附 OV7725 传感器。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动neopixel--- 控制 WS2812 / NeoPixel LEDssd1306--- OLED 驱动tb6612--- TB6612 电机驱动
Arduino Nicla Vision
围绕 STM32H747AII6 双核 SoC 构建的 22.86 × 22.86 mm 机器视觉主板:Cortex-M7 @ 400 MHz 加 Cortex-M4 @ 200 MHz。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能lsm6dsox--- LSM6DSOX 6 轴 IMUdht--- DHT11 和 DHT22 温湿度传感器ds18x20--- DS18x20 温度传感器驱动onewire--- 1-Wire 总线协议neopixel--- 控制 WS2812 / NeoPixel LED
Arduino Portenta H7
围绕 STM32H747XI 双核 SoC 构建的 66 × 25 mm 工业开发板:Cortex-M7 @ 400 MHz 加 Cortex-M4 @ 200 MHz。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能dht--- DHT11 和 DHT22 温湿度传感器ds18x20--- DS18x20 温度传感器驱动onewire--- 1-Wire 总线协议neopixel--- 控制 WS2812 / NeoPixel LEDlora--- LoRa 调制解调器驱动ssd1306--- OLED 驱动tb6612--- TB6612 电机驱动
Arduino Giga R1 WiFi
围绕 STM32H747XI 双核 SoC 构建的 101 × 53 mm Mega 外形主板:Cortex-M7 @ 480 MHz 加 Cortex-M4 @ 240 MHz,并配有板载 800x480 触摸屏。
pyb--- 与主板相关的功能stm--- STM32 MCU 专属功能dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议neopixel--- 控制 WS2812 / NeoPixel LEDgt911--- GT911 5 点电容式触摸控制器ft5x06--- 电容式触摸屏驱动
Arduino Nano RP2040 Connect
基于 RP2040 的 Nano 外形主板,搭载 U-blox NINA-W102 Wi-Fi/蓝牙模块。已不再积极支持;保留此主板的最后一个 OpenMV 固件版本仅供存档使用。
rp2--- RP2040 专属 PIO / DMA / 闪存辅助模块espflash--- ESP32 ROM 引导加载程序固件烧录器lsm6dsox--- LSM6DSOX 6 轴 IMUdht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动neopixel--- 控制 WS2812 / NeoPixel LED
Arduino Nano 33 BLE Sense
Nordic nRF52840 Nano 外形主板,搭载板载 Arduino 传感器套件。已不再积极支持;保留此主板的最后一个 OpenMV 固件版本仅供存档使用。
ubluepy--- 基于 Nordic SoftDevice 的蓝牙 LE 外设与中心设备 APIbmi270--- BMI270 6 轴 IMUbmm150--- BMM150 3 轴磁力计lsm9ds1--- LSM9DS1 9 轴 IMUhts221--- HTS221 湿度/温度传感器lps22h--- LPS22HB/HH 压力传感器hs3003--- HS3003 湿度/温度传感器apds9960--- 接近、手势和颜色传感器驱动dht--- DHT11 和 DHT22 温湿度传感器onewire--- 1-Wire 总线协议ds18x20--- DS18x20 温度传感器驱动neopixel--- 控制 WS2812 / NeoPixel LED
从 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。